译文:HTTP概述

本文为译文,原文为High Performance Web Sites  章节B

原书下载地址:http://pan.baidu.com/s/1pJocRwB


    在我们进行深入分析如何优化网页性能之前,首先要了解超文本传输协议(Hypertext transfer protocol, HTTP)中对性能产生影响的部分。HTTP是连接浏览器与WEB服务器之间交互的桥梁,它是由万维网联盟(World Wide Web Consortium, W3C)和互联网工程任务组(Internet Engineering Task Force ,IETF)联合规范制定,相关文件RFC 2616。HTTP/1.1 是目前最常用的版本,但是依旧还有浏览器与服务器继续在使用HTTP/1.0 。

       HTTP是一个由请求与响应组成的客户端与服务端交互协议。浏览器发送一个HTTP请求到指定的URL地址,持有此URL地址的WEB服务器将反馈回一个HTTP请求。像许多互联网服务里一样,这项协议采用简单的明文格式。请求的类型有GET、POST、HEAD、PUT、DELETE、OPTIONS 和 TRACE等。我们把注意力还是放在最重要最常见的GET请求上。

       一个GET请求包含了URL地址,同时在URL地址后带上了报头内容。而HTTP响应包含了状态码、报头和内容体。下面的这个例子显示了当请求脚本yahoo_2.0.0-b2.js时可能产生的HTTP报头内容。

请求脚本yahoo_2.0.0-b2.js

Compression

压缩

       HTTP响应可以使用压缩来减小传输体积,当然这要求浏览器和WEB服务器均支持此项功能。浏览器要支持压缩,需要在请求报头中加入Accept-Encoding,服务器端要支持需要在返回报头中加入Content-Encoding。

采用压缩请求脚本yahoo_2.0.0-b2.js

       请注意返回的内容体是如何被压缩的。章节4将解释如何打开压缩的方法,并且还会提醒说明由于代理缓存的原因,如何导致边界情况的发生。同时,还是讨论关于Vary和Cache-Control 报头参数。


Conditional GET Request

条件GET请求

      如果浏览器缓存中已经持有一个HTML内容元素的副本,但却并不能保证这个缓存的内容是不是依旧有效的,这个时候,一个条件GET请求就出现了。如果缓存的内容依旧有效,浏览器将会使用缓存来响应,这样响应得速度更快,用户的体验性也更好。

      通常情况下,一个缓存的内容是否有效主要取决于它最近一次的被修改时间,而浏览器是根据返回报头中的Last-Modified属性来获取到这个时间。浏览器会在请求报头中加入If-Modified-Since 属性到服务器端。这就好像浏览器再说:“这个内容元素我已经有了一个副本,最近修改时间是这样的,我就可以直接用它吗?”

带条件的GET请求

      如果这个内容元素从那个指定时间点开始到现在还没有发生修改,服务器将返回一个“304 Not Modified” 状态码,然后跳过响应的内容体,这样也使得返回更加简短而快速。在协议HTTP/1.1 中,ETag 和 If-None-Match 报头属性是另外一种执行条件GET请求的方式,我们将在章节13中进行讨论。


Expires

有效时间

      条件GET请求和304响应的确能够加快页面的加载速度,但是他们依旧需要能够在客户端与服务器端之间进行来回验证。报头中的Expires参数可以很好免除这种检查的烦恼:它能够明确指出了浏览器是否能够还能够继续使用一个内容元素的缓存。

带有效时间

      当浏览器获取到响应报文中的Expires参数时,它便将此内容元素以及其有效时间一起存入到缓存中。只要这个元素还没有到期,浏览器将会使用缓存的元素版本,以尽可能避免产生HTTP请求。章节3将会进一步详细讨论Expires与Cache-Control参数


Keep-Alive

长连接

       HTTP在产生在TCP七层结构中的最顶层。在早期的HTTP的具体实现情形中,每个HTTP请求需要单独新开启一个socket连接。这其实是非常低效的做法,很多HTTP请求其实指向的是同一个服务器。比如,一个页面中,大部分图片请求都去向了同一个图片服务器。针对这种在同一个服务器下反复“开启-关闭”的低效做法,持续连接(也就是长连接)应运而生。浏览器和服务器在报头中加入Connection参数来表示对长连接的支持。

长连接参数

       浏览器或者服务器可以通过在报头中加入“Connection: close”配置项来关闭这个连接。严格来说,Connection: keep-alive 配置项并不是HTTP/1.1 中要求必须有的,但是绝大部分的浏览器和服务器依旧使用它。

       在HTTP/1.1中有定义到管道技术,它允许多个请求在无需等待响应的情况下,共用一个socket链接。管道技术比长连接有这个更好的性能表现。可惜的是,管道技术在IE中并未得到支持(包括IE7以下),并且在FireFox 2中被默认关闭了。所以,在管道技术被更加广泛运用之前,长连接将是浏览器与服务器之间更有效利用socket链接的HTTP链接方式。而对于HTTPS来说更是如此,因为每建立一个安全的socket链接要花费更多时间。


【译者注】

考虑到本书为2007年出版,所以关于管道技术问题,我在这里进行了进一步的查询,发现到目前为止,大部分浏览器对管道技术的支持依旧非常有限:

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

以下我便不一一翻译了,基本说的主流浏览器里,除了Opera进行支持了以外,其余的要么完全未实现此功能,要么默认关闭。

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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 转自:http://www.cnblogs.com/li0803/archive/2008/11/03/13247...
    冲上云霄90阅读 660评论 0 3
  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,094评论 0 23
  • 1 不知道是经历了多少次的困惑和迷茫。回过头看都是一场空,我是一个80后一个没有背景、没有什么文化的80后。我是一...
    MR囍阅读 420评论 1 0
  • 大家都说,孩子上幼儿园不习惯,哭一个月就好了。前几天我一直在庆幸,送禾仔去幼儿园,好像并没有那么难嘛!除了第一周第...
    cccowly阅读 203评论 0 1
  • 在工作和学习中,出色的记忆能力总是能为我们带来很大优势。许多成功人士很善于运用各种方法有目的的强化对某些重要信息的...
    道兄阅读 992评论 0 8