持久连接
在HTTP1.1之前,无论什么时候浏览器连接到一个web服务器,当请求的资源被发送之后,连接就被服务器关闭了。然而,一个互联网网页包括其他资源, 例如图片文件,applet等等。因此,当一个页面被请求的时候,浏览器同样需要下载页面所引用到的资源。加入页面和它所引用到的全部资源使用不同连接来 下载的话,进程将会非常慢。那就是为什么HTTP1.1引入持久连接的原因了。使用持久连接的时候,当页面下载的时候,服务器并不直接关闭连接。相反,它 等待web客户端请求页面所引用的全部资源。这种情况下,页面和所引用的资源使用同一个连接来下载。考虑建立和解除HTTP连接的宝贵操作的话,这就为 web服务器,客户端和网络节省了许多工作和时间。
持久连接是HTTP1.1的默认连接方式。同样,为了明确这一点,浏览器可以发送一个值为keep-alive的请求头部connection: connection: keep-alive
块编码
http://zh.wikipedia.org/wiki/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81
建立持续连接的结果就是,使用同一个连接,服务器可以从不同的资源发送字节流,而客户端可以使用发送多个请求。结果就是,发送方必须为每个请求或响应发送 内容长度的头部,以便接收方知道如何解释这些字节。然而,大部分的情况是发送方并不知道将要发送多少个字节。例如,在开头一些字节已经准备好的时 候,servlet容器就可以开始发送响应了,而不会等到所有都准备好。这意味着,在content-length头部不能提前知道的情况下,必须有一种 方式来告诉接收方如何解释字节流。
即使不需要发送多个请求或者响应,服务器或者客户端也不需要知道将会发送多少数据。在HTTP1.0中,服务器可以仅仅省略content-length 头部,并保持写入连接。当写入完成的时候,它将简单的关闭连接。在这种情况下,客户端将会保持读取状态,直到获取到-1,表示已经到达文件的尾部。
HTTP1.1使用一个特别的头部transfer-encoding来表示有多少以块形式的字节流将会被发送。对每块来说,在数据之前,长度(十六进 制)后面接着CR/LF将被发送。整个事务通过一个零长度的块来标识。假设你想用2个块发送以下38个字节,第一个长度是29,第二个长度是9。 I'm as helpless as a kitten up a tree.
你将这样发送: 1D\r\n I'm as helpless as a kitten u 9\r\n p a tree. 0\r\n 1D,是29的十六进制,指示第一块由29个字节组成。0\r\n标识这个事务的结束。
状态100(持续状态)的使用
在发送请求内容之前,HTTP 1.1客户端可以发送Expect: 100-continue头部到服务器,并等待服务器的确认。这个一般发生在当客户端需要发送一份长的请求内容而未能确保服务器愿意接受它的时候。如果你 发送一份长的请求内容仅仅发现服务器拒绝了它,那将是一种浪费来的。
当接受到Expect: 100-continue头部的时候,假如乐意或者可以处理请求的话,服务器响应100-continue头部,后边跟着两对CRLF字符。 HTTP/1.1 100 Continue
接着,服务器应该会继续读取输入流。
分享到:
相关推荐
9. **首部字段(Header Fields)**:HTTP/1.1增加了许多新的首部字段,如Host字段,用于指定请求的特定主机,以及Upgrade字段,用于升级协议版本。 10. **代理和网关支持**:HTTP/1.1更好地支持了代理服务器和网关...
HTTP/1.1协议的无状态特性意味着服务器不会保存客户端的状态信息。为了在无状态协议中实现会话或事务管理,HTTP协议中引入了多种技术,如Cookies和会话追踪。Cookies是一种在客户端保存信息的机制,它由服务器生成,...
- **HTTP/1.1 的推出**:为了解决这些问题,HTTP/1.1协议应运而生,它不仅解决了HTTP/1.0的缺陷,还增加了更多功能,如更严格的协议规范、增强的缓存处理机制等。 #### 3. HTTP/1.1 的主要特性 - **状态管理**:...
**RFC 2616**定义了HTTP/1.1协议的核心特性和详细规范,为Web开发提供了坚实的基础。该协议不仅支持基本的超文本传输需求,还具备丰富的扩展性,可以适应各种复杂的应用场景。理解HTTP/1.1的工作原理对于现代Web...
《rfc2616/HTTP/1.1中文版》详细介绍了HTTP/1.1协议,它是对之前的RFC 2068的修订版。HTTP/1.1作为互联网上应用最为广泛的应用层协议之一,主要负责客户端与服务器之间的数据交换。本篇将深入探讨该协议的核心概念、...
通过上述介绍,我们可以了解到HTTP/1.1协议的一些核心概念和关键特性,如无状态性、持久连接、缓存机制等。这些特性的引入不仅提高了网络传输效率,也为后续版本的发展奠定了基础。随着互联网技术的不断发展,...
### UVC 1.1协议 UVC 1.1主要在1.0的基础上进行了以下改进: - **增强的错误恢复**:提高了在数据传输过程中处理错误的能力,增强了系统的稳定性。 - **扩展的视频格式支持**:增加了对更多视频编码格式的支持,如...
### HTTP 1.1 协议详解 #### 一、引言 ##### 1.1 目的 超文本传输协议(HyperText Transfer Protocol, HTTP)作为一种应用层协议,为分布式、协作式的多媒体信息系统提供了基础服务。自从1990年代初万维网(World ...
这些是HTTP/1.1协议中的核心概念和特性,它们共同构建了我们日常浏览网页、使用网络服务的基础。在实际应用中,HTTP/1.1协议的这些特性被广泛使用,以提供高效、可靠的网络通信。通过学习和理解这些知识点,开发者...
这里我们创建了一个新的`PageGetter`类,它覆盖了`sendCommand`方法,使得在发送HTTP命令时,会使用HTTP/1.1协议。`HTTPClientFactory`继承自Scrapy的`ScrapyHTTPClientFactory`,并覆盖了`protocol`属性,使其指向...
### HTTP/1.1协议详解 #### 一、引言 HTTP(HyperText Transfer Protocol)是一种用于从Web服务器传输超文本到本地浏览器的应用层协议。HTTP/1.1是HTTP协议的一个版本,由IETF(Internet Engineering Task Force)...
HTTP/1.1协议的设计原则是通用性、无状态性和可扩展性。通用性意味着HTTP不仅适用于超文本传输,还能通过扩展其请求方法、错误代码和报头来适应各种不同的任务。无状态性是指每次HTTP请求都是独立的,服务器不会记住...
HTTP/1.1协议的特点在于其通用性和无状态性。它不仅适用于超文本传输,还能通过扩展请求方法、错误代码和头部信息来处理各种任务,如名称服务和分布式对象管理系统。HTTP/1.1的一大优点是数据表示的灵活性,允许数据...
- **方法和报头集**:HTTP/1.1 支持可扩展的方法集和报头集,这意味着可以通过添加新的请求方法和报头字段来扩展协议的功能。 - **统一资源标识符(URI)**:HTTP/1.1 使用 URI 来指定资源位置,URI 可以分为 URL...
9. **头部集(Header Fields)**:HTTP/1.1 增加了许多新的头部字段,用于扩展协议功能,如If-Modified-Since用于缓存验证,Content-Encoding用于压缩数据,Accept-Language用于指定客户端语言偏好等。 HTTP/1.1 的...
HTTP/1.1协议的一个重要特点是数据的表现形式是可以定义和可协商的。这意味着客户端和服务器可以根据需求协商数据的具体格式,如文本、图片或其他多媒体格式。这种灵活性使得HTTP能够在各种应用场景中发挥重要作用。...