天天看點

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

之前寫的一篇水文,一次性上傳300張圖檔引發的思考

在12.02上了熱搜。關注者從8個漲到400多個,誠惶誠恐。感謝大家的支援和android小姐姐的漂亮眼影。

上熱搜和漲粉絲不是本意,csdn隻是記錄一下 技術日常(之前自己做過部落格,不過大部分精力都耗費在打扮和維護網站上,是以圖省事直接使用了csdn)。文章裡面偶爾說幾句騷話還可以,但是不會為了上熱搜,取一些嘩衆取寵的标題或打一些擦邊球。廢話止于此,正片開始。

1. 浏覽器并發限制

1.1 浏覽器

在之前說到過,http1.1 的情況下,浏覽器會有預設的并發限制。預設6個一組

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

圖檔連結

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

1.1.1 stalled是什麼呢

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

1.1.2 為什麼浏覽器會有這個限制

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

這裡說的Facade模式,在對中間層的一些淺略的思考 這篇文章中有一些提及

1.2 題外話-爬蟲

浏覽器會限制連接配接數。但是爬蟲腳本不會 。即使是http1.1的網址,爬蟲請求也可以達到每秒請求任意次。

是以寫爬蟲code的時候需要注意,每秒循環次數不要過多。為了别人,也為了自己。

2. http1.1

2.1 檢視http1.1

如果檢視網站是使用的http1.1還是http2。 其實很簡單,隻需要在f12的network中打開相關配置就可以

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

可以看到,http2是這樣的:

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

http1.1是這樣的:

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

2.2 http1.1和https

如果http1.1 有浏覽器并發限制,那https也沒有呢?

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

3. http2

3.1 http2和浏覽器并發限制

那麼http2 為什麼沒有并發限制呢圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

3.2 什麼是多路複用

上面說到http2 隻是以沒有浏覽器并發限制,是因為它可以tcp多路複用。那麼如果知道它是多路複用呢?

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

可以看到如果tcp是複用的,那麼connectID就是相同的。來實際看一下:

① http1.1 的connectID是各不相同的

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

② http2 的connectID 在一段時間内是都相同的

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

3.3 開啟http2

如何從http1.1 轉為http2 。可以看 怎樣把網站更新到http/2.。這篇文章說的很好,但是可能說的比較複雜,又是nginx版本又是openssl版本的。推薦一個小竅門:直接修改nginx配置,重新開機nginx試試看。

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

如果,足夠幸運。可以看到和我這個一樣。隻是變成了http2. 之前的6個并發也消失了

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

3.4 http1.1小趣文

雖然大部分主流網站,都是http2 了。但是百度确是http1.1

為什麼百度還在使用http1.1協定而沒有使用http2?

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4. ServiceWorker

4.1 network 小齒輪的疑問

在之前的項目上面偶然看見,一次請求發送了2次。而且一個帶齒輪,一個不帶。但是通過檢視日志,的确是發送了一次請求。這是為什麼呢?

通過搜尋資料,發現有人說這個是servicewroker

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

通過檢視,的确有一個寫了**from ServiceWorker**。有一個沒寫

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.2 ServiceWorker介紹

關于ServiceWorker的初步介紹,可以略看 Service Worker: 簡介 和 Service Worker ——這應該是一個挺全面的整理

在這裡插入圖檔描述

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.3 ServiceWorker和http1.1

service worker不一定是http2, 1 也可以

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.4 ServiceWorker和https

Service workers隻能由HTTPS承載

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.6 為什麼會是2次請求

之前已經說過,開啟ServiceWorker。會通過network看見2次請求,一次帶小齒輪,一次不帶。

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.5 ServiceWorker和angular

圖檔來源

4.5.1 必須通過https通路

必須通過https通路ServiceWorker,上面有提及

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.5.2 部分浏覽器不支援

部分浏覽器不支援ServiceWorker

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.5.3 如何配置

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.5.4 實際工作

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.5.5 正在緩存什麼

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker
http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

4.5.6 如何關閉

如果不想使用 ServiceWorker,如何關閉呢

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

可以看到,已經沒有小齒輪了

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

一般項目預設是打開的。打開以後比關閉的快一些,以之前一次性上傳300張圖檔引發的思考 為例:

關閉以後,1個25kb,300個大約 7500 kb = 7.32M; 需要大概10s。

打開以後,同樣300張圖檔,需要大概 8.73s

4.7 ServiceWorker和http2的疑惑

細心的可能注意到,。service worker 将2次請求,http2 降為了1,connnection id 變成了0

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker

這是為什麼呢?我們明明開啟了http2。為什麼會自動降為http1.1,就算是變成了http1.1, connectID 又為什麼是0呢?

圖檔來源

http1.1 和http2 和 ServiceWorker1. 浏覽器并發限制2. http1.13. http24. ServiceWorker