HTTP/2规范指示如果客户端取消它,则不会推送在PUSH_PROMISE帧中标识的任何资源.
当浏览器检测到缓存中已存在的资源时,它应取消对此资源的推送.但是,我没有看到浏览器如何检测它.框架是否提供其他信息,如etag或上次修改,以允许浏览器检测是否必须驱逐任何缓存条目或是否可以取消推送?
如果可能,可以节省一些带宽.但是,似乎服务器推送会破坏任何客户端缓存优化.
经过一些研究,我很惊讶我没有在Tomcat中找到任何有关HTTP/2支持的资源.更改日志8.0表示SPDY的实验支持,wiki将HTTP/2称为支持的规范(http://wiki.apache.org/tomcat/Specifications),但我没有找到任何教程.
你知道是否已经可以在Tomcat上启用HTTP/2了吗?如果答案是肯定的我怎么能这样做?
使用websocket时,我们需要一个专用的双向通信连接.如果我们使用http/2,我们有服务器维护的第二个连接.
在这种情况下,使用websocket似乎会引入不必要的开销,因为使用SSE和常规http请求,我们可以通过单个HTTP/2连接获得双向通信的优势.
你怎么看?
我用jetty通过SSL启用了HTTP/2连接器.当我尝试连接浏览器时,出现"ERR_SSL_PROTOCOL_ERROR"错误.如果我切换到HTTP/1.1连接器一切正常.
这是我的码头配置文件:
<!-- ============================================================= -->
<!-- Configure the Jetty Server instance with an ID "Server" -->
<!-- by adding a HTTP connector. -->
<!-- This configuration must be used in conjunction with jetty.xml -->
<!-- ============================================================= -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="secureScheme">https</Set>
<Set name="securePort"><Property name="jetty.secure.port" default="8443" /></Set>
<Set name="outputBufferSize">32768</Set>
<Set name="requestHeaderSize">8192</Set>
<Set name="responseHeaderSize">8192</Set>
<Set name="sendServerVersion">true</Set>
<Set name="sendDateHeader">false</Set>
<Set name="headerCacheSize">512</Set>
<!-- Uncomment to enable handling of X-Forwarded- style headers
<Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>
-->
</New>
<!-- =========================================================== …
Run Code Online (Sandbox Code Playgroud)