HTTP1.0与HTTP1.1

什么是HTTP?

        HTTP 是一种协议,允许 web 服务器和浏览器通过互联网进行来发送和接受数据。它是一种 请求和响应协议。客户端请求一个文件而服务器响应请求。HTTP 使用可靠的 TCP 连接--TCP 默认 使用 80 端口。第一个 HTTP 版是 HTTP/0.9,然后被 HTTP/1.0 所替代。正在取代 HTTP/1.0 的是 当 前 版 本 HTTP/1.1 。

一个HTTP请求包括三个组成部分:

    1.统一资源标识符(URI)

    2.请求的头部(request header)

    3.主体内容 (request body)

以下是一个标准的HTTP请求

POST /examples/default.jsp HTTP/1.1

Accept: text/plain; text/html

Accept-Language: en-gb

Connection: Keep-Alive

Host: localhost

User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)

Content-Length: 33

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

lastName=Franks&firstName=Michael

HTTP响应也与HTTP请求类似也是三个部分组成:

1.方法一统一资源标识符号(URI)协议/版本

2.响应的头部

3.主体内容

以下是一个HTTP响应的例子:

HTTP/1.1 200 OK

Server: Microsoft-IIS/4.0

Date: Mon, 5 Jan 2004 13:13:33 GMT

Content-Type: text/html

Last-Modified: Mon, 5 Jan 2004 13:13:12 GMT

Content-Length: 112 

响应头部的第一行类似于请求头部的第一行。第一行告诉你该协议使用 HTTP 1.1,请求成功(200=成功),表示一切都运行良好。

响应头部和请求头部类似,也包括很多有用的信息。响应的主体内容是响应本身的 HTML 内容。头部和主体内容通过 CRLF(回车换行符) 分隔开来。


1.HTTP 1.1支持长连接和请求流水线处理

HTTP1.0规定了浏览器只和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不追踪每个客户,也不记录过去的请求。

HTTP1.1则支持持久连接,并且默认使用持久连接。在同一个tcp的连接中可以传送多个HTTP请求和响应。多个请求和响应可以重叠,多个请求和响应可以同时进行。

HTTP1.1的持续连接:需要增加新的请求头来帮助实现。Connection请求头的值为keep-Alive时,客户端会通知服务器返回本次请求结果后保持连接;Connection请求投的值为close时,客户端通知服务器本次请求结果后关闭连接。

HTTP1.1的流水线处理:在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。  HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。

HTTP1.1增加的host字段:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。 HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

HTTP1.1增加了Continue状态码:HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。

HTTP1,1中引入了Chunked transfer-coding来将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个0长度的快作为消息结束的标志,这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息导致过载。

HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)

你可能感兴趣的:(HTTP1.0与HTTP1.1)