一個HTTP打趴80%面試者

閱讀原文:一個HTTP打趴80%面試者html

面試一年多,每當我問起面試者對HTTP的瞭解時,個個回答令我瞠目結舌,這些開發者都有3-5年的經驗。請不要讓我叫你野生程序員,是時候瞭解HTTP了,讓咱們當個正規軍。前端

原由

面試官:請問你瞭解HTTP協議嗎?程序員

前端開發:這不是應該後端清楚的嗎?面試

後端開發:這不是前端知道的嗎? json

面試官:……後端

咱們先一本正經的來了解下HTTP(不包含傳輸層TCP),而後總結其中的精華回覆面試官。瀏覽器

HTTP協議簡介

HTTP(超文本傳輸協議)是應用層上的一種客戶端/服務端模型的通訊協議,它由請求和響應構成,且是無狀態的。(暫不介紹HTTP2)緩存

  • 協議

協議規定了通訊雙方必須遵循的數據傳輸格式,這樣通訊雙方按照約定的格式才能準確的通訊。安全

  • 無狀態

無狀態是指兩次鏈接通訊之間是沒有任何關係的,每次都是一個新的鏈接,服務端不會記錄先後的請求信息。服務器

  • 客戶端/服務端模型

客戶端/服務端模型

五層網絡模型

五層網絡模型

URL構成

用了這麼久,你注意過嗎?

URL構成

協議內容

請求(Request)

客戶端發送一個HTTP請求到服務端的格式:

  • 請求行
  • 請求頭
  • 請求體

請求格式

響應(Response)

服務端響應客戶端格式:

  • 狀態行
  • 響應頭
  • 響應體

響應格式

狀態碼

HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的做用。HTTP狀態碼共分爲5種類型:

分類 分類描述
1** 信息,服務器收到請求,須要請求者繼續執行操做
2** 成功,操做被成功接收並處理
3** 重定向,須要進一步的操做以完成請求
4** 客戶端錯誤,請求包含語法錯誤或沒法完成請求
5** 服務器錯誤,服務器在處理請求的過程當中發生了錯誤

更詳細的狀態碼可查看 HTTP狀態碼

但通常咱們只須要知道幾個常見的就行,好比 200,400,401,403,404,500,502.

請求方法

截止到HTTP1.1共有下面幾種方法:

方法 描述
GET GET請求會顯示請求指定的資源。通常來講GET方法應該只用於數據的讀取,而不該當用於會產生反作用的非冪等的操做中。它指望的應該是並且應該是安全的和冪等的。這裏的安全指的是,請求不會影響到資源的狀態。
POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。
PUT PUT請求會身向指定資源位置上傳其最新內容,PUT方法是冪等的方法。經過該方法客戶端能夠將指定資源的最新數據傳送給服務器取代指定的資源的內容。
PATCH PATCH方法出現的較晚,它在2010年的RFC 5789標準中被定義。PATCH請求與PUT請求相似,一樣用於資源的更新。兩者有如下兩點不一樣:1.PATCH通常用於資源的部分更新,而PUT通常用於資源的總體更新。2.當資源不存在時,PATCH會建立一個新的資源,而PUT只會對已在資源進行更新。
DELETE DELETE請求用於請求服務器刪除所請求URI(統一資源標識符,Uniform Resource Identifier)所標識的資源。DELETE請求後指定資源會被刪除,DELETE方法也是冪等的。
OPTIONS 容許客戶端查看服務器的性能。
CONNECT HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。
HEAD 相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
TRACE 回顯服務器收到的請求,主要用於測試或診斷。

請求和響應常見通用頭

名稱 做用
Content-Type 請求體/響應體的類型,如:text/plain、application/json
Accept 說明接收的類型,能夠多個值,用,(半角逗號)分開
Content-Length 請求體/響應體的長度,單位字節
Content-Encoding 請求體/響應體的編碼格式,如gzip,deflate
Accept-Encoding 告知對方我方接受的Content-Encoding
ETag 給當前資源的標識,和Last-ModifiedIf-None-MatchIf-Modified-Since配合,用於緩存控制
Cache-Control 取值爲通常爲no-cachemax-age=XX,XX爲個整數,表示該資源緩存有效期(秒)

注意

Content-Type,內容類型,通常是指網頁中存在的Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個文件。

常見的媒體格式類型以下:

Content-Type(Mime-Type) 描述
text/html HTML格式
text/plain 純文本格式
text/xml XML格式
image/gif gif圖片格式
image/jpeg jpg圖片格式
image/png png圖片格式

以application開頭的媒體格式類型:

Content-Type(Mime-Type) 描述
application/xml XML數據格式
application/json JSON數據格式
application/pdf pdf格式
application/msword Word文檔格式
application/octet-stream 二進制流數據(如常見的文件下載)
application/x-www-form-urlencoded form表單數據被編碼爲key/value格式發送到服務器(表單默認的提交數據的格式)
multipart/form-data 須要在表單中進行文件上傳時,就須要使用該格式

常見請求頭

名稱 做用
Authorization 用於設置身份認證信息
User-Agent 用戶標識,如:OS和瀏覽器的類型和版本
If-Modified-Since 值爲上一次服務器返回的 Last-Modified 值,用於確認某個資源是否被更改過,沒有更改過(304)就從緩存中讀取
If-None-Match 值爲上一次服務器返回的 ETag 值,通常會和If-Modified-Since一塊兒出現
Cookie 已有的Cookie
Referer 表示請求引用自哪一個地址,好比你從頁面A跳轉到頁面B時,值爲頁面A的地址
Host 請求的主機和端口號

常見響應頭

名稱 做用
Date 服務器的日期
Last-Modified 該資源最後被修改時間
Transfer-Encoding 取值爲通常爲chunked,出如今Content-Length不能肯定的狀況下,表示服務器不知道響應版體的數據大小,通常同時還會出現Content-Encoding響應頭
Set-Cookie 設置Cookie
Location 重定向到另外一個URL,如輸入瀏覽器就輸入baidu.com回車,會自動跳到 https://www.baidu.com ,就是經過這個響應頭控制的
Server 後臺服務器

總結

清楚的知道這些內容,不只僅是爲了應對面試官,而是能實實在在的提升本身的效率,這一點在先後端聯調接口最明顯,當你在應用中去請求其餘接口或轉發請求時這些也是要知道的。否則出現問題的機率會大大提升。

歡迎關注公衆號交流!
更多關注

相關文章
相關標籤/搜索