HTTP 協議知識點總結(一)

HTTP

在許多大公司的面試中,常常會重點考察面試者的計算機基礎知識。因此對於在計算機網絡、數據結構、操做系統上花費更多的時間和精力,是徹底值得的。HTTP 做爲應用最爲普遍的網絡協議,不論前端和後端都須要常常接觸。最近決定對 HTTP 進行了一些學習,因此整理一份筆記並分享給你們。html

HTTP (HyperText Transfer Protocol) 一般被咱們稱爲超文本傳輸協議,又譯爲超文本轉移協議。它的命名如何,不須要過於糾結,咱們更應該重視它的內容。前端

HTTP 與 TCP/IP

OSI 模型與 TCP/IP 模型對比
OSI TCP/IP
應用層
表示層
會話層
應用層
傳輸層 傳輸層
網絡層 網絡層
數據鏈路層
物理層
鏈路層
TCP/IP 四層模型分析

HTTP 是 TCP/IP 協議內部的一個子集,在瞭解它以前咱們須要先了解一下 TCP/IP 相關的知識。TCP/IP(Transmission Control Protocol/Internet Protocol)協議分爲應用層、傳輸層、網絡層、鏈路層四層,我簡單的來總結舉例一下。面試

應用層後端

應用層向用戶提供一系列的應用服務。
好比咱們熟悉的 DNS(Domain Name Service,域名解析)、FTP(File Transfer Protocol,文件傳輸協議),固然還有咱們要講的 HTTP 協議。
有時在 App Store 沒法下載應用時,就常常會把 DNS 設置爲谷歌的 8.8.8.8 或者國內的 114.114.114.114,這些都是比較常見的服務。瀏覽器

傳輸層緩存

傳輸層提供鏈接兩臺計算機之間的數據傳輸。
傳輸層有兩種協議: TCP(Transmission Control Protocol,傳輸控制協議) UDP(User Datagram protocol,用戶數據報協議)服務器

網絡層網絡

網絡層規定了經過什麼樣的方式將數據包傳遞給對方。 網絡層協議的表明包括: IP(Internet Protocol,互聯網協議)
ICMP(Internet Control Message Protocol,互聯網消息控制協議)數據結構

由於 IP 並非徹底可靠,沒法保證數據被送達。因此須要 ICMP 傳輸出錯報告控制信息。ICMP 最著名的應用應該就是 ping 了,好比咱們上不去某個網站,就能夠在終端輸入測試一下。app

ping www.baidu.com
// 而後就能夠看到一些返回值
PING www.a.shifen.com (180.149.132.151): 56 data bytes
64 bytes from 180.149.132.151: icmp_seq=0 ttl=55 time=31.431 ms
Request timeout for icmp_seq 1
64 bytes from 180.149.132.151: icmp_seq=2 ttl=55 time=30.530 ms
64 bytes from 180.149.132.151: icmp_seq=3 ttl=55 time=30.233 ms    
複製代碼

鏈路層

鏈路層用來連接網絡的硬件部分。
網絡層傳過來的數據在這裏被加工成了可被物理層傳輸的結構包——幀。幀中包括 MAC 地址(Media Access Control)和一些其餘信息。放一幅在網上找的圖給你們展現一下。

數據幀結構

一個訪問百度網站的例子
  1. 在瀏覽器輸入 http://www.baidu.com。
  2. DNS 經過你輸入的地址,找到百度的 IP 地址 14.215.177.38。
  3. 經過 ARP 協議尋找 MAC 地址,創建 TCP 鏈接。
  4. 三次握手
    • 發送端:發送帶有 SYN 的數據包
    • 接收端:應答,發送帶有 SYN/ACK 的數據包
    • 發送端:應答,發送帶有 ACK 的數據包
  5. 經過返回的數據包顯示網頁

這個例子簡單總結一下,深刻的話也寫不完(攤手)。

常見的 HTTP 方法

方法 說明
GET 獲取資源
POST 傳輸實體主體
PUT 傳輸替換目標資源
DELETE 刪除目標資源
HEAD 獲取報文首部
OPTIONS 獲取支持的方法
常見方法分析

GET 與 POST 的區別

這也算是面試比較常問的問題了,這裏放上一個表格。

GET POST
後退按鈕/刷新 無害 數據會被從新提交(瀏覽器會提示)
書籤/緩存/歷史 X
編碼類型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。爲二進制數據使用多重編碼
數據長度限制 URL 的最大長度是 2048 個字符 無限制
數據類型限制 只容許 ASCII 字符 無限制
可見性 數據在 URL 中對全部人可見、請求會保存在歷史記錄 數據保存在主體中、請求不會保存在歷史記錄

PUT 請求

PUT 與 POST 方法的區別在於,PUT方法是冪等的:調用一次與連續調用屢次是等價的(即沒有反作用),而連續調用屢次POST方法可能會有反作用,好比將一個訂單重複提交屢次。

DELETE 請求

若是 DELETE方法成功執行,那麼可能會有如下幾種狀態碼:

  • 狀態碼  202 (Accepted) 表示請求的操做可能會成功執行,可是還沒有開始執行。
  • 狀態碼 204 (No Content) 表示操做已執行,可是無進一步的相關信息。
  • 狀態碼  200 (OK) 表示操做已執行,而且響應中提供了相關狀態的描述信息。

HEAD 請求

HEAD 請求就如同前面表格所說的是獲取報文首部,該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載, 以此能夠節約帶寬資源。

OPTIONS 請求

OPTIONS 請求就是用於獲取目的資源所支持的通訊選項,平時在作 ionic、Angular 的時候,它就常常會在請求前自動調用一個 OPTIONS 方法。

HTTP 狀態碼

簡單的說,HTTP 狀態碼就是描述返回的請求結果。 這裏仍是拿一個表格展現一下,因爲種類比較多,因此只列舉種類,不進行徹底列舉。

類別 緣由
1xx Informational(信息性狀態碼) 接收的請求正在處理
2xx Success(成功狀態碼) 請求正常處理完畢
3xx Redirection(重定向狀態碼) 須要進行附加操做以完成請求
4xx Client Error(客戶端錯誤狀態碼) 服務器沒法處理請求
5xx Server Error(服務端錯誤狀態碼) 服務器處理請求出錯

HTTP 報文首部字段

HTTP 報文的首部字段,主要是用來傳遞額外的重要信息

一個簡單的請求例子

前面講了這麼多,這裏結合請求方法、狀態碼等舉一個例子。

發起請求:

GET / HTTP/1.1
Request URL: https://www.baidu.com/favicon.ico
Host: www.baidu.com
Accept-Language: zh-CN
複製代碼

服務端返回:

HTTP/1.1 200 OK
Date: Sat, 07 Apr 2018 02:17:48 GMT
Server: Apache
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
Accept-Ranges: bytes
Content-Length: 984
Content-Type: image/x-icon
複製代碼

如今咱們分析一下這個例子。

發起請求

// 請求方法 / HTTP 版本號
GET / HTTP/1.1
// 請求地址
Request URL: https://www.baidu.com/favicon.ico
// 請求資源所在服務器
Host: www.baidu.com
// 優先選擇的語言(天然語言)
Accept-Language: zh-CN
複製代碼

服務端返回

// HTTP 版本、HTTP 狀態碼 200
HTTP/1.1 200 OK
// 建立報文的日期
Date: Sat, 07 Apr 2018 02:17:48 GMT
// HTTP 服務器的安裝信息
Server: Apache
// 資源的最後修改時間
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
// 支持字節範圍請求
Accept-Ranges: bytes
// 實體主體的大小
Content-Length: 984
// 實體主體的類型
Content-Type: image/x-icon
複製代碼

HTTP 首部字段種類很是多,該例子舉例了經常使用的一部分,想了解更多能夠研究 MDN HTTP Headers 文檔

MDN HTTP Headers

目前裏面中文翻譯不夠完整,翻譯水平高的朋友能夠點擊幫忙完善一下,爲開源事業出一份力:)

此次就總結到這裏了,因爲水平有限,不免有些許紕漏。有什麼錯誤請指出,不勝感激。

參考文章

爲什麼HTTP被翻譯爲「超文本傳輸協議」是一次歷史上的重大翻譯錯誤? HTTP 協議入門-阮一峯 TCP/IP 協議 百度百科 ping 原理與ICMP協議 漫談網絡通訊——從OSI網絡模型到TCP/IP協議族 HTTP 方法-w3school HTTP 請求方法-MDN 《圖解HTTP》

相關文章
相關標籤/搜索