【java程序員理解HTTP】【5】小結

請求響應報文結構

請求報文結構

請求報文實例

響應報文結構

響應報文實例

HTTP經常使用的響應狀態碼

200 OK                        //客戶端請求成功php

400 Bad Request               //客戶端請求有語法錯誤,不能被服務器所理解html

401 Unauthorized              //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用 前端

403 Forbidden                 //服務器收到請求,可是拒絕提供服務java

404 Not Found                 //請求資源不存在,eg:輸入了錯誤的URLios

500 Internal Server Error     //服務器發生不可預期的錯誤json

503 Server Unavailable        //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常瀏覽器

請求/響應頭字段中的重要字段

User-Agent--請求頭獨有頭部字段:HTTP 客戶端程序的信息

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101服務器

首部字段 User-Agent 會將建立請求的瀏覽器和用戶代理名稱等信息傳達給服務器。網絡

由網絡爬蟲發起請求時,有可能會在字段內添加爬蟲做者的電子郵件地址。此外,若是請求通過代理,那麼中間也極可能被添加上代理服務器的名稱。app

Connection--請求頭和響應頭通用

管理持久鏈接

Connection: close

HTTP/1.1 版本的默認鏈接都是持久鏈接。當服務器端想明確斷開鏈接時,則指定 Connection 首部字段的值爲 close。

Connection: Keep-Alive

HTTP/1.1 以前的 HTTP 版本的默認鏈接都是非持久鏈接。爲此,若是想在舊版本的 HTTP 協議上維持持續鏈接,則須要指定 Connection 首部字段的值爲 Keep-Alive。

Content-Length--實體首部字段:實體主體的大小(單位:字節)

Content-Length: 15000

首部字段 Content-Length 代表了實體主體部分的大小(單位是字節)。對實體主體進行內容編碼傳輸時,不能再使用 Content-Length首部字段。

Content-Type--實體首部字段:實體主體的媒體類型(即MIME

Content-Type: text/html; charset=UTF-8

首部字段 Content-Type 說明了實體主體內對象的媒體類型。和首部字段 Accept 同樣,字段值用 type/subtype 形式賦值。參數 charset 使用 iso-8859-1 或 euc-jp 等字符集進行賦值。

經常使用的MIME類型:MIME 遵循如下格式:major/minor 主類型/次類型

例如:

image/jpg

image/gif

text/html

video/quicktime

appliation/x-httpd-php

appliation/json

appliation/xml

application/x-www-form-urlencoded

實際應用--使用SpringMVC時

Controller中使用@RequestBody註解參數,那麼要求前端(或者模擬前端好比MockMvc)向後臺請求時要以json格式請求。此時前端應該指定本身向後臺發送的參數的MIME爲appliation/json

Controller中使用@RequestParam註解參數,用於簡單類型的狀況,好比string、Integer、Double等。要求前端採用GET請求並將參數寫在連接【?】的後面,格式如:

http://localhost:1008/LoginService/login?userName=admin&password=123

應用:和前端配合時參數傳輸方式的肯定以及後臺自身提取須要的信息

和前端配合時參數傳輸方式的肯定

Controller中使用@RequestBody註解參數仍是使用@RequestParam註解參數,要和前端進行商定。

後臺自身提取須要的信息

從Http信息中提取有用的信息,好比想對請求的瀏覽器信息進行統計,能夠提取出User-Agent信息而後提取出瀏覽器信息,進行統計。

獲取瀏覽器請求頭(User-Agent)方式1--request.getHeader("User-Agent");

參考網頁

https://blog.csdn.net/mr_caoshuai/article/details/78284010

代碼

/**

     *

     * Description:java獲取客戶端

     * @Version1.0 2018-8-14 下午3:36:51

     * @param request

     * @return

     */

    public static String getPlatform(HttpServletRequest request){


        /**

         * User Agent中文名爲用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器

                                 可以識別客戶使用的操做系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等

         */

        String agent= request.getHeader("user-agent");

        //客戶端類型常量

        String type = "";

        if(agent.contains("iPhone")||agent.contains("iPod")||agent.contains("iPad")){  

            type = "ios";

        } else if(agent.contains("Android") || agent.contains("Linux")) {

            type = "apk";

        } else if(agent.indexOf("micromessenger") > 0){

            type = "wx";

        }else {

            type = "pc";

        }

        return type;

    }

獲取瀏覽器請求頭(User-Agent)方式2--經過第三方包來實現

參考網頁

https://www.sojson.com/blog/223.html

引入maven依賴

<dependency>

    <groupId>nl.bitwalker</groupId>

    <artifactId>UserAgentUtils</artifactId>

    <version>1.2.4</version>

</dependency>

代碼示例

//獲取瀏覽器信息

     String ua = request.getHeader("User-Agent");

     //轉成UserAgent對象

     UserAgent userAgent = UserAgent.parseUserAgentString(ua);

     //獲取瀏覽器信息

     Browser browser = userAgent.getBrowser();  

     //獲取系統信息

     OperatingSystem os = userAgent.getOperatingSystem();

     //系統名稱

     String system = os.getName();

     //瀏覽器名稱

     String browserName = browser.getName();

因此,這些的基礎都是http協議的學習與理解

相關文章
相關標籤/搜索