1.浏览器与服务器建立一个TCP连接后是否会在HTTP请求完成后断开,什么情况下会断开?
2.一个TCP连接可以对应几个HTTP请求?
3.一个TCP连接中HTTP请求发送可以一起发送吗?(比如一起发3个请求,再3个响应一起接收)
4.为什么有时候刷新页面不需要重新建立SSL连接?
5.浏览器对同一Host建立TCP连接的数量有无限制?
答案:
1.是否在HTTP请求后断开,HTTP1.0一个服务器在发送完响应后就会断开TCP连接,但这样每次请求都会重新建立连接和断开,代价过大。因此标准中没有设定,但某些服务器对请求中header中Connection选项进行了支持,如果是keep-alive,请求完成后会继续保持连接。
HTTP1.1就把Connection头写进了标准,默认持久连接,除非请求中申明Connection:close。
2.如果是keep-alive,一个TCP连接可以对应很多个请求
3.HTTP1.1中,同一时间只能处理一个请求,虽然1.1中规定了Pipelining(同时接收请求,按顺序返回响应)来解决这个问题,但浏览器默认该功能关闭,浏览器无法判断响应是哪一个请求的,问题比较多,若第1个响应延迟或不能正确处理,将会导致其他响应阻塞等等。
HTTP2提供了Multiplexing多路传输特性,可以在一个TCP中同时完成多个HTTP请求,并行完成。
4.TCP保持连接的情况,不需再次进行SSL
5.有,Chrome最多允许对同一个Host建立6个TCP连接,不同浏览器有差别。优先使用HTTP2,如果不支持,就使用多连结来并发请求,如连接都有请求在处理,那只能继续等待空闲了。