1. 程式人生 > >HTTP請求報文、響應報文

HTTP請求報文、響應報文

HTTP請求報文


HTTP請求報文由3部分組成(請求行+請求頭+請求體):

 

 

請求行:
是請求方法,GETPOST是最常見的HTTP方法,除此以外還包括DELETEHEADOPTIONSPUTTRACE
為請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL
是協議名稱及版本號。
請求頭:
HTTP的報文頭,報文頭包含若干個屬性,格式為屬性名:屬性值,服務端據此獲取客戶端的資訊。
與快取相關的規則資訊,均包含在header
請求體:
是報文體,它將一個頁面表單中的元件值通過param1=value1¶m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求引數的資料。不但報文體可以傳遞請求引數,請求

URL也可以通過類似於“/chapter15/user.html? param1=value1¶m2=value2”的方式傳遞請求引數。

HTTP響應報文
HTTP的響應報文也由三部分組成(響應行+響應頭+響應體)

 

響應行:
報文協議及版本;
狀態碼及狀態描述;
響應頭:
響應報文頭,也是由多個屬性組成;
響應體:
響應報文體,即我們真正要的乾貨

 

響應狀態碼
  和請求報文相比,響應報文多了一個響應狀態碼,它以清晰明確的語言告訴客戶端本次請求的處理結果。
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去吧!
◆200 (OK): 找到了該資源,並且一切正常。
◆304 (NOT MODIFIED): 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的快取機制。
◆401 (UNAUTHORIZED): 客戶端無權訪問該資源。這通常會使得瀏覽器要求使用者輸入使用者名稱和密碼,以登入到伺服器。
◆403 (FORBIDDEN): 客戶端未能獲得授權。這通常是在401之後輸入了不正確的使用者名稱或密碼。
◆404 (NOT FOUND): 在指定的位置不存在所申請的資源。

 

常見的HTTP響應報文頭屬性

 

Cache-Control
響應輸出到客戶端後,服務端通過該報文頭屬告訴客戶端如何控制響應內容的快取。
常見的取值有privatepublicno-cachemax-ageno-store,預設為private
private: 客戶端可以快取
public: 客戶端和代理伺服器都可快取(前端的同學,可以認為publicprivate是一樣的)
max-age=xxx: 快取的內容將在 xxx 秒後失效
no-cache: 需要使用對比快取來驗證快取資料(後面介紹)
no-store: 所有內容都不會快取
預設為private,快取時間為31536000秒(365天)也就是說,在365天內再次請求這條資料,都會直接獲取快取資料庫中的資料,直接使用。

 

ETag


  一個代表響應服務端資源(如頁面)版本的報文頭屬性,如果某個服務端資源發生變化了,這個ETag就會相應發生變化。它是Cache-Control的有益補充,可以讓客戶端更智慧地處理什麼時候要從服務端取資源,什麼時候可以直接從快取中返回響應。


Location
我們在JSP中讓頁面Redirect到一個某個A頁面中,其實是讓客戶端再發一個請求到A頁面,這個需要Redirect到的A頁面的URL,其實就是通過響應報文頭的Location屬性告知客戶端的,如下的報文頭屬性,將使客戶端redirectiteye的首頁中:
Location: http://www.iteye.com
Set-Cookie
服務端可以設定客戶端的Cookie,其原理就是通過這個響應報文頭屬性實現的:
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1