问题标签 [http-pipelining]

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 回答
2631 浏览

python - 使用 python-requests 流水线化 POST 请求

假设我可以验证一堆POST请求实际上在逻辑上是独立的,我如何设置 HTTP 管道使用python-requests并强制它允许POST管道中的请求?

有人有一个工作的例子吗?

PS加分,如果管道突然中断,如何处理未完成请求的错误?

在这种情况下, PPSgrequests不是一个选项。

0 投票
0 回答
521 浏览

node.js - Node.js 流水线 HTTP 客户端代理?

Node.js 中内置的 HTTP 客户端似乎不支持流水线请求。但是,我想到可以创建一个在后台设置流水线的代理。以应有的方式获取响应数据可能会出现问题,但也许代理可以伪造一些套接字对象以使 HTTP 客户端正常工作?

这已经完成了吗?或者,是否有替代 HTTP 客户端可以替代支持流水线的主要客户端?(最终,我想将它与 AWS 开发工具包一起使用,因此它需要兼容。)

0 投票
2 回答
8763 浏览

google-chrome - 为什么在现代浏览器中禁用流水线?

许多(如果不是所有)现代浏览器都没有使用流水线 HTTP 请求。理论上,流水线应该通过减少获取网站所需的往返次数来加速请求。

根据 HTTP 标准,所有服务器都必须处理流水线请求,所以问题不应该在于服务器缺乏支持。

我已经看到了一些安全问题,例如第 7 层 DoS 攻击,如果客户端将尽可能多的流水线请求推送到服务器性能密集型 URL,而忽略可能收到的任何答案。

这将是在服务器上关闭流水线支持的原因(违反标准),但我找不到任何理由在客户端上关闭它。

但是,默认情况下它在 Android 浏览器和 Chrome 移动设备上处于打开状态。

为什么 Chrome、Firefox、IE、Opera 和 Safari 不在其桌面(有时是移动)版本中使用流水线 HTTP 请求?他们关闭它的原因是什么?

0 投票
0 回答
133 浏览

nsmutableurlrequest - NSMutableURLRequest 流水线混淆

我想从同一个 HTTP 服务器下载很多图像,所以我想在同一个 TCP 连接上完成所有这些工作。我所能找到的只是NSMutableURLRequest允许我启用流水线(HTTPShouldUsePipelining),但我不明白当我启用流水线时它如何知道要一起发送哪些请求。

我试过了,根据 Wireshark 的说法,这两个请求和响应位于不同的 TCP 流上,所以看起来它实际上并不是在流水线化请求:

我还在我自己的本地 Nginx 服务器上进行了尝试,以防万一 Strabo.com 不支持流水线。

此外,SDWebImageDownloader我注意到,不知何故使用了 HTTP 流水线。我看到多个请求在同一个 TCP 流中发送。但是,它不会将所有这些都发送到同一个流上,我想这样做,所以我一直在尝试实现一个自定义下载器。

0 投票
1 回答
803 浏览

http - 保持活动连接中的 HTTP 客户端请求超时处理

关于 HTTP keep-alive 如何在客户端处理请求超时?例如有一个流程:

  • 客户端发送Request1;
  • 客户端等待 1 分钟;
  • 客户端假设Request1失败,重新发送,即发送new Request2 = Request1;
  • 服务器响应 Response1(这是对 Request1 的响应);
  • 客户端假设这是对 Request2 的响应,但可以处理它,因为 Request1 = Request2;
  • 客户端发送Request3;
  • 服务器以 Response2 响应(这是对 Request2 的响应);
  • 客户端假定这是对 Request3 的响应,但未能处理它。

我在规范中找不到任何信息。它说明了如果连接被服务器关闭时如何重试,但没有说明请求花费太长时间才能继续的情况。

0 投票
2 回答
1573 浏览

servicestack - HttpClient 将 HTTP GET 请求流水线化到 ServiceStack API

首先,我将 ServiceStack 作为提供 RESTful HTTP API 的服务器。

这是一个例子。

然后我用System.Net.Http.HttpClient它来访问它。正如这里所说, HttpClient它的大多数方法都是线程安全的,通过同一 TCP 连接发送 HTTP GET 请求。

所以我有一个 HttpClient 的单例实例,如下所示

然后我使用以下测试代码在先前的响应之后发送请求

smart sniffer中,我确实看到请求是在一个连接中发送的,它就像:

现在我将代码更改为即发即弃模式,如下所示。

这样请求就可以在不等待之前的响应的情况下发送,我希望请求和响应如下所示

这是HTTP 管道,性能非常好。

在此处输入图像描述

但是从我的测试中,我看到每个 HTTP GET 请求都建立了 3 个连接,但它没有按我的预期工作。

关于AllowPipelining财产,MSDN

应用程序使用 AllowPipelining 属性来指示管道连接的首选项。当 AllowPipelining 为真时,应用程序与支持它们的服务器建立管道连接。

那么,我想HttpClient是否支持流水线,问题出在 ServiceStack 中?ServiceStack 中是否有一些选项可以启用 HTTP 流水线?

0 投票
2 回答
551 浏览

rx-java - Observable ZIP 运算符在使用 vertx http 客户端时挂起

我所做的:

我正在使用 vertx rx http 客户端执行大量 HTTP 请求。在这种特定情况下,我调用“方法 A”,它返回一个 ID 列表。要接收我需要多次调用方法 A 以获得下一批结果的所有 ID。(每次我指定一个不同的页码我想接收)

为了提高性能并尽可能并行调用,我创建了一个 (RxJava) Observables 项目列表,每个项目代表单个页面请求的结果。当我完成创建此列表时,我调用 Obserable.zip 运算符并传递 observable 列表。

问题:

使用没有特殊设置的 vertx http 客户端一切正常,但速度非常慢。例如,5 分钟内处理了 3000 个 http 请求。

我尝试通过设置 vertx http 客户端选项来提高性能,如下所示:

但是当我这样做时,我会得到不稳定的结果:有时一切正常,我能够在不到 20 秒的时间内收到所有响应。但是,有时我都调用的外部服务器会关闭连接,并且日志显示以下错误:

  • 我的代码中没有错误处理程序被调用
  • 当出现此错误时,zip 运算符挂起

这是创建 HttpClientRequest 的代码

呸呸呸

0 投票
1 回答
1179 浏览

akka-http - Akka HTTP 源流与常规请求处理

使用Source Streaming与处理请求的常规方式相比有什么优势 ?我的理解是在这两种情况下

  1. TCP 连接将被重用
  2. 客户端和服务器之间将施加背压

我可以看到源流的唯一优点是如果响应非常大并且客户端更喜欢以较小的块使用它。

我的用例是我有一个很长的用户列表(数百万),我需要调用一个对用户执行一些过滤并返回一个子集的服务。

目前,在服务器端我公开了一个批处理 API,在客户端,我只是将用户分成 1000 个块,并使用 Akka HTTP Host API 并行进行 X 批处理调用。

我正在考虑切换到 HTTP 流,但不能完全弄清楚价值是什么

0 投票
1 回答
765 浏览

http - Netty HTTP 1.1 流水线支持

我需要通过同一个连接向休息服务器发送多个异步请求,并让它们以 FIFO 顺序执行,我认为 HTTP 1.1 流水线非常适合这个。

我在Netty上发现了一些相关问题,但我在他们的用户指南上找不到太多,在他们的测试用例上也没有。

Netty 是否支持 HTTP 1.1 流水线?那将如何实施?

一个例子将不胜感激。

相关的未回答问题:HTTP 1.1 流水线与 HTTP 2 多路复用

0 投票
1 回答
541 浏览

ajax - 批处理 AJAX 请求到 REST 端点

我想将许多 GET 请求发送到 REST 端点(用 ArcGIS 实现),并更改参数,例如:

除了遍历 for 循环并发送那么多 AJAX 请求,是否可以向 API 发送批处理请求或进行一些管道传输?