HTTP超文本传输协议

HTTP 定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器

HTTP1.0

page=111
HTTP/1.0采用非持续连接方式
在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接

  • 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费2RTT的时间
  • 为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重

HTTP1.1

page=113
HTTP/1.1采用采用持续连接方式

  • 在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行
  • 为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率

HTTP报文格式

page=114
HTTP的报文格式
HTTP 是面向文本的,其报文中的每一个字段都是一些 ASCII 码串,并且每个字段的长度都是不确定

请求报文由请求行首部行实体主体,三个部分组成
一个请求行下,可以跟多个首部行

请求行

请求行由三个部分组成

  • 方法
  • URL
  • 版本
    每个内容之间用空格分割,行末尾用CRLF表示换行
方法URLHTTP版本CRLF换行符
GET/index.htmlHTTP/1.1
也就是这个图中请求报文的第一行
GET /index.html HTTP/1.1
方法-HTTP

首部行

首部行由三个部分组成:

  • 首部字段名
  • 冒号
首部字段名:CRLF
也就是这个图中二、三、四,五行以及空行的这几个部分

携带的User-Agent浏览器版本认证,希望服务器返回的语言这些信息都以键值对写在首部行里

实体主体

通常不使用

HTTP响应报文格式

状态行
首部行
实体主体
三个部分组成

状态行

版本状态码短语CRLF

常见的状态行

状态码

状态码有五大种33个

1xx状态码

1xx:这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

2xx状态码

2xx:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

3xx状态码

3xx:这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

4xx状态码

4xx:这类的状态码代表客户端类的错误。

5xx状态码

5xx:服务器类的错误。

响应首部

也还是键值对的集合

实体

客户端请求的东西,服务器端把东西放在实体部分给它返回回来