跳到主要內容
黯羽輕揚每天積累一點點

HTTP 學習筆記 1_基本常識

免費2015-05-24#HTTP#http入门#http常识#http学习

HTTP 協議是重中之重,要好好研究下。

零.額外的常識

OSI(Open System Internetwork)參考模型:

  1. 應用層

給應用程序提供網絡通信接口

  1. 表示層

  2. 會話層

  3. 傳輸層

數據傳輸單元是報文

  1. 網絡層

數據傳輸單元是分組

  1. 數據鏈路層

數據傳輸單元是

  1. 物理層

數據傳輸單元是比特 bit

OSI7 層是用來研究的理論模型,實際應用起來太繁瑣,所以有了 TCP/IP 參考模型:

P.S.此處的 TCP/IP 指協議體系,或者說是協議族,包含各種網絡協議,如 SNMP、ICMP、UDP、DNS 等等

  1. 應用層

如 HTTP、FTP、DNS

  1. 傳輸層

如 TCP、UDP

  1. 網絡層

如 IP

  1. 數據鏈路層

HTTP 是應用層協議,內部是傳輸層的 TCP 和網絡層的 IP,所以 HTTP 也需要三次握手、四次揮手

所以存在建立/釋放連接的消耗,作為性能優化 HTTP/1.1 版本默認都是持久連接,而 HTTP/1.0 並沒有

此外,有必要簡單區分一些概念:

  • 代理

一種有轉發功能的應用程序

  • 網關

轉發其它服務器通信數據的服務器

  • 隧道

能夠保持 Client 與 Server 之間的通信連接的應用程序

  • 隧道

一.URI 與 URL

  • URI(Uniform Resource Identifier):統一資源標識符,用來標識特定互聯網資源的字符串

  • URL(Uniform Resource Locator):統一資源定位符,用來標識特定互聯網資源的地點的字符串

URL 中必不可少的是模式(Scheme)、主機名(Host)和資源路徑(URL Path)

所以 URL 是 URI 的子集,或者說 URL 是 URI 的一部分

二.HTTP 方法

  • GET:獲取資源

1.0/1.1 支持,常用

  • POST:傳輸實體主體

1.0/1.1 支持,常用

  • PUT:傳輸文件

1.0/1.1 支持,一般網站不使用該方法,因為 PUT 方法自身不帶驗證機制,任何人都可以上傳文件,存在安全性問題

  • HEAD:獲取報文首部

1.0/1.1 支持,常用

  • DELETE:刪除文件

1.0/1.1 支持,存在與 PUT 方法相同的問題

  • OPTIONS:詢問支持的方法

1.1 支持

  • TRACE:追蹤路徑

1.1 支持,配合 Max-Forward 首部字段檢查路徑

  • CONNECT:要求用隧道協議連接代理

1.1 支持,配合 SSL(Secure Sockets Layer 安全套接層)、TLS(Transport Layer Security 傳輸層安全)實現用隧道進行 TCP 通信

  • (LINK):建立和資源之間的聯繫

1.0 支持,已被 1.1 廢棄

  • (UNLINK):斷開連接關係

1.0 支持,已被 1.1 廢棄

三.HTTP 狀態碼

  • 1XX:Informational(信息性狀態碼)

接收的請求正在處理

-  101:Switching Protocol,切換協議,配合 Upgrade 首部字段請求切換協議,不是很常見
  • 2XX:Success(成功狀態碼)

請求正常處理完畢

-  200:OK,請求正常處理

-  204:No Content,請求處理成功但沒有資源可返回(響應體為空)

-  206:Partial Content,請求部分內容,響應頭中的 Content-Range 表明範圍
  • 3XX:Redirection(重定向狀態碼)

需要進行附加操作以完成請求

-  301:Moved Permanently,永久性重定向,瀏覽器應該自動更新書簽

-  302:Found,臨時性重定向,不更新書簽

-  303:See Other,類似於 302,但要求用 GET 方法訪問新 URL

    注意:規範要求是遇到 301、302 不改變請求方法(本來是 POST 就接著用 POST),但*事實標準*是幾乎所有瀏覽器遇到 301、302、303 都會改用 GET 方法,這與規範不符

-  304:Not Modified,找到了資源,但不滿足請求條件(If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since)

    注意:雖然 304 屬於 3XX,但是*和重定向沒關係*
    
-  307:Temporary Redirection,臨時重定向,與 302 意義一樣

    為了糾正事實標準推出的狀態碼,希望嚴格遵守 302 不要改變方法,結果現在瀏覽器並不一定會這麼做,標準再次失敗
  • 4XX:Client Error(客戶端錯誤狀態碼)

服務器無法處理請求

-  400:Bad Request,請求報文存在語法錯誤

-  401:Unauthorized,表示需要認證(BASIC 認證或者 DIGEST 認證)或者認證失敗

-  403:Forbidden,對指定資源的訪問請求被拒絕

-  404:Not Found,服務器無法找到請求的資源,可以代替不想說明理由的 403 響應

-  405:Method Not Allowed,方法不支持,不是很常見

-  412:Precondition Failed,前提失敗,不是很常見

-  417:Expectation Failed,期望失敗,不是很常見
  • 5XX:Server Error(服務器錯誤狀態碼)

服務器處理請求出錯

  • 500:Internal Server Error,服務器在執行請求時發生了錯誤

  • 503:Service Unavailable,服務器超負載或者正在維護

四.HTTP 報文首部

HTTP 報文首部 = 報文首部 + 空行(CR+LF) + 報文主體

             = 起始行(請求行/狀態行) + 首部 + 空行 + 報文主體
             
             = 起始行 + 請求/響應首部字段 + 通用首部字段 + 實體首部字段 + 空行 + 報文主體

P.S.不要小看這個空行(CR+LF),HTTP 首部注入攻擊的存在就是因為有這個空行

1.起始行

起始行分為請求行和狀態行(分別對應 HTTP 請求報文和響應報文):

  • 請求行:說明請求使用的方法、URI 和 HTTP 版本

  • 狀態行:說明返回響應的 HTTP 版本和狀態碼

2.首部字段

請求首部字段
首部字段名說明
Accept用戶代理可處理的媒體類型
Accept-Charset優先的字符集
Accept-Encoding優先的內容編碼
Accept-Language優先的語言(自然語言)
AuthorizationWeb 認證信息
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*Web 認證信息
TE傳輸編碼的優先級
User-AgentHTTP 客戶端程序的信息
響應首部字段
首部字段名說明
Accept-Ranges是否接受字節範圍請求
Age推算資源創建經過時間
ETag資源的匹配信息
Location另客戶端重定向至指定 URI
Proxy-Authenticate代理服務器對客戶端的認證信息
Retry-After對再次發起請求的時機要求
ServerHTTP 服務器的安裝信息
Vary代理服務器緩存的管理信息
WWW-Authenticate服務器對客戶端的認證信息
通用首部字段
首部字段名說明
Cache-Control控制緩存的行為
Connection逐跳首部、連接的管理
Date創建報文的日期時間
Pragma報文指令
Trailer報文末端的首部一覽
Transfer-Encoding指定報文主體的傳輸編碼方式
Upgrade升級為其它協議
Via代理服務器的相關信息
Warning錯誤通知
實體首部字段
首部字段名說明
Allow資源可支持的 HTTP 方法
Content-Encoding實體主體適用的編碼方式
Content-Language實體主體的自然語言
Content-Length實體主體的大小(單位:字節)
Content-Location代替對應資源的 URI
Content-MD5實體主體的報文摘要
Content-Range實體主體的位置範圍
Content-Type實體主體的媒體類型
Expires實體主體過期的日期時間
Last-Modified資源的最後修改日期時間

P.S.其它首部字段以及更詳細的首部字段信息請查看 博客園:HTTP 報文

參考資料:

  • 《圖解 HTTP》

評論

暫無評論,快來發表你的看法吧

提交評論