HTTP知識點小結

weixin_33797791發表於2017-12-14

HTTP協議是建立在TCP之上的簡單的請求-響應協議。

  • 特點
    1.支援客戶/伺服器模式
    2.簡單快速
    3.靈活:HTTP允許傳輸任意型別的資料物件
    4.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
    5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
  • 內容
    請求報文如圖,由四個部分組成
    請求行(request line)、請求頭部(header)、空行和請求資料
    6919164-0733e3a9d7550505.png
    圖片.png

    伺服器回應如圖
    狀態行、訊息報頭、空行和響應正文
    6919164-e665bae76739323e.png
    圖片.png
  • 請求方法
    有8種,常用GET和POST,兩者區別是GET有資料長度的限制,所以GET常用來傳送查詢請求,而POST則用來傳輸資料
  • HTTP步驟
    1、客戶端連線到Web伺服器
    一個HTTP客戶端,通常是瀏覽器,與Web伺服器的HTTP埠(預設為80)建立一個TCP套接字連線。
    2、傳送HTTP請求
    通過TCP套接字,客戶端向Web伺服器傳送一個文字的請求報文,一個請求報文由請求行、請求頭部、空行和請求資料4部分組成。
    3、伺服器接受請求並返回HTTP響應
    Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應資料4部分組成。
    4、釋放連線TCP連線
    若connection 模式為close,則伺服器主動關閉TCP連線,客戶端被動關閉連線,釋放TCP連線;若connection 模式為keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求;
    5、客戶端瀏覽器解析HTML內容

例如:在瀏覽器位址列鍵入URL,按下回車之後會經歷以下流程:
1、瀏覽器向 DNS 伺服器請求解析該 URL 中的域名所對應的 IP 地址;
2、解析出 IP 地址後,根據該 IP 地址和預設埠 80,和伺服器建立TCP連線;
3、瀏覽器發出讀取檔案(URL 中域名後面部分對應的檔案)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的資料傳送給伺服器;
4、伺服器對瀏覽器請求作出響應,並把對應的 html 文字傳送給瀏覽器;
5、釋放 TCP連線;
6、瀏覽器將該 html 文字並顯示內容

  • HTTP狀態碼
    100 continue
    101 switching protocol

200 ok
201 created
202 accepted
203 Non-Authoritative Information
204 no content
205 reset content
206 partical content


300 multiple choices
301 moved permanently永久移動
302 found暫時移動
303 see other
304 not modified
305 use proxy
306 unused
307 temporary redirect GET重定向


400 bad request 客戶端請求語法錯誤
401 unauthorized 需要身份驗證
402 payment require(預留以後用,現在沒鳥用)
403 forbidden 伺服器拒絕請求
404 not found 找不到資源
405 method not allowed
406 not acceptable
後面還有很多,但記住常見的就差不多了


500 interval server error伺服器內部錯誤
501 not implement伺服器不支援請求的功能
502 bad gateway代理伺服器接收到無效請求
503 service unavailable伺服器暫時無法處理請求
504 gateway timeout代理伺服器未及時獲取請求
505 http version not supported


  • 長連線和短連線
    短連線:在三次握手之後建立連線,每次傳送資料包並得到伺服器返回的結果之後,通過客戶端和服務端的四次握手進行關閉斷開。如果需要傳送新的資料,需要建立新連線。
    長連線:執行三次握手鍊接後,不斷開連結,保持客戶端和服務端通訊,直到伺服器超時自動斷開連結,或者客戶端主動斷開連結。
    使用長連線後,可以應用pipelined request(不知道怎麼翻譯),就是在上一個請求的應答完成之前就發起新的請求。
    HTTP1.1預設使用長連線
    HTTP請求和響應頭都有Connection: Keep-alive,可能後面還會跟著Keep-Alive:timeout=20還可能有max=XXX