干雾妹小霾

HTTP性能相关知识

上一篇 / 下一篇  2016-06-07 10:43:42 / 天气: 阴雨 / 个人分类:协议相关


一、HTTP协议
HTTP是Hypertext Transfer Protocol(超文本传输协议)的简称,HTTP是一种请求/响应式的协议,基于TCP协议来进行数据传输

通过HTTP或者HTTPS(HTTP协议与安**接口层SSL的结合)协议请求的资源由统一资源标识符(URI)来标识。HTTP URL是一种特殊类型的URI,包含了用于查找某个资源的足够信息。格式如下:
http://host[":"port][abs_path]
比如下面的URL:
http://bbs.51testing.com/forum.php

(1) http表示通过HTTP协议来定位网络资源;
(2) host表示合法的Internet主机域名或者IP地址;
(3) port指定一个端口号,为空则使用默认端口80;
(4) abs_path指定请求资源的URI,如果URL中没有给出abs_path,那么当它作为请求URI时,必须以"/"的形式给出。

HTTP是一个基于请求与响应模式的、无状态的、应用层的协议。每一次完整的交互过程都包含HTTP请求和HTTP响应
HTTP请求由三部分组成,分别是:请求行、消息报头、请求正文(可选)。请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:
Method Request-URI HTTP-Version CRLF
(1) Method表示请求方法;
(2) Request-URI是一个统一资源标识符;
(3) HTTP-Version表示请求的HTTP协议版本;
(4) CRLF表示回车和换(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
例如:GET / HTTP/1.1
① GET是方法;
② "/"是Request-URI请求的资源路径,是基于消息报头中host字段标识的主机的路径;
③ HTTP/1.1是协议和版本号。


请求方法(所有方法全为大写):
(1) GET 请求获取Request-URI所标识的资源。
(2) POST 在Request-URI所标识的资源后附加新的数据。
(3) HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
(4) PUT 请求服务器存储一个资源,并用Request-URI作为其标识。
(5) DELETE 请求服务器删除Request-URI所标识的资源。
(6) TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断。
(7) CONNECT 保留将来使用。
(8) OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求。
其中,GET、POST、PUT、DELETE比较常用。

HTTP响应和请求类似,也是由三个部分组成,分别是:状态行、消息报头、响应正文。状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
例如:HTTP/1.1 200 OK(CRLF)
(1) HTTP-Version表示服务器HTTP协议的版本;
(2) Status-Code表示服务器发回的响应状态代码;
(3) Reason-Phrase表示状态代码的文本描述;
(4) CRLF表示回车和换行。


状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
① 1xx:指示信息——表示请求已接收,继续处理。
② 2xx:成功——表示请求已被成功接收、理解、接受。
③ 3xx:重定向——要完成请求必须进行更进一步的操作。
④ 4xx:客户端错误——请求有语法错误或请求无法实现。
⑤ 5xx:服务器错误——服务器未能实现合法的请求。


二、在TCP协议层面的交互和并发
HTTP协议基于TCP协议运作。

TCP源端口号相同的出现了好几次,即HTTP协议多次复用了这个TCP连接来串行发起多次请求。TCP连接的建立和消耗都是一个耗费资源和时间的过程,所以连接的复用对于性能的提升是很重要的

当一台主机上获取大量资源,浏览器会建立多个TCP连接来并行发起请求。
浏览器建立并行连接取决于:
1、需要从同一个主机获取的资源数量,这个决定最大的并行数;
2、浏览器关于这个并行的设置;
下图为FireFox的并发数设置


通常我们理解浏览器通过HTTP协议获取页面元素的过程是:浏览器会先取回这个页面的主html文件,然后解析内容,进而发起请求去取其他页面展示所需要的元素,比如图片、css、js等。通常情况是如此,但并不是每次都这样。

如上图,在No.169发起了获取首页HTML内容的HTTP GET请求,到No.1001时,这个请求才返回。而在这个返回之前,浏览器发起了大量的页面其他元素的请求,包括js和图片等。
所以实际上,浏览器在获取了部分的HTML内容之后,就开始了解析,并基于解析的内容发起了针对其他页面元素的请求。这个过程比通常我们理解的过程更加高效,并行度更高。


三、性能相关的特性
1、HTTP传输过程中的数据压缩
HTTP头信息中有相关的字段Accept-Encoding来标识是否使用gzip。默认情况下,对于HTML文本这样比较易于压缩的内容,大部分网站都是开启的。

2、客户端的缓存

(1) Cache-Control设定了缓存的有效时间(s);
(2) Last-Modified表示这个文件内容最后一次在服务器上被修改的时间。


304响应码的意思是服务器端接收到浏览器的请求,判断后认为服务器端最新的该文件版本和客户端已有一致,于是告诉客户端不需要再传输完整的内容,可以直接用本地的版本。
   
Cache-Control的参数还包括有:
(1) public:响应会被缓存,并且可以在多用户间共享。
(2) private:响应只能作为私有的缓存,比如在一个浏览器中,不能再用户间共享,所以设置该参数后就不能被反向代理缓存了。
(3) no-cache:响应不会被缓存,而是实时向服务器端请求资源,这使得HTTP认证能够禁止缓存以保证安全性。实际中这个容易让人产生误解,字面理解是响应不被缓存,而实际上no-cache情况下也是会被缓存的,只是每次客户端都要向服务器评估缓存响应的有效性。
(4) no-store:在任何条件下,响应都不会被缓存,并且不会写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。
(5) max-age=[单位:秒]:设置缓存最大的有效时间,从服务端返回的时间开始计算。
(6) s-maxage=[单位:秒]:类似于max-age,但是它只用于共享缓存,比如代理。




TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-14  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 2620
  • 日志数: 1
  • 图片数: 1
  • 建立时间: 2015-12-10
  • 更新时间: 2016-06-07

RSS订阅

Open Toolbar