问题标签 [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.

0 投票
2 回答
1180 浏览

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标题集合?

0 投票
1 回答
986 浏览

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

我已经阅读了 HTTP/2 规范和其他几个教程中关于 push-promise 的内容,并且有了一个概念。

我在这里读过为什么捆绑在未来几天不会那么重要。因此,如果我必须将 push promise 合并到应用程序中,那么理想的地方是哪里。是否应该在从 Action 方法重定向到视图之前?或者,在视图中的脚本中?据我搜索,我找不到任何例子。

请有人分享他们在真实代码中实现的经验。如果您必须同时支持这两种协议,这似乎是一种开销吗?

另外,如果我使用的是 IIS 10,那么我应该做任何配置更改来支持这两种协议吗?[据我所知,我们不必这样做。但总是更好地注意一些专家。]

0 投票
1 回答
331 浏览

netty - Netty HTTP/2 writePushPromise 使浏览器无限循环

我正在尝试使用 Netty 测试 HTTP/2 推送承诺,但似乎不起作用。用例很简单:

  1. 请求主页/索引页面
  2. 索引页面取决于一个index.js文件,所以我想发送PUSH_PROMISE一个index.js
  3. index为页面写入和刷新内容。

这是我所做的:

它成功地向PUSH_PROMISE浏览器发送了一个,但是/assets/index.js文件根本没有加载(浏览器无限期地等待响应)

这仅在我发送PUSH_PROMISE.

此处提供了完整的演示(它使用自签名证书,因此您必须接受不安全警告)

的源代码PUSH_PROMISE这里

难道我做错了什么?

谢谢。

0 投票
1 回答
790 浏览

asp.net - ASP.Net HTTP2 PushPromise 很慢

我正在尝试使用“PushPromise”.NET 4.6.1 实现 Http2 推送服务器功能,为此我有一个带有 Razor 的“html 扩展”(我们没有实现 MVC,只使用 Razor 引擎来构建页面)。

而在页面的<head>中:

我已经“不使用 PushPromise”(credimejorademo)托管了同一个项目,并且在另一个域中我实现了 PushPromise(aquituinmueble):

演示(credimejorademo) |  Demo2 (aquituinmueble)

https://www.webpagetest.org/video/compare.php?tests=170609_PD_e32f303e034aef3fef7140fef181a738,170609_FK_7d538ecdacf071cce320ad14bf97414c

0 投票
0 回答
370 浏览

apache - 在 Apache 中发送带有延续帧的服务器推送

我正在测试我的 HTTP/2 解析器,目前我无法继续测试推送承诺。我使用 Apache 作为 HTTP/2 服务器。我设法使用Location'sHeader add linkH2PushResource. 但是当我尝试继续检查推送承诺时,我无法修改推送请求中发送的标头。
我想为推送的请求添加一些长标题,但我发现的命令不会影响推送的请求:

  • RequestHeader在处理内容之前修改请求标头 - 这意味着标头在 Apache 的 HTTP 解析器中被修改,它不会影响发送的推送请求
  • 标头修改从服务器发送的响应标头 - 此命令将标头添加到响应,而不是请求

编辑:
我注意到user-agent在推送的请求中也发送了标头,因此我在请求中发送了一个非常长的用户代理标头,但随后我收到了 431 响应(请求标头字段太大)。
还有什么想法吗?

编辑 2: 这是我的 HTTP/2 配置行:

当我收到来自 Apache 的响应时,我得到了标头myrespheader,但推送的请求没有发送标头myreqheadermyrespheader

0 投票
0 回答
176 浏览

asp.net-mvc - Http2 PushPromise 访问被拒绝异常

嗨,我有以下代码用于为 Http2.0 客户端启用 PushPromise。

直到上周五,这一切都运行良好,之后我开始收到拒绝访问异常。

我们已经在 Azure App 服务上托管我们的网站一年多了!!

在此处输入图像描述

关于为什么一年后失败的任何想法?

0 投票
2 回答
220 浏览

http-headers - 浏览器是否检查 PUSH_PROMISE 帧内的条件标头?

我知道浏览器可以发送RST_STREAM-frames取消serverpush

Last-Modified在 中发送或Etag标头是否有意义PUSH_PROMISE?还是to-be-pushed仅基于资源的验证URI(正如两年前 Simone Bordet 对以下问题的回答)?

当资源在缓存中时,浏览器是否取消服务器推送?

我找不到这个问题的确切答案。

0 投票
1 回答
288 浏览

http2 - http2:PUSH_PROMISE 客户端流状态

http2 规范说:

接收者必须将在既不是“打开”也不是“半关闭(本地)”的流上接收到 PUSH_PROMISE 视为 PROTOCOL_ERROR 类型的连接错误(第 5.4.1 节)。但是,在相关流上发送 RST_STREAM 的端点必须处理可能在接收和处理 RST_STREAM 帧之前创建的 PUSH_PROMISE 帧。

规范也有这个生命周期图

我的理解是,为了让客户端PUSH_PROMISE在流上接收 a,客户端必须在该流上拥有所有这些:

  • HEADERS帧(+ any CONTINUATIONs)发送到服务器
  • 未收到END_STREAM来自服务器的标志
  • 未收到RST_STREAM来自服务器的帧

(这里值得注意的是“未将RST_STREAM帧发送到服务器”,这将导致流被“关闭”;上面的引用说这不是连接错误的理由。)

在不满足这些条件的任何情况下,客户端必须将接收到 PUSH_PROMISE 视为连接错误。

这是一个正确的理解吗?

0 投票
1 回答
1221 浏览

node.js - 使用 Nodejs pushStream 方法的服务器推送不起作用

我正在学习http2nodejs但发现一个问题pushStream方法不起作用

在此处输入图像描述 (客户端在开发者工具上不显示“Pushed/[fileName]”)

不知是不是nodejs版本的原因(我安装的是最新版本v9.8.0)

我的代码如下:

服务器.js

实用程序.js

2020 年 01 月 28 日更新

已解决:原因是chrome v65最新版本。有错误,导致客户端不信任PUSH_PROMISE框架。我备份了 chrome v64,然后它现在可以工作了。

0 投票
2 回答
996 浏览

http - HTTP/2 推送承诺行为

我正在为 HTTP/2 编写一个弹性客户端。我想知道客户端的行为应该是什么,如果服务器发送了一个 PUSH_PROMISE 然后未能发送与该 PUSH_PROMISE 相关的 PUSH_RESPONSE ?

我浏览了关于Push Response的 HTTP/2 规范,但它没有说明在这种情况下我们应该做什么。

  • 如果没有收到推送响应,我们是否应该再次发送原始请求?如果原始请求发送成功,再次发送可能会导致问题,不是吗?
  • 还是我们应该忽略 PUSH_PROMISE 并继续?在这种情况下,假设服务器承诺发送文件,但没有发送,会发生什么?

有没有明确的方法来解决这个问题?