日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

談一談HTTP和WebSocket的區別

 

一、HTTP

HTTP協議是互聯網上應用最為廣泛的應用層協議,萬維網都要遵守HTTP協議。

HTTP/1.0

HTTP/1.0版本實現了HTTP協議的基本功能,但是1.0版本性能問題比較明顯,因為HTTP協議是基于TCP協議的,所以HTTP的性能問題大多數都來自于TCP協議,在每次使用HTTP協議傳輸數據之前都要先建立TCP連接,建立TCP連接要進行三次握手,并且TCP的慢啟動機制使新建立的TCP連接的傳輸速率比較慢,當HTTP請求量增大時,HTTP協議的性能問題就出現了。

HTTP/1.1

  1. HTTP/1.1版本默認開啟了長連接,客戶端可以復用之前的TCP連接請求服務器,減少了建立TCP連接和TCP慢啟動的時間。在HTTP請求比較多,網絡情況不好時,長連接可能會發生隊頭阻塞,所以在長連接的基礎上,HTTP/1.1還支持管道化模式,解決了請求隊頭阻塞的情況,但是在接受響應時還是可能造成隊頭阻塞。
  2. HTTP/1.1頭部信息增加HOST字段,一臺物理服務器上可以存在多個虛擬主機,并且它們共享一個IP地址,HTTP/1.1的請求頭和響應頭都應該添加HOST字段。
  3. HTTP/1.1添加和100響應碼,HTTP協議請求會先發送頭部信息,如果服務器返回100響應碼,再將請求體發送到服務器,如果返回401響應碼,放棄發送響應體,節約帶寬。
  4. HTTP/1.1引入了Chunked transfer-coding機制,發送方將消息分割成若干個任意大小的數據塊,每個數據塊在發送時都會附上塊的長度,最后用一個零長度的塊作為消息結束的標志。這種方法允許發送方只緩沖消息的一個片段,避免緩沖整個消息帶來的過載,利用Chunked transfer-coding機制可以實現斷點續傳。
  5. HTTP/1.1更新了緩存的處理機制,添加了AGE頭部表示緩存的有效期。

HTTPS

HTTPS協議是HTTP協議的安全版本,在HTTP協議和TCP協議之前添加了SSL/TSL協議,在TCP握手之后進行SSL/TSL握手。

談一談HTTP和WebSocket的區別

 

HTTP/2: HTTP/2是基于HTTPS的,HTTP/2相對于HTTP/1.x更專注于性能,相對于HTTP/1.x做了許多性能上的優化:二進制傳輸,多路復用,Heard壓縮,服務器推送,安全

 

1. 二進制傳輸

明文傳輸不安全。HTTP/1使用明文傳輸,不安全。那么HTTP/2就用二進制分幀層來解決這個問題,幀是數據傳輸的最小單位,以二進制傳輸代替原本的明文傳輸,原本的報文消息被劃分為更小的數據幀。

2. 多路復用

HTTP/2采用了多路復用技術,在一個 TCP 連接上,我們可以向對方不斷發送幀,每幀的stream_id標明這一幀屬于哪個流,然后在對方接收時,根據 stream_id拼接每個流的所有幀組成一整塊數據。把 HTTP/1.1 每個請求都當作一個流,那么多個請求變成多個流,請求響應數據分成多個幀,不同流中的幀交錯地發送給對方,這就是 HTTP/2 中的多路復用。同時呢,我們知道HTTP/1的body長度是在header帶過來的,那么如果是以HTTP/2 的形式去傳輸肯定會出問題,所以HTTP/2 將body加上了length字段,每一個流都有自己的長度,最后根據流的頭部長度是否等于各個流的長度來確定是否合包。同時呢,這樣分包合包也解決了線頭阻塞的問題。TCP會保證包的有序性且保證了包不會丟失。

3. Heard壓縮

Header 內容多,而且每次請求 Header 不會變化太多,沒有相應的壓縮傳輸優化方案。HTTP/2在此用hpack算法來壓縮首部長度,其原理就是維護一個靜態索引表和動態索引表的索引空間,hpack其原理就是匹配當前連接存在的索引空間,若某個鍵值已存在,則用相應的索引代替首部條目,比如 “:method: GET” 可以匹配到靜態索引中的 index 2,傳輸時只需要傳輸一個包含 2 的字節即可;若索引空間中不存在,則用字符編碼傳輸,字符編碼可以選擇哈夫曼編碼,然后分情況判斷是否需要存入動態索引表中,以這種形式節省了很多的空間。

4. 服務器推送

為了盡可能減少請求數,需要做合并文件、雪碧圖、資源內聯等優化工作,但是這無疑造成了單個請求內容變大延遲變高的問題,且內嵌的資源不能有效地使用緩存機制。對于這種情況,HTTP/2推出了服務端推送,瀏覽器發送一個請求,服務器主動向瀏覽器推送與這個請求相關的資源,這樣瀏覽器就不用發起后續請求,其主要是針對資源內聯做出的優化。 ##QUIC新功能(HTTP/3): ###1. 0-RTT建連: 通過使用類似 TCP 快速打開的技術,緩存當前會話的上下文,在下次恢復會話的時候,只需要將之前的緩存傳遞給服務端驗證通過就可以進行傳輸了。 ###2. 多路復用: 雖然 HTTP/2 支持了多路復用,但是 TCP 協議終究是沒有這個功能的。QUIC 原生就實現了這個功能,并且傳輸的單個數據流可以保證有序交付且不會影響其他的數據流,這樣的技術就解決了之前 TCP 存在的問題 ###3. 加密認證的報文: 報文頭部都是經過認證的,報文 Body 都是經過加密的 ###4. 向前糾錯機制: 每個數據包除了它本身的內容之外,還包括了部分其他數據包的數據,因此少量的丟包可以通過其他包的冗余數據直接組裝而無需重傳,這種技術只能使用在丟失一個包的情況下,如果出現丟失多個包就不能使用糾錯機制了,只能使用重傳的方式了。

 

HTTP緩存機制

1.強緩存

緩存規則信息包含在header中,而強緩存的規則通常由Expires和Cache-Control這兩個字段標明

Expire

Expires表示到期時間,一般在Response的header中標識,當第二次請求時間超過此時間,則判定為緩存過期,需重新向服務器請求數據,否則直接返回緩存數據。這個字段存在的問題是這個時間是由服務器返回的時間,如果客戶端和服務端時間存在誤差,則會造成緩存機制的誤差。

Expires: Thu, 13 Sep 2018 02:08:54 GMT

Cache-Control Cache-Control標明緩存的持續時間,是一個相對值,比如max-age= 604800,表示緩存有效期可以持續604800秒即一周,在一周內再次請求這條數據,直接返回緩存數據。Cache-Control常用取值有private、public、no-cache、max-age,no-store

  • max-age:即上面提到的表明緩存的持續時間;
  • private:表示客戶端可以緩存數據,默認為private;
  • public:表示所有內容都將被緩存,客戶端和代理服務器都可緩存;
  • no-cache:字段表示客戶端需驗證服務器響應是否有更改(即下面說到的對比緩存);
  • no-store:不允許緩存
Cache-Control: private, max-age=0, no-cache

2.協商緩存

與強制緩存不同的是,協商緩存每次進行再請求時,需要先向服務器查詢該緩存是否可用,如果緩存可用,則返回304狀態碼,通知客戶端可以使用緩存,否則響應整片資源內容。協商緩存有這幾個字段來標識緩存規則:Last-Modified / If-Modified-Since 、Etag / If-None-Match

Last-Modified / If-Modified-Since

服務器在響應客戶端請求時,頭部通過Last-Modified 告訴客戶端資源的最后修改時間,客戶端再次請求時,頭部字段攜帶If-Modified-Since告訴服務器,上次返回的資源最后修改時間,讓服務器進行對比,若當前資源最后修改時間大于If-Modified-Since,則說明資源被改動了,響應整片資源,返回200狀態碼,否則返回304狀態碼,通知客戶端可以使用緩存。

Etag / If-None-Match

etag是服務器對資源的一種摘要,客戶端請求時,返回響應中該字段告訴客戶端緩存數據的標識。客戶端再次請求通過If-None-Match與服務器匹配,匹配成功說明緩存可用,返回304,若服務端對數據發生更改,則匹配不成功,重新響應資源和緩存規則信息(優先級大于Last-Modified / If-Modified-Since)。 ###3.緩存機制總結

談一談HTTP和WebSocket的區別

 

WebSocket

WebSocket本質上一種計算機網絡應用層的協議

WebSocket和HTTP相同點

  1. 都是基于TCP的應用層協議。
  2. 都使用Request/Response模型進行連接的建立。
  3. 在連接的建立過程中對錯誤的處理方式相同,在這個階段WebSocket可能返回和HTTP相同的返回碼。
  4. 都可以在網絡中傳輸數據。

WebSocket和HTTP不同點

  1. WebSocket使用HTTP來建立連接,但是定義了一系列新的header域,這些域在HTTP中并不會使用。
  2. WebSocket的連接不能通過中間人來轉發,它必須是一個直接連接。
  3. WebSocket連接建立之后,通信雙方都可以在任何時刻向另一方發送數據。
  4. WebSocket連接建立之后,數據的傳輸使用幀來傳遞,不再需要Request消息。
  5. WebSocket的數據幀有序。 ##使用WebSocket,而不是用Socket的原因: 因為整個瀏覽器都不支持直接調用系統底層的 Socket,基于瀏覽器的 Web 自然無法調用,只能使用封裝的高級協議方案 —— WebSocket

最后

如果你看到了這里,覺得文章寫得不錯就給個贊唄!歡迎大家評論討論!如果你覺得那里值得改進的,請給我留言。一定會認真查詢,修正不足,定期免費分享技術干貨。喜歡的小伙伴可以關注一下哦。謝謝!

分享到:
標簽:WebSocket
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定