HTTP相關整理(上)

此次整理HTTP相關知識點的初衷是由於項目中有大量與網絡請求相關的知識細節點,因此此次整理的更多的是平常中用獲得的點(參考圖解HTTP),另外給打算作FE的新人們一些建議:多重視網絡這方面的知識。文章的中間我會穿插一些面試時比較容易問到的網絡知識點。html

告知服務器意圖的HTTP方法

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、HTTP、TCP、IP之間的關係

下圖須要補充:在從DNS服務器獲取IP後,進行3次握手。安全

提問:爲何三次握手,二次不能夠嗎?服務器

答:不能夠,只有完成3次才能進行後續操做,若在握手過程當中某個階段中斷,TCP協議會再次以相同的順序發送相同的數據包。並且,第三次握手是客戶端爲了讓服務器知道它是否接收到響應,確保鏈接創建成功。以下所示:cookie

                                                       ----------SYN----------->    網絡

            客戶端  ---------SYN/ACK------->   服務器dom

                                                       -----------ACK----------->網站

HTTP狀態碼

狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。 狀態碼以3爲數字和緣由短語組成。 數字中的第一位定義了響應類別,後兩位無分類。響應類別有如下五種:

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

只要遵照狀態碼類別的定義,即便改變 RFC2616 中定義的狀態碼,或服務器端自行建立狀態碼都沒問題。

經常使用的14種狀態碼:

2XX 成功
  • 200 OK:請求被正常處理
  • 204 No Content:通常在只需從客戶端往服務器發送信息,而對客戶端不須要發送新信息內容的狀況下使用。
  • 206 Partial Content:客戶端進行範圍請求
3XX 重定向
  • 301 Moved Permanently:永久重定向。表示請求的資源已被分配了新的URI,之後應使用資源如今所指的URI。 也就是說,若是已經把資源對應的URI保存爲書籤了,這時應該按Location首部字段提示的URI從新保存。
  • 302 Found:臨時性重定向。表示請求的資源已被分配了新的URI,但願用戶(本次)能使用新的URI訪問。 和301 Moved Permanently狀態碼類似,但302狀態碼錶明的資源不是被永久移動,只是臨時性質的。換句話說,已移動的資源對應的URI未來還有可能發生改變。好比,用戶把URI保存成書籤,但不會像301狀態碼出現時那樣去更新書籤,而是仍舊保留返回302狀態碼的頁面對應的URI。
  • 303 See Other:表示因爲請求對應的資源存在着另外一個URI,應使用GET方法定向獲取請求的資源。這與302相似,但303明確表示客戶端應當採用GET方法獲取資源。
  • 304 Not Modified:該狀態碼錶示客戶端發送附帶條件的請求(指採用GET方法的請求報文中包含If-Match,If-Modified-Since,If-None-March,If-Range,If-Unmodified-Since中任一首部。)時,服務器端容許請求訪問資源,但因發生請求爲知足條件的狀況後,直接返回304(服務器端資源未改變,可直接使用客戶端未過時的緩存)。304狀態碼返回時,不包含任何響應的主體部分。
    304雖被劃分在3XX類別,可是和重定向沒有關係。
  • 307 Temporary Redirect:臨時重定向。與302有相同含義。307遵照瀏覽器標準,不會從POST變成GET。
4XX 客戶端錯誤
  • 400 Bad Request:表示請求報文中存在語法錯誤。
  • 401 Unauthorized:表示發送的請求須要有經過HTTP認證(BASIC認證、DIGEST認證)的認證信息。
  • 403 Forbidden:代表對請求資源的訪問被服務器拒絕了。服務器端可在實體的主體部分對緣由進行描述(可選)
  • 404 Not Found:代表服務器上沒法找到請求的資源。除此以外,也能夠在服務器端拒絕請求且不想說明理由時時用。
5XX 服務器錯誤
  • 500 Interval Server Error:代表服務器端在執行請求時發生了錯誤。也有多是Web應用存在的bug或某些臨時的故障。
  • 503 Service Unavailable:代表服務器暫時處於超負載或正在進行停機維護,如今沒法處理請求。若是事先得知解除以上情況須要的時間,最好寫入Retry-After首部字段再返回給客戶端。

提問:301與302區別?

答:301是永久性重定向,搜索引擎在抓取新內容的同時也將舊的網址替換爲重定向以後的網址。 302是臨時性重定向,搜索引擎會抓取新的內容而保留舊的網址。由於服務器返回302代碼,搜索引擎認爲新的網址只是暫時的。

HTTP首部

HTTP協議的請求和響應報文中一定包含HTTP首部。使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。

HTTP首部字段根據實際通途被分爲如下4種類型:

  • 通用首部字段(General Header Fileds):請求報文和響應報文兩方都會使用的首部
  • 請求首都字段(Request Header Fields):從客服端向服務器端發送請求報文時使用的首部。補充了請求的附加內容、客戶端信息、響應內容相關優先級等信息。
  • 響應首部字段(Response Header Fields):從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附加內容,也會要求客戶端附加額外的內容信息。
  • 實體首部字段(Entity Header Fields):針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有關的信息。

通用首部字段

首部字段名 說明
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攻擊技術的知識點進行羅列總結。

相關文章
相關標籤/搜索