天天看點

HTTP協定

HTTP

概念

1、HTTP是Hypertext Transfer Protocol超文本傳輸協定,是一種應用協定

2、HTTP協定是無狀态的

3、HTTP事務是指一次request-response的完整過程

4、HTTP協定是建構在TCP協定之後的,傳輸過程中的分組、重排與防止丢包是TCP進行控制,減少了HTTP協定的複雜性

5、HTTP是端到端,一次HTTP可以明确區分用戶端和服務端,發送請求的為用戶端

6、HTTP目前的協定版本為HTTP/1.1,HTTP/2.0還沒有普及

8、WEB元件包括:代理、緩存、網關、隧道、Agent代理

協定詳解

協定棧位置

鍊路層頭 IP頭 TCP頭 HTTP

封包封裝

封包首部 請求行

狀态行 請求的方法 請求URL HTTP協定版本

HTTP協定版本 響應結構 原因短語

響應首部字段 請求首部:

1、請求封包特有的,如Accept: /

響應首部:

1、響應封包特有的,如Server: Tiki-Hut/1.0

2、比如, Date 首部就是一個通用首部,每一端都可以用它來說明建構封包的時間和日期

空白行 CTRL + LF

封包主體

資源與URL

URI 1、URI 是一類更通用的資源辨別符

2、由兩個主要的子集 URL 和 URN 構成

URL 1、URL 實際上是URI的一個子集

2、URL 分以下三部分:URL 方案(schema)、伺服器的位置(www.joes-hardware.com)、資源路徑(/index.html)

3、格式:

://:@:/;?#

4、如圖

URN

URL編碼

方法、狀态碼、首部

方法

方法 協定版本 說明

GET 1.0、1.1 擷取資源

POST 1.0、1.1 1、POST 方法起初是用來向伺服器輸入資料的

2、向伺服器發送表單資料

HEAD 1.0、1.1 HEAD 方法與 GET 方法的行為很類似,但伺服器在響應中隻傳回首部。不會傳回實體的主體部分

1、在不擷取資源的情況下了解資源的情況(比如,判斷其類型)

2、通過檢視響應中的狀态碼,看看某個對象是否存在

3、通過檢視首部,測試資源是否被修改了

PUT 1.0、1.1 與 GET 從伺服器讀取文檔相反,PUT 方法會向伺服器寫入文檔

如:/PUT.txt ddddd 将ddddd寫入到文檔中

DELETE 1.0、1.1 請伺服器删除請求 URL 所指定的資源

TRACE 1.1 用戶端發起一個請求時,這個請求可能要穿過防火牆、代理、網關或其他一些應用程式。每個中間節點都可能會修改原始的 HTTP 請求。TRACE 方法允許用戶端在最終将請求發送給伺服器時,看看它變成了什麼樣子

OPTIONS 1.1 OPTIONS 方法請求 Web 伺服器告知其支援的各種功能

CONNECT 1.1

LINK 1.0

UNLINK 1.0

狀态碼

僅記錄在 RFC2616 上的 HTTP 狀态碼就達 40 種,若再加上WebDAV(Web-based Distributed Authoring and Versioning,基于網際網路的分布式創作和版本控制)(RFC4918、5842) 和附加 HTTP 狀态碼(RFC6585)等擴充,數量就達 60 餘種。别看種類繁多,實際上經常使用的大概隻有 14 種

1XX Informational(資訊性狀态碼) 接收的請求正在處理

2XX Success(成功狀态碼) 請求正常處理完畢

3XX Redirection(重定向狀态碼) 需要進行附加操作以完成請求

4XX Client Error(用戶端錯誤狀态碼) 伺服器無法處理請求

5XX Server Error(伺服器錯誤狀态碼) 伺服器處理請求出錯

常用的狀态碼

200 OK

表示從用戶端發來的請求在伺服器端被正常處理了

204 No Content

該狀态碼代表伺服器接收的請求已成功處理,但在傳回的響應封包中不含實體的主體部分。另外,也不允許傳回任何實體的主體

206 Partial Content

該狀态碼表示用戶端進行了範圍請求,而伺服器成功執行了這部分的GET 請求。響應封包中包含由 Content-Range 指定範圍的實體内容

301 Moved Permanently

永久性重定向。該狀态碼表示請求的資源已被配置設定了新的 URI,以後

應使用資源現在所指的 URI

如果已經把資源對應的 URI儲存為書簽了,這時應該按 Location 首部字段提示的 URI 重新儲存

302 Found

臨時性重定向

該狀态碼表示請求的資源已被配置設定了新的 URI,希望使用者(本次)能使用新的 URI 通路

303 See Other

該狀态碼表示由于請求對應的資源存在着另一個 URI,應使用 GET方法定向擷取請求的資源

304 Not Modified

該狀态碼表示用戶端發送附帶條件的請求時,伺服器端允許請求訪

問資源,但未滿足條件的情況

304 狀态碼傳回時,不包含任何響應的主體部分。304 雖然被劃分在 3XX 類别中,但是和重定向沒有關系

307 Temporary Redirect

臨時重定向

盡管 302 标準禁止 POST 變換成 GET,但實際使用時大家并不遵守。307 會遵照浏覽器标準,不會從 POST 變成 GET。但是,對于處理響應時的行為,每種浏覽器有可能出現不同的情況

400 Bad Request

該狀态碼表示請求封包中存在文法錯誤

401 Unauthorized

該狀态碼表示發送的請求需要有通過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證資訊

403 Forbidden

該狀态碼表明對請求資源的通路被伺服器拒絕了

404 Not Found

該狀态碼表明伺服器上無法找到請求的資源

500 Internal Server Error

該狀态碼表明伺服器端在執行請求時發生了錯誤

503 Service Unavailable

該狀态碼表明伺服器暫時處于超負載或正在進行停機維護,現在無法處理請求

首部

1、HTTP1.1中RFC中定義了47個首部,詳見RFC2616

通用首部字段

Cache-Control 控制緩存的行為

Connection 逐跳首部、連接配接的管理

Date 建立封包的日期時間

Pragma 封包指令

Trailer 封包末端的首部一覽

Transfer-Encoding 指定封包主體的傳輸編碼方式

Upgrade 更新為其他協定

Via 代理伺服器的相關資訊

Warning 錯誤通知

請求首部字段

Accept 使用者代理可處理的媒體類型

Accept-Charset 優先的字元集

Accept-Encoding 優先的内容編碼

Accept-Language 優先的語言(自然語言)

Authorization Web認證資訊

Expect 期待伺服器的特定行為

From 使用者的電子郵箱位址

Host 請求資源所在伺服器

If-Match 比較實體标記(ETag)

If-Modified-Since 比較資源的更新時間

If-None-Match 比較實體标記(與 If-Match 相反)

If-Range 資源未更新時發送實體 Byte 的範圍請求

If-Unmodified-Since 比較資源的更新時間(與If-Modified-Since相反)

Max-Forwards 最大傳輸逐跳數

Proxy-Authorization 代理伺服器要求用戶端的認證資訊

Range 實體的位元組範圍請求

Referer 對請求中 URI 的原始擷取方

TE 傳輸編碼的優先級

User-Agent HTTP 用戶端程式的資訊

響應首部字段

Accept-Ranges 是否接受位元組範圍請求

Age 推算資源建立經過時間

ETag 資源的比對資訊

Location 令用戶端重定向至指定URI

Proxy-Authenticate 代理伺服器對用戶端的認證資訊

Retry-After 對再次發起請求的時機要求

Server HTTP伺服器的安裝資訊

Vary 代理伺服器緩存的管理資訊

WWW-Authenticate 伺服器對用戶端的認證資訊

實體首部字段

Allow 資源可支援的HTTP方法

Content-Encoding 實體主體适用的編碼方式

Content-Language 實體主體的自然語言

Content-Length 實體主體的大小(機關:位元組)

Content-Location 替代對應資源的URI

Content-MD5 實體主體的封包摘要

Content-Range 實體主體的位置範圍

Content-Type 實體主體的媒體類型

Expires 實體主體過期的日期時間

Last-Modified 資源的最後修改日期時間

一次HTTP請求

HTTP身份認證

BASIC

DIGEST

詳見

<a href="http://blog.csdn.net/andrewpj/article/details/45727853">http://blog.csdn.net/andrewpj/article/details/45727853</a>

<a href="http://www.ietf.org/rfc/rfc2617.txt">http://www.ietf.org/rfc/rfc2617.txt</a>

SSL用戶端

FORM表單

最常見的認證方式

參考

<a href="http://www.ietf.org/rfc/rfc2616.txt">http://www.ietf.org/rfc/rfc2616.txt</a>

繼續閱讀