MVC应用程序中的HttpResponse.PushPromise()的工作示例

问题描述:

我已阅读了HTTP/2规范和其他几个教程中的push-promise,并有一个概念作为概念。MVC应用程序中的HttpResponse.PushPromise()的工作示例

我已阅读here in SO为什么在未来的日子里,捆绑销售不会相关。所以,如果我必须将推送承诺整合到应用程序中,那么这是一个理想的地方。是否应该在重定向到Action方法的视图之前?或者,在视图中的脚本?据我搜查,我找不到任何例子。

请有人分享他们在真实代码中实施的经验。如果您必须同时支持两种协议,它看起来像是一个开销吗?另外,如果我使用IIS 10,那么是否有任何配置更改需要我支持这两种协议? [据我所读,我们不必。但总是更好地留意一些专家。]

因此,如果我必须将推诺承诺整合到应用程序中,那么理想的地方是做什么的。是否应该在重定向到Action方法的视图之前?或者,在视图中的脚本?

我在控制器操作方法中做了试验,但是如果你有共同的资源,你可能想把它移到管道中更基本/共享的地方。任何可以访问HttpResponse对象的地方都可以工作。正如我注意到here,您需要使用PushPromiseoverload,它采用HTTP方法和标头,如果您推送的内容将根据任何请求标头而变化,例如, 接受编码(压缩)。

如果您必须同时支持两种协议,看起来像是开销吗?另外,如果我使用IIS 10,那么是否有任何配置更改需要我支持这两种协议?

您不需要明确地做任何事情来支持这两种协议; IIS会照顾它。每David So of Microsoft,“提供的客户端和服务器配置支持HTTP/2,然后IIS将使用HTTP/2(或回退到HTTP/1.1如果不可能)”。即使您使用服务器推送,情况也是如此:“如果底层连接不支持推送(客户端禁用推送,或HTTP/1.1客户端),则该呼叫不执行任何操作并返回成功,因此您可以安全地调用API需要担心是否允许推送。“顺便提一句,如果你想在Windows Server 2016上禁用HTTP/2,你可以这样做。via the registry

除了按照David So的建议检查IIS日志之外,还可以通过在Chrome的Network选项卡中右键单击标题行(名称,状态,类型等)来验证HTTP/2,然后检查“协议”;你会看到HTTP/2响应的“h2”。您可以通过查看Chrome HTTP/2内部页面(chrome:// net-internals /#http2)并查看您的域的“推送”和“推送并声明”列来验证推送承诺。

+0

我相信,如果最终文件的**内容**将根据标题而有所不同,那么您只希望在'headers'中使用重载。在压缩的情况下,即使用户禁用了压缩并刷新了页面,正确的(所需的)文件也将被缓存。只有当标题影响内容时,你需要使用这个过载 –

+0

我不清楚你的意思。推送承诺是客户根据您的初始响应请求的其他资源;我不确定刷新页面与什么有关。即使最初的请求带有兼容的Accept-Encoding标头,如果您使用[仅使用虚拟路径的重载]来推送资源(https://msdn.microsoft.com/zh-cn/library/dn823329.aspx ),推送的资源将被解压缩;您必须将初始请求的(相关)头传递给[其他重载](https://msdn.microsoft.com/en-us/library/dn823340.aspx)。 – ejohnson