文章4:HTTP/1.1 Connections (RFC 2616)

欢迎转载,转载请注明出处http://blog.csdn.net/yankai0219/article/details/8208810
chap8 Connection主要是两部分内容 长连接(persistent connection)与消息传送的必要条件(message transmission requirement).
8.1 长连接
8.1.1目的
长连接的目的:在长连接之前都是短连接,一次连接一次请求,多次TCP连接用于获取每一个URL,从而增加了HTTP服务器负担并引起网络阻塞。在短时间内客户端发起对同一个服务器的多次请求,就会造成性能下降。为了解决这一问题,从而出现长连接。
     长连接的优点:1)节约CPU时间和内存 2)降低网络阻塞。都是通过减少开启和关闭连接的次数,达到这两个优点的。
8.1.2所有操作
     http/1.1默认所有的连接都是长连接(persistent connection)。
     长连接提供了一种机制,用于客户端和服务器之间可以通过信号来通知TCP连接的关闭。这种信号在使用Connection头部字段时,一旦被通知关闭,那么客户端就不能再在那个连接上发送任何请求。这个头部字段的使用方式Connection:closed。
      8.1.2.1 Negotiation(协商)
          对于HTTP/1.1的服务器,如果不指定Connection:closed头部字段,那么所有的连接都是长连接。如果服务器在发送响应时想终止连接,那么就需要指定Connection:close头部域。
          对于HTTP/1.1的客户端,它希望连接一直是打开的,但是真正起决定作用的是:来自服务器的响应是否包含Connection:closed头部字段。在客户端不想保持长连接时,可以指定请求的Connection:closed字段。
          不管是客户端还是服务器,只要指定了Connection:closed头部字段,那么这个请求就是这个连接中的最后一个请求。

          如果没有明确指示,那么对于HTTP版本低于1.1客户端和服务器,都不能假设能够建立长连接。
      8.1.2.2Pipelining


8.1.3 代理服务器
     代理服务器能够准确实现Connection头部字段的属性。
     代理服务器不能再HTTP/1.0的客户端建立HTTP/1.1的连接。
8.1.4 实用性考虑(practical consideration)
          


8.2 Message Transmission Requirement 消息传送必要条件
      8.2.1 长连接与流控制
          HTTP/1.1通过长连接与使用TCP的流控制机制 来解决暂时的过载,而不是中止连接同时希望客户端重传。后者技术会加重网络阻塞。
      8.2.2 Monitoring Connections for Error Status Message
          
      8.2.3 Use of the 100 (Continue) Status
          状态码100(Continue)的目的是:在客户端发送请求体之前,允许发送带有请求体的请求消息的客户端,来判断服务器是否愿意接收这个请求。
           HTTP/1.1客户端必要条件:
               如果客户端在发送请求体之前,等待状态码为100的响应,那么在发送请求的时候需要包含 expectation  =  "100-continue"头部字段。
               如果客户端不用于发送请求体,那么就不能包含expectation  =  "100-continue"头部字段。
           HTTP/1.1服务器必要条件:
               对于接收到包含expectation  =  "100-continue"头部字段的请求,服务器会做出两种动作:1)响应状态码100 并继续从输入流中读数据 2)响应一个fianl status code 417(Expectation Failed)。在发送状态码100的响应之前,服务器不会等待请求体。如果响应的是final statud code,那么服务器就会关闭连接或者读取并舍弃余下的请求。
                如果请求体中不包含    expectation  =  "100-continue"头部字段,服务器不会发送状态码为100的响应。
                如果origin server收到的请求不包括expectation  =  "100-continue"的头部字段,但是该请求包含请求体,那么服务器在从transport connection读取全部请求体之前会发送一个final status code,但是在读取全部请求体或者客户端关闭连接之前,服务器不会关闭这个transport connection。
           HTTP/1.1代理必要条件:
      8.2.4 如果服务器突然关闭,客户端的行为
               

小结:我在读完这部分内容以后,有很多地方还是不是很懂。个人觉得有三个地方需要特别注意和记住:
     1)长连接与短连接
     2)expectation字段
     3)100状态码

你可能感兴趣的:(文章4:HTTP/1.1 Connections (RFC 2616))