RFC2616 - Hypertext Transfer Protocol -- HTTP/1.1
http://www.ietf.org/rfc/rfc2616.txt?number=2616
RFC2617 - HTTP Authentication: Basic and Digest Access Authentication
http://www.ietf.org/rfc/rfc2617.txt?number=2617
RFC2145 - Use and Interpretation of HTTP Version Numbers
http://www.ietf.org/rfc/rfc2145.txt?number=2145
RFC2964 - Use of HTTP State Management
http://www.ietf.org/rfc/rfc2964.txt?number=2964
RFC2965 - HTTP State Management Mechanism
http://www.ietf.org/rfc/rfc2965.txt?number=2965
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
超文本传输协议 (HyperText Transfer Protocol, HTTP)的特点:
- 应用层 (Application Level)。HTTP在应用层上操作,采用稳定的,面向连接的传输协议,但不提供可靠性或重传机制。
- 请求/响应 (Request/Response)。一旦建立了传输会话,一端必须向响应的另一端发送HTTP请求
- 无状态 (Stateless)。每个HTTP请求都是自包含的,服务器不保留以前的请求或会话的历史记录。
- 双向传输 (Bi-Directional Transfer)。多数情况下,浏览器请求Web页,服务器把副本传输给浏览器;HTTP也允许从浏览器向服务器传输。
- 协商能力 (Capability Negotiation)。HTTP允许浏览器和服务器协商一些细节。
- 支持高速缓存 (Support For Caching)。
- 支持中介 (Support For Intermediaries)。代理服务器将Web页放入高速缓存并从中应答浏览器的请求。
HTTP GET 请求:
浏览器发送HTTP GET 命令从服务器上请求Web页。
请求由一行文本组成,这行文本以关键字GET 开头,然后是URL以及HTTP版本号。
例如 - GET http://www.cs.purdue.edu/people/comer/HTTP/1.1
在浏览器和Web服务器之间使用超文本传输协议(HTTP)。浏览器向服务器发送GET请求,服务器则发送请求的内容作为响应。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
持久连接和长度:
HTTP的早期版本通过为每个数据传输使用新的TCP连接,遵循和FTP一样的模式。
HTTP1.1 版本不是为每个传输使用TCP连接,而是把持久连接(persistent connection)作为默认方法。即一旦客户打开了和特定服务器的TCP连接,客户就让该连接在多个请求和响应过程中一直存在。当客户或服务器准备关闭连接时,则通知另一端,然后关闭该连接。
持久连接的主要优点在于减少开销,TCP连接越少,意味着响应时间、底层网络上系统开销、缓冲区使用的内存和使用的CPU时间就会减少。可以使用流水线技术(pipelining)请求进一步优化使用持久连接的浏览器(也就是逐个连续地发送请求,不必等待响应)。
使用持久连接需要标识通过连接发送的每一项的开头和结尾。为了避免在标记值和数据之间的多义性,HTTP使用先发送长度,然后发送具有该长度的数据项的方法。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
数据长度和程序输出:
大多服务器使用CGI (Common Gateway Interface)机制,该机制允许计算机程序在服务器上运行,动态创建Web页。这意味着服务器不能提前知道准确的数据大小。
因此,为了提供动态Web页,HTTP标准指定,如果服务器预先不知道数据项的长度,那么服务器可以通知浏览器 (用Connection:close 首部代替Content-Length首部),它将在传送完项目后关闭连接。
为了允许TCP连接在多个请求和响应中持久存在,HTTP要在每个响应前发送长度;如果不知道长度,服务器通知客户,发送响应,然后关闭连接。
长度编码和首部:
服务器发送长度信息时,HTTP借用了电子邮件的基本格式,使用822格式和MIME扩展格式。
每个HTTP传送包含一个首部、一个空行和要发送的数据项;其中,首部中的每一行包含关键字、冒号和信息。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
协商:
除了指定有关正在发送的数据项的详细信息之外,HTTP还使用首部允许客户和服务器协商(negotiate)各种能力。有两种类型的协商:服务器驱动(server-driven)和代理驱动(agent-driven)(也就是浏览器驱动)。
服务器驱动是从浏览器发出请求开始的。请求指定首选列表以及要求的数据项的URL,服务器从可用的表示法中选出符合浏览器首选要求的一项。
代理驱动只是意味着浏览器用两步过程执行选择操作。首先,浏览器向服务器发送请求,询问可用的内容,服务器返回可能的内容列表。浏览器选择其中一个可能项,发送第二个请求获得该数据项。代理驱动的缺点是要求两个服务器互相作用,优点是浏览器得到了对选项的完全控制权。
HTTP使用类似于MIME的首部传送元信息。浏览器和服务器都发送首部,允许它们对要使用的文档表示和编码进行协商。
条件请求:
HTTP允许发送方有条件地进行请求。即当浏览器发送请求时,它包括的首部限定了在何种条件下应该兑现请求,如果不符合指定的条件,服务器不返回请求的数据项。
条件请求通过避免不必要的传输,从而允许浏览器优化检索过程。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
支持代理服务器:
代理服务器提供了优化机制,能够降低等待时间并减少服务器的负担。
为了保证正确性,HTTP明确支持代理服务器。协议准确地指定代理服务器如何处理每个请求,代理服务器应该如何解释首部,浏览器如何与代理服务器协商,代理服务器如何与服务器协商。另外,已经设计了几个专门用于代理服务器的HTTP首部。
高速缓存:
高速缓存的目的是提高效率,通过消除不必要的传输,高速缓存减少了等待时间和工作量。
HTTP允许服务器以两种方式控制高速缓存:
首先,当HTTP应答对Web页的请求时,服务器可以指定高速缓存的细节,包括该页能否全部缓存,代理服务器是否可以高速缓存该页,哪些人可以共享高速缓存的页面,高速缓存的副本的到期时间,可应用于副本的传输的限制。
其次,HTTP允许浏览器强制Web页重新生效。为此,浏览器发送对该页的请求,使用首部指定最长的“寿命”(也就是自从存储Web页的副本以来的时间)不能大于0。不能使用高速缓存中该页的副本来满足这个请求,因为副本的年龄不是0。这样只有初始服务器将应答该请求。路径上的中介代理服务器将接收到新的高速缓存的副本,发布请求的浏览器也会接收到新的副本。
高速缓存是有效操作Web的关键。HTTP允许服务器控制是否能高速缓存页面、如何高速缓存页面以及页面的生命期;浏览器可以强制页面请求绕过高速缓存,从拥有该页的服务器上得到新的副本。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP Method:
- OPTIONS
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
- CONNECT
没有评论:
发表评论