问题标签 [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 投票
1 回答
13544 浏览

http - HTTP 管道和使用 SPDY 的 HTTP 多路复用之间的区别

感谢 Google 和 Stack Overflow,我想我理解了常规 HTTP 流水线和 HTTP 多路复用(例如,使用 SPDY)之间的区别,所以我制作了下图来展示基于三个常规 HTTP 请求的流水线和多路复用之间的区别。

在此处输入图像描述

我的两个问题是:

  1. 图像是否正确?
  2. 如果流水线没有线头阻塞问题,它是否会像 HTTP 多路复用一样快?还是我错过了额外的差异?
0 投票
1 回答
16407 浏览

http - 使用 HTTP 流水线有什么缺点?

WWDC 2012 session 706 - Networking Best Practices解释了HTTP Pipelining

  • 默认情况下,它在 iOS 上禁用
  • 在谈话中,它把它描述为一个巨大的性能胜利。

为什么您不想使用它?

流水线

0 投票
1 回答
728 浏览

php - 通过具有相同 IP 的 TOR 发出两个线性 cURL 请求

在回答我的问题之前 - 请注意,这与以下主题无关:

cURL:两个单独的请求,同一个会话

为 curl 请求选择传出 IP

PHP 多个 curl 请求

我在一个反验证系统中工作,另一个验证是相同的 IP 不能每小时执行 5 个请求,因为我使用的是 TOR。但我需要遵循这个顺序/流程:

  1. 访问启动 URL ( Example: http://server/start-session) - 获取验证码并使用验证令牌设置 cookie
  2. 提交验证码字符 ( Example: http://server/verify-captcha),带有令牌、会话 ID,并且我必须保留启动 URL 中的 IP

在每次请求后使用 TOR 我有一个新 IP,并且有一个服务器端验证在会话启动时设置我的 IP,换句话说,如果我的 IP 更改,即使我发送会话 ID 和正确的令牌,会话也被认为是无效的带有有效的验证码字符。

如何将我的 IP 与 TOR 保持 2 个连续请求?

0 投票
1 回答
488 浏览

http - 为什么Firefox中的流水线似乎不起作用?

为了验证使用http流水线可以优化加载资源的速度,我做了如下测试:

在 Mac 上打开 Firefox,在配置中将每个服务器的最大连接更改为 1,然后我打开一个加载 12 个图像的测试页面。我得到了下图:

在此处输入图像描述

浏览器一张一张地加载每张图片,加载 12 张图片大约需要 12 秒(我为每张图片添加 1 秒延迟)。

接下来,我在 Firefox 中打开流水线,并刷新页面。我得到了下图:

在此处输入图像描述

我可以看到根本没有阻塞。所有请求都是流水线的。我想加载的总时间会缩短,但不幸的是它与没有流水线的情况相同。所以我怀疑流水线似乎不起作用。

我想知道为什么以及如何解决它。我使用apache服务器。需要在 Apache 中进行任何配置吗?

0 投票
1 回答
4058 浏览

http - HTTP:流水线、keep-alive 和服务器发送事件之间的关系是什么?

我试图了解什么是 HTTP 管道和 HTTP 保持连接,并试图在这两个主题和服务器发送事件技术之间建立连接。

据我了解, HTTP keep-alive 连接是 HTTP 1.1 使用 TCP 的默认方式,当建立一次 TCP 连接用于一一发送多个 HTTP 请求时。 HTTP流水线是客户端向服务器发送请求的能力,而对先前请求的响应尚未使用相同的TCP连接接收,通常不用作浏览器中的默认方式。

我的问题:

1)如果可以使用一个 TCP 连接一个接一个地向服务器发送多个请求 - 客户端如何区分响应?我猜客户端正在使用服务器发送响应的 FIFO 顺序?

2)为什么不应该对诸如 POST 请求之类的非幂等请求进行流水线处理(根据维基百科)?

3) 网络服务器的限制是什么:可能打开的 TCP 连接数是否受到限制?如果是,那么如果一些客户端保持保持连接,其他客户端无法建立连接,这可能会导致问题,对吧?

4)服务器发送事件使用保持连接,但据我了解,SSE 没有使用流水线。相反,他们设法处理对一个请求的多个响应,或者他们可能只是在下一个带有事件的响应到达时发送另一个请求。哪个猜测是正确的?

5)一个TCP连接意味着一个套接字?一个套接字意味着一个 TCP 连接?关闭/打开套接字意味着关闭/打开 TCP 连接?

0 投票
1 回答
2215 浏览

http - HTTP 流水线 - 每个连接的并发响应

我刚刚阅读了这篇关于 HTTP 流水线的Wikipedia 文章,从图中可以看出,响应可以在一个连接上同时发送。我是误解了图表还是允许这样做?

RFC 2616 的第 8.1.2.2 节指出:

服务器必须以与接收请求相同的顺序发送对这些请求的响应。

虽然这没有明确排除并发响应,但它没有提到需要确保响应不仅必须以与请求相关的正确顺序开始,而且还必须以正确的顺序结束。

我也无法想象处理并发响应的实用性——客户端如何知道接收到的数据适用于哪个响应?

因此,我对 RFC 的解释是,虽然可以在处理对第一个请求的响应时发出其他请求,但不允许客户端发送并发请求或服务器在同一连接上发送并发响应。

它是否正确?我在下面附上了一张图表来说明我的解释。

它可以防止我提到的问题发生,但它似乎与维基百科中的图表并不完全一致。

HTTP 流水线

0 投票
2 回答
757 浏览

http - HTTP 服务器应用程序如何优雅地拒绝 HTTP Pipeline 请求?

是否有特定的(或商定的)HTTP 响应消息(或除断开连接之外的其他操作)来阐明服务器不接受流水线 HTTP 请求

我正在寻找可以让客户端停止流水线化它的请求,并分别发送每个请求的东西。

如果是这样,它是什么?谢谢!

0 投票
2 回答
343 浏览

asp-classic - ASP Classic 的 Httphandler?


ASP Classic中 是否有任何方法可以在HTTP 请求到达该页面之前捕获它?就像在 ASP.Net 中一样,我们可以在Application_BeginRequest处捕获请求。

实际上,如果从某个目录询问文件,我想要做的是将请求重定向到其他页面。我的应用程序托管在 IIS6 上。而且我认为默认情况下 IIS6 不支持 url 重写。目录浏览已被禁用。

如果可以将 web.config 放在该特定目录中以重定向到其他页面,那就太好了。

我用谷歌搜索,但到目前为止没有运气,任何线索将不胜感激。

0 投票
1 回答
1279 浏览

php - 如何使用 HTTP Pipelining 通过单个 TCP 套接字发送 PHP cURL 句柄?

我正在尝试使用 PHP cURL HTTP Pipelining 功能通过单个 TCP 连接执行多个请求。参考这个页面http://www.php.net/manual/en/function.curl-multi-setopt.php我通过添加为 curl_multi_exec() 启用管道:

curl_multi_setopt($mh, CURLMOPT_PIPELINING, 1);

我不想在这里发布一个大的源代码列表,但是您可以在我的 github 上轻松查看或签出完整示例https://github.com/anovikov1984/pipelining-example

为了监控 TCP 连接,我在另一个控制台会话中使用了“netstat -t -u -c”命令。

在我上面提到的我的回购中有两个脚本。一个用于 Ruby,一个用于 PHP。Ruby 版本按需要工作,只为 3 个 GET 请求打开单个 TCP 连接。但是 PHP cURL 版本打开的 TCP 连接数量与传递给 curl_multi_exec() 函数的 cURL 句柄数量一样多。

我究竟做错了什么?

0 投票
0 回答
220 浏览

python - scapy 是否支持 http 流水线?

我正在尝试编写一个使用 scapy 进行 http 流水线处理的脚本。当我调用我的发送函数来背靠背发送我的两个 http 请求时,请求不是流水线的。在收到第一个 http 响应后发送第二个 http 请求。

我所拥有的片段:

scapy 只是发送第二个请求太慢还是我做错了什么?