此次整理HTTP相關知識點的初衷是由於項目中有大量與網絡請求相關的知識細節點,因此此次整理的更多的是平常中用獲得的點(參考圖解HTTP),另外給打算作FE的新人們一些建議:多重視網絡這方面的知識。文章的中間我會穿插一些面試時比較容易問到的網絡知識點。html
HTTP方法中,咱們最經常使用的是GET,POST,DELETE,下表對HTTP/1.1中可用的方法進行了羅列。面試
GET | 獲取資源 |
POST | 傳輸實體主體 |
PUT | 傳輸文件(通常會配合Web應用程序驗證機制或結構設計採用REST(表徵狀態轉移)標準的同類網站) |
HEAD | 得到報文首部,與GET方法同樣,只是不返回報文主體內容。用於確認URI的有效性及資源更新的日期時間等。 |
DELETE | 刪除文件,與PUT相反(響應返回204 No Content) |
OPTIONS | 詢問支持的方法,查詢針對請求URI指定的資源支持的方法(Allow:GET、POST、HEAD、OPTIONS)。 |
TRACE | 追蹤路徑 |
CONNECT | 要求用隧道協議鏈接代理(主要使用SSL(安全套接層)和TLS(傳輸層安全)協議把通訊內容加密後經網絡隧道傳輸)。 |
提問:GET與POST的區別?瀏覽器
能夠參考 淺談HTTP中Get與Post的區別。緩存
下圖須要補充:在從DNS服務器獲取IP後,進行3次握手。安全
提問:爲何三次握手,二次不能夠嗎?服務器
答:不能夠,只有完成3次才能進行後續操做,若在握手過程當中某個階段中斷,TCP協議會再次以相同的順序發送相同的數據包。並且,第三次握手是客戶端爲了讓服務器知道它是否接收到響應,確保鏈接創建成功。以下所示:cookie
----------SYN-----------> 網絡
客戶端 ---------SYN/ACK-------> 服務器dom
-----------ACK----------->網站
狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。 狀態碼以3爲數字和緣由短語組成。 數字中的第一位定義了響應類別,後兩位無分類。響應類別有如下五種:
類別 | 緣由短語 | |
1xx | Informational(信息性狀態碼) | 接收的請求正在處理 |
2xx | Success(成功狀態碼) | 請求正常處理完畢 |
3xx | Redirection(重定向狀態碼) | 須要進行附加操做以完成請求 |
4xx | Client Error(客戶端錯誤狀態碼) | 服務器沒法處理請求 |
5xx | Server Error(服務器錯誤狀態碼) | 服務器處理請求出錯 |
只要遵照狀態碼類別的定義,即便改變 RFC2616 中定義的狀態碼,或服務器端自行建立狀態碼都沒問題。
經常使用的14種狀態碼:
提問:301與302區別?
答:301是永久性重定向,搜索引擎在抓取新內容的同時也將舊的網址替換爲重定向以後的網址。 302是臨時性重定向,搜索引擎會抓取新的內容而保留舊的網址。由於服務器返回302代碼,搜索引擎認爲新的網址只是暫時的。
HTTP協議的請求和響應報文中一定包含HTTP首部。使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。
HTTP首部字段根據實際通途被分爲如下4種類型:
通用首部字段
首部字段名 | 說明 |
---|---|
Cache-Control | 控制緩存行爲 |
Connection | 逐跳首部、鏈接的管理 |
Date | 建立報文的日期時間 |
Pragma | 報文指令 |
Trailer | 報文末端的首部一覽 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級爲其餘協議 |
Via | 代理服務器的相關信息 |
Warning | 錯誤通知 |
Cache-Control的no-cache指令表明不緩存過時的資源,而不是不緩存。no-store纔是真正不進行緩存。 Connection首部字段的值爲close時,表明服務器想明確斷開鏈接(HTTP/1.1默認都是持久鏈接)
請求首部字段
首部字段名 | 說明 |
---|---|
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言 |
Authorization | Web認證信息 |
Expect | 期待服務器的行爲 |
From | 用戶的電子郵箱地址 |
Host | 請求資源所在服務器 |
If-Match | 比較實體標記(ETag) |
If-Modified-Since | 比較資源的更新時間 |
If-Node-Match | 比較實體標記(與If-Match相反) |
If-Range | 資源未更新時發送實體Byte的範圍請求 |
If-Unmodified-Since | 比較資源的更新時間(與If-Modified-Since相反) |
Max-Forwards | 最大傳輸逐跳數 |
Proxy-Authorization | 代理服務器要求客戶端的認證信息 |
Range | 實體的字節範圍請求 |
Referer | 對請求中URI的原始獲取方 |
TE | 傳輸編碼的優先級 |
User-Agent | HTTP客戶端程序的信息 |
該表的Accept*字段均可以指定權重q(0-1)。當服務器提供多種內容時,將會首先返回權重最高的。 If-xxx請求首部字段都稱爲條件請求,服務器接收到附帶條件的請求後,只有判斷指定條件爲真時,纔回執行請求。 Referer 的正確拼寫應該是Referrer。當直接在瀏覽器的地址欄輸入URI時,或處於安全考慮時,可不發該首部字段。
響應首部字段
首部字段名 | 說明 |
---|---|
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 | 資源的最後修改日期時間 |
爲Cookie服務的首部字段
首部字段名 | 說明 | 首部類型 |
---|---|---|
Set-Cookie | 開始狀態管理所使用的Cookie信息 | 響應首部字段 |
Cookie | 服務器接收到的Cookie信息 | 請求首部字段 |
Set-Cookie字段的屬性
屬性 | 說明 |
---|---|
NAME=VALUE | 賦予Cookie的名稱和其值(必需項) |
expires=DATE | Cookie的有效期(若不明確指定則默認爲瀏覽器關閉前爲止) |
path=Path | 將服務器上的文件目錄做爲Cookie的適用對象(若不指定則默認爲文檔所在的文件目錄) |
domain=域名 | 做爲Cookie適用對象的域名(若不指定則默認爲建立Cookie的服務器的域名) |
Secure | 僅在HTTPS安全通訊時纔會發送Cookie |
HttpOnly | 加以限制,使Cookie不能被JavaSript腳本訪問 |
expires:一旦Cookie從服務器端發送至客戶端,服務器端就不存在能夠顯示刪除Cookie的方法。但可經過覆蓋已過時的Cookie,實現對客戶端Cookie的實質性刪除操做。 path:用來指定cookie被髮送到服務器的哪個目錄路徑下(即被服務器哪一個路徑接收cookie),其中"/"指的是站點根目錄,可在同一臺服務器(即便有多個應用)內共享該cookie。
下回再對http2.0,身份認證以及Web攻擊技術的知識點進行羅列總結。