譯文:HTTP概述

本文為譯文抡驼,原文為High Performance Web Sites? 章節(jié)B

原書下載地址:http://pan.baidu.com/s/1pJocRwB


? ? 在我們進(jìn)行深入分析如何優(yōu)化網(wǎng)頁性能之前,首先要了解超文本傳輸協(xié)議(Hypertext transfer protocol, HTTP)中對性能產(chǎn)生影響的部分湃密。HTTP是連接瀏覽器與WEB服務(wù)器之間交互的橋梁,它是由萬維網(wǎng)聯(lián)盟(World Wide Web Consortium, W3C)和互聯(lián)網(wǎng)工程任務(wù)組(Internet Engineering Task Force ,IETF)聯(lián)合規(guī)范制定打瘪,相關(guān)文件RFC 2616钻洒。HTTP/1.1 是目前最常用的版本,但是依舊還有瀏覽器與服務(wù)器繼續(xù)在使用HTTP/1.0 逸尖。

? ? ? ?HTTP是一個由請求與響應(yīng)組成的客戶端與服務(wù)端交互協(xié)議古沥。瀏覽器發(fā)送一個HTTP請求到指定的URL地址,持有此URL地址的WEB服務(wù)器將反饋回一個HTTP請求娇跟。像許多互聯(lián)網(wǎng)服務(wù)里一樣岩齿,這項協(xié)議采用簡單的明文格式。請求的類型有GET苞俘、POST盹沈、HEAD、PUT吃谣、DELETE乞封、OPTIONS 和 TRACE等。我們把注意力還是放在最重要最常見的GET請求上岗憋。

? ? ? ?一個GET請求包含了URL地址肃晚,同時在URL地址后帶上了報頭內(nèi)容。而HTTP響應(yīng)包含了狀態(tài)碼仔戈、報頭和內(nèi)容體关串。下面的這個例子顯示了當(dāng)請求腳本yahoo_2.0.0-b2.js時可能產(chǎn)生的HTTP報頭內(nèi)容。

請求腳本yahoo_2.0.0-b2.js

Compression

壓縮

? ? ? ?HTTP響應(yīng)可以使用壓縮來減小傳輸體積监徘,當(dāng)然這要求瀏覽器和WEB服務(wù)器均支持此項功能晋修。瀏覽器要支持壓縮,需要在請求報頭中加入Accept-Encoding耐量,服務(wù)器端要支持需要在返回報頭中加入Content-Encoding飞蚓。

采用壓縮請求腳本yahoo_2.0.0-b2.js

? ? ? ?請注意返回的內(nèi)容體是如何被壓縮的。章節(jié)4將解釋如何打開壓縮的方法廊蜒,并且還會提醒說明由于代理緩存的原因趴拧,如何導(dǎo)致邊界情況的發(fā)生溅漾。同時,還是討論關(guān)于Vary和Cache-Control 報頭參數(shù)著榴。


Conditional GET Request

條件GET請求

? ? ? 如果瀏覽器緩存中已經(jīng)持有一個HTML內(nèi)容元素的副本添履,但卻并不能保證這個緩存的內(nèi)容是不是依舊有效的,這個時候脑又,一個條件GET請求就出現(xiàn)了暮胧。如果緩存的內(nèi)容依舊有效,瀏覽器將會使用緩存來響應(yīng)问麸,這樣響應(yīng)得速度更快往衷,用戶的體驗性也更好。

? ? ? 通常情況下严卖,一個緩存的內(nèi)容是否有效主要取決于它最近一次的被修改時間席舍,而瀏覽器是根據(jù)返回報頭中的Last-Modified屬性來獲取到這個時間。瀏覽器會在請求報頭中加入If-Modified-Since 屬性到服務(wù)器端哮笆。這就好像瀏覽器再說:“這個內(nèi)容元素我已經(jīng)有了一個副本来颤,最近修改時間是這樣的,我就可以直接用它嗎稠肘?”

帶條件的GET請求

? ? ? 如果這個內(nèi)容元素從那個指定時間點開始到現(xiàn)在還沒有發(fā)生修改福铅,服務(wù)器將返回一個“304 Not Modified” 狀態(tài)碼,然后跳過響應(yīng)的內(nèi)容體项阴,這樣也使得返回更加簡短而快速滑黔。在協(xié)議HTTP/1.1 中,ETag 和 If-None-Match 報頭屬性是另外一種執(zhí)行條件GET請求的方式鲁冯,我們將在章節(jié)13中進(jìn)行討論拷沸。


Expires

有效時間

? ? ? 條件GET請求和304響應(yīng)的確能夠加快頁面的加載速度色查,但是他們依舊需要能夠在客戶端與服務(wù)器端之間進(jìn)行來回驗證薯演。報頭中的Expires參數(shù)可以很好免除這種檢查的煩惱:它能夠明確指出了瀏覽器是否能夠還能夠繼續(xù)使用一個內(nèi)容元素的緩存。

帶有效時間

? ? ? 當(dāng)瀏覽器獲取到響應(yīng)報文中的Expires參數(shù)時秧了,它便將此內(nèi)容元素以及其有效時間一起存入到緩存中跨扮。只要這個元素還沒有到期,瀏覽器將會使用緩存的元素版本验毡,以盡可能避免產(chǎn)生HTTP請求衡创。章節(jié)3將會進(jìn)一步詳細(xì)討論Expires與Cache-Control參數(shù)


Keep-Alive

長連接

? ? ? ?HTTP在產(chǎn)生在TCP七層結(jié)構(gòu)中的最頂層。在早期的HTTP的具體實現(xiàn)情形中晶通,每個HTTP請求需要單獨新開啟一個socket連接璃氢。這其實是非常低效的做法,很多HTTP請求其實指向的是同一個服務(wù)器狮辽。比如一也,一個頁面中巢寡,大部分圖片請求都去向了同一個圖片服務(wù)器。針對這種在同一個服務(wù)器下反復(fù)“開啟-關(guān)閉”的低效做法椰苟,持續(xù)連接(也就是長連接)應(yīng)運而生抑月。瀏覽器和服務(wù)器在報頭中加入Connection參數(shù)來表示對長連接的支持。

長連接參數(shù)

? ? ? ?瀏覽器或者服務(wù)器可以通過在報頭中加入“Connection: close”配置項來關(guān)閉這個連接舆蝴。嚴(yán)格來說谦絮,Connection: keep-alive 配置項并不是HTTP/1.1 中要求必須有的,但是絕大部分的瀏覽器和服務(wù)器依舊使用它洁仗。

? ? ? ?在HTTP/1.1中有定義到管道技術(shù)层皱,它允許多個請求在無需等待響應(yīng)的情況下,共用一個socket鏈接赠潦。管道技術(shù)比長連接有這個更好的性能表現(xiàn)奶甘。可惜的是祭椰,管道技術(shù)在IE中并未得到支持(包括IE7以下)臭家,并且在FireFox 2中被默認(rèn)關(guān)閉了。所以方淤,在管道技術(shù)被更加廣泛運用之前钉赁,長連接將是瀏覽器與服務(wù)器之間更有效利用socket鏈接的HTTP鏈接方式。而對于HTTPS來說更是如此携茂,因為每建立一個安全的socket鏈接要花費更多時間你踩。


【譯者注】

考慮到本書為2007年出版,所以關(guān)于管道技術(shù)問題讳苦,我在這里進(jìn)行了進(jìn)一步的查詢带膜,發(fā)現(xiàn)到目前為止,大部分瀏覽器對管道技術(shù)的支持依舊非常有限:

http://en.wikipedia.org/wiki/HTTP_pipelining#Implementation_in_web_browsers

以下我便不一一翻譯了鸳谜,基本說的主流瀏覽器里膝藕,除了Opera進(jìn)行支持了以外,其余的要么完全未實現(xiàn)此功能咐扭,要么默認(rèn)關(guān)閉芭挽。

Implementation in web browsers[edit]

Out of all the major browsers, only Opera based on Presto layout engine had a fully working implementation that was enabled by default. In all other browsers HTTP pipelining is disabled or not implemented.

Internet Explorer 8 does not pipeline requests, due to concerns regarding buggy proxies and head-of-line blocking.

Mozilla browsers (such as Mozilla Firefox, SeaMonkey and Camino) support pipelining, however it is disabled by default. Pipelining is disabled by default to avoid issues with misbehaving servers.When pipelining is enabled, Mozilla browsers use some heuristics, especially to turn pipelining off for older IIS servers.

Konqueror 2.0 supports pipelining, but it's disabled by default.[citation needed]

Google Chrome supports pipelining for HTTP in the stable release as a non-default option (starting with version 18). There is no support for pipelining HTTPS yet. As of version 26, the flag to enable HTTP pipelining in Chrome has been disabled.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蝗肪,隨后出現(xiàn)的幾起案子袜爪,更是在濱河造成了極大的恐慌,老刑警劉巖薛闪,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辛馆,死亡現(xiàn)場離奇詭異,居然都是意外死亡豁延,警方通過查閱死者的電腦和手機(jī)昙篙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進(jìn)店門倔韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓢对,你說我怎么就攤上這事寿酌。” “怎么了硕蛹?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵醇疼,是天一觀的道長。 經(jīng)常有香客問我法焰,道長秧荆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任埃仪,我火速辦了婚禮乙濒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卵蛉。我一直安慰自己颁股,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布傻丝。 她就那樣靜靜地躺著甘有,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葡缰。 梳的紋絲不亂的頭發(fā)上亏掀,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天,我揣著相機(jī)與錄音泛释,去河邊找鬼滤愕。 笑死,一個胖子當(dāng)著我的面吹牛怜校,可吹牛的內(nèi)容都是我干的间影。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼韭畸,長吁一口氣:“原來是場噩夢啊……” “哼宇智!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胰丁,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喂分,沒想到半個月后锦庸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蒲祈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年甘萧,在試婚紗的時候發(fā)現(xiàn)自己被綠了萝嘁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡扬卷,死狀恐怖牙言,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怪得,我是刑警寧澤咱枉,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站徒恋,受9級特大地震影響蚕断,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜入挣,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一亿乳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧径筏,春花似錦葛假、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夷恍,卻和暖如春魔眨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酿雪。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工遏暴, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人指黎。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓朋凉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親醋安。 傳聞我的和親對象是個殘疾皇子杂彭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,435評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自:http://www.cnblogs.com/li0803/archive/2008/11/03/13247...
    沖上云霄90閱讀 659評論 0 3
  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺,所以準(zhǔn)備花時間了解一下吓揪,本文主要是講http協(xié)議的一些基礎(chǔ)亲怠,和一些...
    justCode_閱讀 2,093評論 0 23
  • 1 不知道是經(jīng)歷了多少次的困惑和迷茫团秽。回過頭看都是一場空,我是一個80后一個沒有背景习勤、沒有什么文化的80后踪栋。我是一...
    MR囍閱讀 420評論 1 0
  • 大家都說,孩子上幼兒園不習(xí)慣图毕,哭一個月就好了夷都。前幾天我一直在慶幸虹脯,送禾仔去幼兒園佛纫,好像并沒有那么難嘛!除了第一周第...
    cccowly閱讀 201評論 0 1
  • 在工作和學(xué)習(xí)中治拿,出色的記憶能力總是能為我們帶來很大優(yōu)勢。許多成功人士很善于運用各種方法有目的的強(qiáng)化對某些重要信息的...
    道兄閱讀 987評論 0 8