http協議的部分知識總結

HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)

HTTP的發展史

1989年World Wide Web誕生之後,HTTP和HTML迅速成爲主導世界的應用層協議。

  • HTTP / 0.9
    1991年發佈http的0.9版。端口默認使用:80
    設計的目的 這個協議被設計用於從服務器獲取HTML文檔
telnet example.com 80
GET /
<html>...
?

整個協議的請求只有一行:'GET’加上文檔路徑。(GET是HTTP至今都保留的"method"),是HTTP的動詞。1991年的http只支持GET這唯一的動詞。跟在GET之後的是路徑,是文檔在服務器的位置(邏輯位置),即實際要獲取的內容。

  • HTTP / 1.0
    1996年5月,HTTP/1.0版本發佈,內容大大增加。HTTP/1.0是一個更加完整,更加接近我們目前對HTTP認知的版本。
    HTTP響應狀態碼:在響應的第一行,首先返回狀態碼和說明文本。相當於在HTTP 0.9基礎上增加了返回類型的支持。
    HTTP HEAD:除了首行的動詞和路徑之外,請求和響應都支持一系列的【頭】,這些頭以鍵值對的形式出現,爲當時和後來的HTTP的各種周邊設置提供了載體。
    HTTP方法:引入了HEAD和POST方法。
請求格式
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

返回格式
HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>

Content-Type 字段

出現的Content-type字段具體有以下一些:
text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
  • HTTP / 1.1
    1997年,出現了現在最常見的HTTP / 1.1。從那以後,這個協議一直服務至今。在出生之後的一些年,這個協議不斷地更新和細化,直到2014年形成6個比較牛逼的RFC。它們分別是:
    • RFC 7230 Message Syntax and Routing 協議框架和鏈接管理
    • RFC 7231 Senabtics and Content 動詞、狀態碼和頭定義
    • RFC 7233 Conditional Requests 條件請求
    • RFC 7234 Range Request 斷點續傳相關
    • RFC 7234 Caching 緩存相關
    • RFC 7235 Authentication 認證相關
      1.1版本的最大變化是引入持久化連接,即TCP連接默認不關閉,可以被多個請求複用,不用聲明Connection: keep-alive
      客戶端和服務器發現對對方一段事件沒有活動,就可以主動關閉連接。不過,規範的做法是,客戶端是最後一個請求是發送Connection: close
  • HTTP / 2
    2015年5月發表以RFC 7540正式發表。多數主流瀏覽器於2015年底支持了該協議。2019年6月,全球有36.5%的網站支持了HTTP/2。
減少網絡延遲,提交瀏覽器的頁面加載速度:
- 對HTTP頭字段進行數據壓縮(即HPACK算法)
- HTTP/2服務端推送(Server Push)
- 請求管道化
- 修復HTTP/1.0版本以來未修復的對頭阻塞問題
- 對數據傳輸採用多路複用,讓多個請求合併在同一TCP連接內
- 等等

TCP/IP協議三次握手

TCP/IP協議三次握手
爲了準確無誤地將數據送達某處,TCP協議採用了三次握手策略。用TCP協議把數據包發送出去之後
TCP不會對傳送後的情況置之不理,
它一定會向對方確認是否成功送達。握手過程中使用了TCP的flag---SYN和ACK。
1、第一步,client會發送一個帶SYN標誌的數據包給server;
2、第二步,server接收到從client的數據包之後會回傳一個帶有SYN和ACK的數據包給client;
3、第三步,client再回傳一個帶ACK標誌的數據包給server,代表握手結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章