客戶端發送請求給服務器,建立一個TCP連接,指定端口號,默認80,鏈接到服務器,服務器監聽瀏覽器請求,一旦監聽到客戶端請求,分析請求類型後,服務器會向客戶端放回狀態信息和數據內容。html
GET 方法用來請求訪問已被 URI 識別的資源。指定的資源經服務器端解析後返回響應內容。web
POST 方法用來傳輸實體的主體。
雖然用 GET 方法也能夠傳輸實體的主體,但通常不用 GET 方法進行傳輸,而是用 POST 方法。雖然說 POST 的功能與 GET 很類似,但POST 的主要目的並非獲取響應的主體內容。跨域
PUT 方法用來傳輸文件。就像 FTP 協議的文件上傳同樣,要求在請求報文的主體中包含文件內容,而後保存到請求 URI 指定的位置。
可是,鑑於 HTTP/1.1 的 PUT 方法自身不帶驗證機制,任何人均可以上傳文件 , 存在安全性問題,所以通常的 Web 網站不使用該方法。若配合 Web 應用程序的驗證機制,或架構設計採用 REST(REpresentationalState Transfer,表徵狀態轉移)標準的同類 Web 網站,就可能會開放使用 PUT 方法。瀏覽器
HEAD 方法和 GET 方法同樣,只是不返回報文主體部分。用於確認URI 的有效性及資源更新的日期時間等。緩存
DELETE 方法用來刪除文件,是與 PUT 相反的方法。DELETE 方法按請求 URI 刪除指定的資源。
可是,HTTP/1.1 的 DELETE 方法自己和 PUT 方法同樣不帶驗證機制,因此通常的 Web 網站也不使用 DELETE 方法。當配合 Web 應用程序的驗證機制,或遵照 REST 標準時仍是有可能會開放使用的。安全
OPTIONS 方法用來查詢針對請求 URI 指定的資源支持的方法。服務器
TRACE 方法是讓 Web 服務器端將以前的請求通訊環回給客戶端的方法。
發送請求時,在 Max-Forwards 首部字段中填入數值,每通過一個服務器端就將該數字減 1,當數值恰好減到 0 時,就中止繼續傳輸,最後接收到請求的服務器端則返回狀態碼 200 OK 的響應。
客戶端經過 TRACE 方法能夠查詢發送出去的請求是怎樣被加工修改 / 篡改的。這是由於,請求想要鏈接到源目標服務器可能會經過代理中轉,TRACE 方法就是用來確認鏈接過程當中發生的一系列操做。
可是,TRACE 方法原本就不怎麼經常使用,再加上它容易引起 XST(Cross-Site Tracing,跨站追蹤)攻擊,一般就更不會用到了。cookie
狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。
藉助狀態碼,用戶能夠知道服務器端是正常處理了請求,仍是出現了錯誤。架構
表示從客戶端發來的請求在服務器端被正常處理了。app
該狀態碼錶明服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。另外,也不容許返回任何實體的主體。好比,當從瀏覽器發出請求處理後,返回 204 響應,那麼瀏覽器顯示的頁面不發生更新。
通常在只須要從客戶端往服務器發送信息,而對客戶端不須要發送新信息內容的狀況下使用。
該狀態碼錶示客戶端進行了範圍請求,而服務器成功執行了這部分的 GET 請求。響應報文中包含由 Content-Range 指定範圍的實體內容。
永久性重定向。該狀態碼錶示請求的資源已被分配了新的 URI,之後應使用資源如今所指的 URI。也就是說,若是已經把資源對應的 URI保存爲書籤了,這時應該按 Location 首部字段提示的 URI 從新保存。
臨時性重定向。該狀態碼錶示請求的資源已被分配了新的 URI,但願用戶(本次)能使用新的 URI 訪問。
和 301 Moved Permanently 狀態碼類似,但 302 狀態碼錶明的資源不是被永久移動,只是臨時性質的。換句話說,已移動的資源對應的URI 未來還有可能發生改變。好比,用戶把 URI 保存成書籤,但不會像301 狀態碼出現時那樣去更新書籤,而是仍舊保留返回 302 狀態碼的頁面對應的 URI。
該狀態碼錶示客戶端發送附帶條件的請求時,服務器端容許請求訪問資源,而文檔的內容(自上次訪問以來或者根據請求的條件)並無改變。
該狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容後再次發送請求。
該狀態碼錶示發送的請求須要有經過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。另外若以前已進行過 1 次請求,則表示用戶認證失敗。
返回含有 401 的響應必須包含一個適用於被請求資源的 WWW-Authenticate 首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到 401 響應,會彈出認證用的對話窗口。
該狀態碼代表對請求資源的訪問被服務器拒絕了。
未得到文件系統的訪問受權,訪問權限出現某些問題(從未受權的發送源 IP 地址試圖訪問)等狀況均可能是發生 403 的緣由。
該狀態碼代表服務器上沒法找到請求的資源。
代表當前請求使用的 HTTP 方法不被服務器容許。
例如使用GET方法請求須要POST方法的數據。
該狀態碼代表服務器端在執行請求時發生了錯誤。有多是 Web 應用存在的 bug 或某些臨時的故障。
該狀態碼代表服務器和網關/代理通訊出錯。
該狀態碼代表服務器暫時處於超負載或正在進行停機維護,如今沒法處理請求。
該狀態碼代表服務器做爲網關或代理,可是沒有及時從上游服務器收到請求。
通用首部字段是指,請求報文和響應報文雙方都會使用的首部。
指令的參數是可選的,多個指令之間經過 ,
分隔。
Cache-Control: private, max-age=0, no-cache
指令 | 參數 | 說明 |
---|---|---|
no-cache | 無 | 強制向源服務器再次驗證 |
no-store | 無 | 不緩存請求或響應的任何內容 |
max-age = [ 秒] | 必需 | 響應的最大Age值 |
max-stale( = [ 秒]) | 可省略 | 接收已過時的響應 |
min-fresh = [ 秒] | 必需 | 指望在指定時間內的響應仍有效 |
no-transform | 無 | 代理不可更改媒體類型 |
only-if-cached | 無 | 從緩存獲取資源 |
cache-extension | - | 新指令標記(token) |
指令 | 參數 | 說明 |
---|---|---|
public | 無 | 可向任意方提供響應的緩存 |
private | 可省略 | 僅向特定用戶返回響應 |
no-cache | 可省略 | 緩存前必須先確認其有效性 |
no-store | 無 | 不緩存請求或響應的任何內容 |
no-transform | 無 | 代理不可更改媒體類型 |
must-revalidate | 無 | 可緩存但必須再向源服務器進行確認 |
proxy-revalidate | 無 | 要求中間緩存服務器對緩存的響應有效性再進行確認 |
max-age = [ 秒] | 必需 | 響應的最大Age值 |
s-maxage = [ 秒] | 必需 | 公共緩存服務器響應的最大Age值 |
cache-extension | - | 新指令標記(token) |
Connection 首部字段具有以下兩個做用。
Connection: keep-alive
Connection: Upgrade
Date: Tue, 03 Jul 2012 04:40:59 GMT Date: Tue, 03-Jul-12 04:40:59 GMT Date: Tue Jul 03 04:40:59 2012
Content-Type: application/x-www-form-urlencoded Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Content-Length: 348
Host: en.wikipedia.org:8080 Host: en.wikipedia.org
Accept: text/plain
Accept-Charset: utf-8
Accept-Encoding: gzip, deflate
Origin: http://www.example-social-network.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
Cookie: $Version=1; Skin=new;
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Referer: http://en.wikipedia.org/wiki/Main_Page
X-Forwarded-For: client1, proxy1, proxy2 X-Forwarded-For: 129.78.138.66, 129.78.64.103
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43 Forwarded: for=192.0.2.43, for=198.51.100.17
Allow: GET, HEAD
Access-Control-Allow-Origin: *
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Age: 3600
ETag: "737060cd8c284d8af7ad3082f209582d"
Refresh: 5; url=http://www.w3.org/pub/WWW/People.html
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1