HTTP知識點小結

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

  • 特點
    1.支持客戶/服務器模式
    2.簡單快速
    3.靈活:HTTP允許傳輸任意類型的數據對象
    4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
    5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
  • 內容
    請求報文如圖,由四個部分組成
    請求行(request line)、請求頭部(header)、空行和請求數據
    圖片.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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容