问题标签 [push-promise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - .NET 4.6 HttpResponse.PushPromise 方法来管理 http/2 PUSH_PROMISE 标头
我对PUSH PROMISE http/2标头处理有点困惑.NET4.6
。
当我查看 HttpResponse.PushPromise
时,有两个重载:
一种接受资源路径的方法 public void PushPromise(string path)
-假设然后读取资源并将二进制文件发送给客户端。
第二个 public void PushPromise(string path, string method, NameValueCollection headers)
接受sting method
并且NameValueCollection headers
我无法理解。
为什么我要传递方法(假设像 GET、POST 等这样的 HttpMethod)和标题内的PUSH PROMISE
标题集合?
asp.net-mvc - MVC 应用程序中 HttpResponse.PushPromise() 的工作示例
我已经阅读了 HTTP/2 规范和其他几个教程中关于 push-promise 的内容,并且有了一个概念。
我在这里读过为什么捆绑在未来几天不会那么重要。因此,如果我必须将 push promise 合并到应用程序中,那么理想的地方是哪里。是否应该在从 Action 方法重定向到视图之前?或者,在视图中的脚本中?据我搜索,我找不到任何例子。
请有人分享他们在真实代码中实现的经验。如果您必须同时支持这两种协议,这似乎是一种开销吗?
另外,如果我使用的是 IIS 10,那么我应该做任何配置更改来支持这两种协议吗?[据我所知,我们不必这样做。但总是更好地注意一些专家。]
asp.net - ASP.Net HTTP2 PushPromise 很慢
我正在尝试使用“PushPromise”.NET 4.6.1 实现 Http2 推送服务器功能,为此我有一个带有 Razor 的“html 扩展”(我们没有实现 MVC,只使用 Razor 引擎来构建页面)。
而在页面的<head>中:
我已经“不使用 PushPromise”(credimejorademo)托管了同一个项目,并且在另一个域中我实现了 PushPromise(aquituinmueble):
apache - 在 Apache 中发送带有延续帧的服务器推送
我正在测试我的 HTTP/2 解析器,目前我无法继续测试推送承诺。我使用 Apache 作为 HTTP/2 服务器。我设法使用Location
'sHeader add link
或H2PushResource
. 但是当我尝试继续检查推送承诺时,我无法修改推送请求中发送的标头。
我想为推送的请求添加一些长标题,但我发现的命令不会影响推送的请求:
- RequestHeader在处理内容之前修改请求标头 - 这意味着标头在 Apache 的 HTTP 解析器中被修改,它不会影响发送的推送请求
- 标头修改从服务器发送的响应标头 - 此命令将标头添加到响应,而不是请求
编辑:
我注意到user-agent
在推送的请求中也发送了标头,因此我在请求中发送了一个非常长的用户代理标头,但随后我收到了 431 响应(请求标头字段太大)。
还有什么想法吗?
编辑 2: 这是我的 HTTP/2 配置行:
当我收到来自 Apache 的响应时,我得到了标头myrespheader
,但推送的请求没有发送标头myreqheader
或myrespheader
http-headers - 浏览器是否检查 PUSH_PROMISE 帧内的条件标头?
我知道浏览器可以发送RST_STREAM-frames
取消serverpush
。
Last-Modified
在 中发送或Etag
标头是否有意义PUSH_PROMISE
?还是to-be-pushed
仅基于资源的验证URI
(正如两年前 Simone Bordet 对以下问题的回答)?
我找不到这个问题的确切答案。
http2 - http2:PUSH_PROMISE 客户端流状态
http2 规范说:
接收者必须将在既不是“打开”也不是“半关闭(本地)”的流上接收到 PUSH_PROMISE 视为 PROTOCOL_ERROR 类型的连接错误(第 5.4.1 节)。但是,在相关流上发送 RST_STREAM 的端点必须处理可能在接收和处理 RST_STREAM 帧之前创建的 PUSH_PROMISE 帧。
规范也有这个生命周期图。
我的理解是,为了让客户端PUSH_PROMISE
在流上接收 a,客户端必须在该流上拥有所有这些:
- 将
HEADERS
帧(+ anyCONTINUATION
s)发送到服务器 - 未收到
END_STREAM
来自服务器的标志 - 未收到
RST_STREAM
来自服务器的帧
(这里值得注意的是“未将RST_STREAM
帧发送到服务器”,这将导致流被“关闭”;上面的引用说这不是连接错误的理由。)
在不满足这些条件的任何情况下,客户端必须将接收到 PUSH_PROMISE 视为连接错误。
这是一个正确的理解吗?
node.js - 使用 Nodejs pushStream 方法的服务器推送不起作用
我正在学习http2
,nodejs
但发现一个问题pushStream
方法不起作用
(客户端在开发者工具上不显示“Pushed/[fileName]”)
不知是不是nodejs版本的原因(我安装的是最新版本v9.8.0)
我的代码如下:
服务器.js
实用程序.js
2020 年 01 月 28 日更新
已解决:原因是chrome v65最新版本。有错误,导致客户端不信任PUSH_PROMISE
框架。我备份了 chrome v64,然后它现在可以工作了。
http - HTTP/2 推送承诺行为
我正在为 HTTP/2 编写一个弹性客户端。我想知道客户端的行为应该是什么,如果服务器发送了一个 PUSH_PROMISE 然后未能发送与该 PUSH_PROMISE 相关的 PUSH_RESPONSE ?
我浏览了关于Push Response的 HTTP/2 规范,但它没有说明在这种情况下我们应该做什么。
- 如果没有收到推送响应,我们是否应该再次发送原始请求?如果原始请求发送成功,再次发送可能会导致问题,不是吗?
- 还是我们应该忽略 PUSH_PROMISE 并继续?在这种情况下,假设服务器承诺发送文件,但没有发送,会发生什么?
有没有明确的方法来解决这个问题?