請求報文:
HTTP請求報文可以分成5部分:
①是請求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。不過,當前的大多數瀏覽器只支持GET和POST,Spring 3.0提供了一個HiddenHttpMethodFilter,允許你通過“_method”的表單參數指定這些特殊的HTTP方法(實際上還是通過POST提交表單)。服務端配置了HiddenHttpMethodFilter后,Spring會根據_method參數指定的值模擬出相應的HTTP方法,這樣,就可以使用這些HTTP方法對處理方法進行映射了。
②為請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL,③是協議名稱及版本號。
④是HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的信息。
⑤是報文體,它將一個頁面表單中的組件值通過param1=value1¶m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求參數的數據。不但報文體可以傳遞請求參數,請求URL也可以通過類似於“/aremiyi/wonter.html? param1=value1¶m2=value2”的方式傳遞請求參數。
HTTP請求報文報文頭屬性:
Accept
請求報文可通過一個“Accept”報文頭屬性告訴服務端 客戶端接受什么類型的響應。
如下報文頭相當於告訴服務端,客戶端能夠接受的響應類型僅為純文本數據。
Accept:text/plain
Cookie
客戶端的Cookie就是通過這個報文頭屬性傳給服務端的!如下所示:
Cookie: $Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23BE13C4C
Referer
表示這個請求是從哪個URL過來的:
http://localhost:8080/aremiyi/wonter.html? param1=value1¶m2=value2
Cache-Control
對緩存進行控制,如一個請求希望響應返回的內容在客戶端要被緩存一年,或不希望被緩存就可以通過這個報文頭達到目的。
如以下設置,相當於讓服務端將對應請求返回的響應內容不要在客戶端緩存:
Cache-Control: no-cache
這里就先只說這些屬性了,接着說正題:
響應報文:
①報文協議及版本;
②狀態碼及狀態描述;
③響應報文頭,也是由多個屬性組成;
④響應報文體,有很多顯示方式,也許是jeon,也許是xml等等。
HTTP的響應狀態碼由5段組成:
- 1xx 消息,一般是告訴客戶端,請求已經收到了,正在處理,別急...
- 2xx 處理成功,一般表示:請求收悉、我明白你要的、請求已受理、已經處理完成等信息.
- 3xx 重定向到其它地方。它讓客戶端再發起一個請求以完成整個處理。
- 4xx 處理發生錯誤,責任在客戶端,如客戶端的請求一個不存在的資源,客戶端未被授權,禁止訪問等。
- 5xx 處理發生錯誤,責任在服務端,如服務端拋出異常,路由出錯,HTTP版本不支持等。
以下是幾個常見的狀態碼:
200 OK
你最希望看到的,即處理成功!
303 See Other
我把你redirect到其它的頁面,目標的URL通過響應報文頭的Location告訴你。
304 Not Modified
告訴客戶端,你請求的這個資源至你上次取得后,並沒有更改,你直接用你本地的緩存吧,我很忙哦,你能不能少來煩我啊!
404 Not Found
你最不希望看到的,即找不到頁面。如你在google上找到一個頁面,點擊這個鏈接返回404,表示這個頁面已經被網站刪除了,google那邊的記錄只是美好的回憶。
500 Internal Server Error
看到這個錯誤,你就應該查查服務端的日志了,肯定拋出了一堆異常,別睡了,起來改BUG去吧!
響應體中也可以人為定義響應碼。
1 public enu ReturnResult { 2 3 SA_VERSION_ERROR("10000", "當前版本失效!"), 4 5 SA_PARAMTER_ERROR("20000", "參數值非法!"), 6 7 SA_CREATE_HEADER_REEOR("20001", "創建賬戶失敗!") 8 .....