HTTP Pipelining & Head of line blocking
HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应; 只不过,客户端还是要按照发送请求的顺序来接收响应。 如果前一个请求非常耗时,那么后续请求都会受到影响,这就是所谓的线头阻塞(Head of line blocking)。
Http的报文头字段upgrade-insecure-requests:1
Upgrade-Insecure-Requests请求头向服务器发送一个信号,表示客户对加密和认证响应的偏好, 并且它可以成功处理upgrade-insecure-requests CSP 指令; 如果在https的页面需要加载http的资源,那么浏览器就会报错或者提示,为了促进用户升级协议,同时不需要网站开发者劳师动众地把整个网站的http资源改成https资源,chrome增加一个Upgrade-Insecure-Requests: 1头,告诉服务器,浏览器可以处理https协议,然后服务器返回Content-Security-Policy: upgrade-insecure-requests头,或者通过meta头设置,告诉浏览器,对于页面的http资源,请求时可以自动升级到https,比如在https的网站上有一张图片url是http://localhost/1.jpg,浏览器请求时会把url变成https://localhost/1.jpg,所以这里首先需要服务器在端有相对应的资源。但是有一种情况例外,那就是https网站中a标签对应的外站资源不会被升级,比如a网站有一张b网站的链接,那么这个链接对应的url不会升级。 ## 服务器缓存推送
这个功能通常被称作“缓存推送”。主要的思想是:当一个客户端请求资源X,而服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端。这个功能帮助客户端将Z放进缓存以备将来之需。 服务器推送需要客户端显式的允许服务器提供该功能。但即使如此,客户端依然能自主选择是否需要中断该推送的流。如果不需要的话,客户端可以通过发送一个RST_STREAM帧来中止 ##
Connection: Keep-Alive Keep-Alive: max=5, timeout=120 用 Keep-Alive 通用首部中指定的、由逗号分隔的选项来调节 keep-alive 的 行为,如下例子说明服务器最多还会为另外 5 个事务保持连接的打开状态,或者将打开状态保持到连接空闲了 2 分钟之后: