1樓:Saviio
之前答題時漏看了"同時「,所以做下補充。
HTTP1.1裡大概規範了幾項提高效能的手段:
持久連線 (keep-alive/persistent connection)
並行連線
Pipelining
第一點之前已經說過了,所以不表。
第二點,由於現代網頁通常包含了複數個(>=10)資源,而按照預設設定,乙個連線中的每乙個請求必須等待收到響應後才能傳送下乙個請求,所以如果複數的資源請求全部在乙個連線one by one傳送給伺服器顯然會很慢,而為了彌補這一缺陷,瀏覽器通常會預設開啟多個TCP連線,然後再根據每個連線的狀態在其中依次傳送資料請求,而且客戶端有權任意關閉超發的連線。各個瀏覽器允許的並行連線數大致是這樣的(From SO):
Firefox2:
2Firefox3+:
6Opera
9.26:4
Opera12:
6Safari3:
4Safari5:
6IE7:
2IE8:
6IE10:
8Chrome:6
由於TCP協議本身有慢啟動的特徵,會隨著時間調諧連線的最大速度,因此在現代瀏覽器中持久連線和並行連線通常是搭配在一起使用的—— 一方面由於持久連線的存在,每個TCP連線已經處於調諧後的狀態,另一方面持久連線可以避免重新三次握手的開銷。
關於第三點,
按照HTTP1.1的描述,還有種可以提公升效能的方案是管道化,可以在乙個連線中傳送多個請求不必等待前乙個請求返回。但這項技術比較容易踩坑,所以主流面向使用者的瀏覽器,這項技術是被預設關閉。
管道化的具體情形如下圖:
關於HTTP2:
HTTP2為了效能做了不少努力,比如提供了規範以支援連線的多路復用。
HTTP1.0需要加上keep-alive的請求首部,否則預設乙個請求乙個連線。
HTTP1.1之後keep-alive(持久連線)被預設啟用,除非在響應中指定connection:close,否則webserver會假定所有連線都是持久的。
使用同乙個核心得瀏覽器就不用考慮兩者得相容性了嗎?
雪見仙尊 需要考慮,但實際上遇到問題的可能性很小。這是因為核心版本的問題。比如說中國產的套殼瀏覽器 360瀏覽器,QQ瀏覽器,搜狗瀏覽器,極速瀏覽器 獵豹瀏覽器 它們的核心雖然也是 chromium,但可能落後 Chrome 穩定版數個版本,一些新特性的支援沒有及時跟進。不過既然是 新特性 那麼一般...
java如何實現同乙個瀏覽器同的乙個系統只能登入乙個賬號,如果登入了第二個,第乙個賬號自動登出?
zhangs1314 樓主的意思可能是在同乙個瀏覽器裡面的不同的標籤頁,訪問了同乙個專案,後面登入進去的賬號,把前面登入進去的賬號踢掉.以前俺的做法,一般是用ws協議做長連線.每乙個長連線的唯一標記是乙個sessionId.登入的時候,先判斷是否有sessionId被儲存過.如果有,伺服器向這個se...
如何讓同乙個網域名稱解析兩台伺服器?
柴健翌 這是可以做到的,但沒有卵用。加DNS記錄的時候可以加多條A或者CNAME記錄,解析的時候也會返回多條。但大多數客戶端只認先來的一條。這也是我們骨幹網上出現的特製DNS汙染的實現原理。正確的資料報會返回,不會被丟棄,但汙染包距離近永遠比正確的要來的快。這種場景下更常見的處理方案是設定乙個geo...