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還沒有普及
7、HTTP最新版的RFChttps://www.ietf.org/rfc/rfc2616.txt
8、WEB組件包括:代理、緩存、網關、隧道、Agent代理
協議詳解
協議棧位置
鏈路層頭 IP頭 TCP頭 HTTP
報文封裝
報文首部 請求行
狀態行 請求的方法 請求URL HTTP協議版本
HTTP協議版本 響應結構 原因短語
請求首部字段
響應首部字段 請求首部:
1、請求報文特有的,如Accept: /
響應首部:
1、響應報文特有的,如Server: Tiki-Hut/1.0
通用首部字段 1、客戶端和服務器都可以使用的通用首部,提供一些非常有用的通用功能
2、比如, Date 首部就是一個通用首部,每一端都可以用它來說明構建報文的時間和日期
實體首部字段 1、實體首部指的是用於應對實體主體部分的首部,用實體首部來說明實體主體部分的數據類型如Content-Type: text/html; charset=iso-latin-1
擴展首部字段 擴展首部是非標準的首部,由應用程序開發者創建,但還未添加到已批準的HTTP 規範中去。即使不知道這些擴展首部的含義,HTTP 程序也要接受它們並對其進行轉發
空白行 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
詳見
https://blog.csdn.net/andrewpj/article/details/45727853
https://www.ietf.org/rfc/rfc2617.txt
SSL客戶端
FORM表單
最常見的認證方式
參考
https://www.ietf.org/rfc/rfc2616.txt
最後更新:2017-10-28 12:04:07