成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從 Nginx 默認不壓縮 HTTP/1.0 說起

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
在相同的服務(wù)端配置下,移動運營商過來的流量中有 30% 走了 HTTP/1.0,而作者所使用的 HTTP Server,不對 HTTP/1.0 響應(yīng)啟用 GZip。

在移動的 http 請求量和聯(lián)通不相上下的前提下,移動的 http response 帶來的網(wǎng)絡(luò)流量是聯(lián)通的 2.5 倍。移動大概有 3 成的請求都沒有做壓縮,而聯(lián)通幾乎都是經(jīng)過壓縮的。那些沒有經(jīng)過壓縮的 http 會話都是走了 1.0 的協(xié)議,相反經(jīng)過壓縮的 http 會話都是走了 http1.1 協(xié)議。

也就是說在相同的服務(wù)端配置下,移動運營商過來的流量中有 30% 走了 HTTP/1.0,而作者所使用的 HTTP Server,不對 HTTP/1.0 響應(yīng)啟用 GZip。

為什么在移動運營商網(wǎng)絡(luò)下會有這么高比例的 HTTP/1.0 請求,本文按下不表,總之這一定是移動的原因。直接看另外一個問題,也就是本文標(biāo)題所寫:Nginx 為什么默認不壓縮 HTTP/1.0?

那篇文章的作者并沒有說明他用什么 HTTP Server,我這里直接當(dāng)成 Nginx 好了。后面會發(fā)現(xiàn)這個問題跟 HTTP 協(xié)議有關(guān),所有 HTTP Server 都會面臨。

在 Nginx 的官網(wǎng)文檔中,有這樣一個指令:

  1. Syntax: gzip_http_version 1.0 | 1.1; 
  2.  
  3. Default: gzip_http_version 1.1; 
  4.  
  5. Context: http, server, location 
  6.  
  7. Sets the minimum HTTP version of a request required to compress a response. 

很明顯,這個指令是用來設(shè)置 Nginx 啟用 GZip 所需的 HTTP 最低版本,默認是 HTTP/1.1。也就是說 Nginx 默認不壓縮 HTTP/1.0 是因為這個指令,將它的值改為 1.0 就能解決問題。

對于文本文件,GZip 的效果非常明顯,開啟后傳輸所需流量大約會降至 1/4 ~ 1/3。這么好的事情,Nginx 改一下配置就可以支持,為什么它默認不開啟?

Nginx 對于滿足條件(請求頭中有 Accept-Encoding: gzip,響應(yīng)內(nèi)容的 Content-Type 存在于 gzip_types 列表)的請求會采用即時壓縮(On-The-Fly Compression),整個壓縮過程在內(nèi)存中完成,是流式的。也就是說,Nginx 不會等文件 GZip 完成再返回響應(yīng),而是邊壓縮邊響應(yīng),這樣可以顯著提高 TTFB(Time To First Byte,首字節(jié)時間,WEB 性能優(yōu)化重要指標(biāo))。這樣唯一的問題是,Nginx 開始返回響應(yīng)時,它無法知道將要傳輸?shù)奈募罱K有多大,也就是無法給出 Content-Length 這個響應(yīng)頭部。

我們還知道,HTTP/1.1 默認支持 TCP 持久連接(Persistent Connection),HTTP/1.0 也可以通過顯式指定 Connection: keep-alive 來啟用持久連接。HTTP 運行在 TCP 連接之上,自然也有著跟 TCP 一樣的三次握手、慢啟動等特性,為了盡可能的提高 HTTP 性能,使用持久連接就顯得尤為重要了。

明白以上兩點,問題就水落石出了。對于 TCP 持久連接上的 HTTP 報文,客戶端需要一種機制來準確判斷結(jié)束位置,而在 HTTP/1.0 中,這種機制只有 Content-Length。于是,前面這種情況只能要么不壓縮,要么不啟用持久連接(對于非持久連接,TCP 斷開就可以認為 HTTP 報文結(jié)束),而 Nginx 默認選擇的是前者。

那么在 HTTP/1.1 中,這個問題解決了嗎?當(dāng)然!我在之前的文章中講過,HTTP/1.1 新增的 Transfer-Encoding: chunked 所對應(yīng)的分塊傳輸機制可以完美解決這類問題。

理論知識先寫到這里,最后用實踐來驗證一下:

首先,不啟用 Nginx 的 HTTP/1.0 GZip 功能,使用 HTTP/1.0 請求報文測試:

 從 Nginx 默認不壓縮 HTTP/1.0 說起

可以看到,盡管我的請求報文中指明了可以接受 GZip,但是返回的內(nèi)容依然是未壓縮的;同時服務(wù)端響應(yīng)了 Content-Length 和 Connection: keep-alive,連接并沒有斷開。也就是說 Nginx 為了盡可能啟用持久連接,放棄了 GZip,這是 Nginx 的默認策略。

然后,啟用 Nginx 的 HTTP/1.0 GZip 功能,使用 HTTP/1.0 請求報文測試:

 從 Nginx 默認不壓縮 HTTP/1.0 說起

可以看到,這次的請求報文與上次完全一樣,但是結(jié)果截然不同:雖然返回的內(nèi)容被壓縮了,但是連接也被斷開了,服務(wù)端返回了 Connection: close。原因就是之前說過的,動態(tài)壓縮導(dǎo)致無法事先得知響應(yīng)內(nèi)容長度,在 HTTP/1.0 中只能依靠斷開連接來讓客戶端知道響應(yīng)結(jié)束了。

最后,使用 HTTP/1.1 請求報文測試:

 從 Nginx 默認不壓縮 HTTP/1.0 說起

可以看到,由于請求報文是 HTTP/1.1 的,Nginx 能知道這個客戶端可以支持 HTTP/1.1 的 Transfer-Encoding: chunked,于是通過分塊傳輸解決了所有問題:既啟用了壓縮,也啟用了持久連接。

那么,對于 HTTP/1.0 請求,我們是讓 Nginx 放棄持久連接好,還是放棄 GZip 好呢?

實際上,由于 HTML 文檔一般都是使用 PHP、Node.js 等動態(tài)語言輸出,即使不壓縮,Nginx 也無法事先得知它的 Content-Length,在 HTTP/1.0 中橫豎都無法啟用持久連接,這時還不如啟用 GZip 省點流量。

對于 JS、CSS 等事先可以知道大小的靜態(tài)文本文件,我的建議是,移動端首次訪問把重要的 JS、CSS 都內(nèi)聯(lián)在 HTML 中,然后存在 localStorage 里,后續(xù)不輸出;不重要的 JS、CSS 外鏈并啟用 GZip,犧牲 keep-alive 來達到減少流量的目的。

責(zé)任編輯:何妍 來源: Jerry Qu的小站
相關(guān)推薦

2016-03-22 09:38:36

HTTP網(wǎng)絡(luò)協(xié)議

2022-09-19 09:03:08

命令壓縮優(yōu)化

2010-09-16 10:46:47

2024-06-28 09:25:51

2012-03-19 21:06:52

Android

2010-05-24 17:23:41

Linux SNMP

2010-05-05 09:52:06

Unix BSD

2010-11-24 11:15:40

Qualcomm實施云計算

2023-10-20 08:14:21

2009-07-27 14:28:46

2012-06-26 12:14:05

容錯服務(wù)器stratus

2018-02-27 12:41:21

Serverless邊緣計算存儲

2013-08-29 10:35:58

亞馬遜AWS公共云

2023-01-11 21:22:32

Java服務(wù)器

2017-09-22 14:20:50

人工智能

2017-11-20 11:53:38

CDN406錯誤故障

2014-11-13 10:57:03

http協(xié)議

2022-06-21 10:10:14

HTTP協(xié)議TCP

2011-12-15 22:13:30

手機平板電腦移動互聯(lián)

2025-06-20 10:18:58

大模型
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久这里只有精品首页 | 久久中文字幕一区 | 午夜精品久久久久99蜜 | 精品欧美一区二区三区免费观看 | 久久久久久久久国产成人免费 | 91大神在线看 | 999精品网 | 一区亚洲 | 中文字幕伊人 | 国产欧美精品 | 男人的天堂中文字幕 | 日韩日韩日韩日韩日韩日韩日韩 | 狠狠的干 | 国产精品99久久久久久大便 | 久久久成人精品 | 看亚洲a级一级毛片 | 国产成人福利视频 | 一区二区三区在线播放 | 91视频一区 | 黄色大片在线播放 | 欧美日韩在线观看一区 | 免费一看一级毛片 | 黄色毛片黄色毛片 | 一区二区成人 | 欧美一区2区三区3区公司 | 色999视频 | 黄色片a级 | 18成人在线观看 | 中文字幕久久精品 | 久久与欧美| 日本不卡一区二区 | 免费的色网站 | 久久福利网站 | 欧美午夜精品 | 国产99久久 | 亚洲视频欧美视频 | 中文字幕高清视频 | 一级毛片色一级 | 亚洲国产成人精品女人 | 久久精品欧美一区二区三区不卡 | 91精品国产高清久久久久久久久 |