在获得响应之前发出多个请求

2024-05-03

当并行发送多个请求时(在获得响应之前),我无法理解 HTTP 的工作原理。有两种情况:

1) With Connection: Keep-Alive.

根据HTTP规范 http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html:

支持持久连接的客户端可以“管道”其 请求(即发送多个请求而不等待每个请求 回复)。服务器必须将其响应发送到 收到请求的顺序相同。

这种方式似乎很难实施和维护。服务器必须跟踪请求的顺序并必须以正确的顺序响应。它不仅可能不容易实现,而且会对性能造成影响:如果稍后发出快速请求,则必须等到慢速请求得到处理。

此外,如果我们谈论负载均衡器,那么代理必须跟踪哪个请求发送到哪个服务器,以便当它们返回时,它可以将它们放入队列并按顺序响应。那么为什么不首先这样做呢? IE。客户提出的听起来更自然、更容易(例如)IDheader,服务器处理请求并用相同的响应IDheader 以便客户端可以将请求与响应进行匹配。这更容易实现,并且不会引入排队请求的问题(如果有必要,由客户端来跟踪请求的顺序)。

所以问题是:以指定方式指定管道的原因是什么?

2) 没有Connection: Keep-Alive.

我找不到有关该案件的任何信息。假设客户端发出两个请求 A 和 B。如果没有 keep-alive,服务器将在处理完请求后关闭连接。这显然引入了竞争条件。那么它应该如何表现呢?它应该放弃第二个请求吗?


1) 保持活动状态:

根据这篇维基百科文章(http://en.wikipedia.org/wiki/HTTP_pipelined http://en.wikipedia.org/wiki/HTTP_pipelining)恰恰相反:服务器端的实现实际上非常简单。我相信这个断言是基于这样的假设:单个线程用于处理单个连接的所有请求(这当然是设计此机制时的一般情况),因此同一连接上的多个请求由该线程顺序处理(并且由于 TCP 保证有序传送,因此自然会按照处理它们的顺序接收响应)。今天在非阻塞服务器实现上可能会有所不同。

2)没有保活:

如果没有保持活动状态,您就不会管道请求,因此我看不到竞争条件。您有两个单独的连接用于请求 A 和 B,每个连接在请求完成后关闭。

如果客户端尝试在没有保持活动状态的情况下管道请求,我相信规范的以下部分适用:

立即采用持久连接和管道的客户端 连接建立后应该准备重试 如果第一次管道尝试失败,则连接。如果客户这样做 重试,在知道连接已建立之前不得进行管道传输 执着的。客户还必须准备好重新发送请求,如果 服务器关闭连接在发送所有之前 相应的回应。

我的解释是服务器必须合法地丢弃第二个请求并只响应第一个请求,因为响应是 FIFO 的。由客户端重新发送第二个请求。

请记住:这主要是我的假设,我希望它们对您有意义!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在获得响应之前发出多个请求 的相关文章

  • 从开放的 HTTP 流中读取数据

    我正在尝试使用 NET WebRequest WebResponse 类来访问 Twitter 流 API 此处 http stream twitter com spritzer json 我需要能够打开连接并从打开的连接中增量读取数据 目
  • 属性错误:未找到下层;在 scikit-learn 中使用带有 CountVectorizer 的 Pipeline

    我有一个这样的语料库 X train this is an dummy example in reality this line is very long here is a last text in the training set 和一
  • 有人成功用 Robolectric 模拟 HttpRequests 吗?

    我刚刚开始使用 Robolectric 模拟大多数 Android 类似乎工作正常 但是当我的测试类尝试创建 DefaultHttpClient 时 它会收到可怕的 Stub 错误 被测试的类在这一行失败 HttpClient httpcl
  • 对过期会话进行休息调用:HTTP 401 响应导致浏览器显示登录窗口

    我编写了一个 HTML 5 应用程序 它使用 AngularJS 并与在 Tomcat 上运行的 Java REST 后端进行交互 我使用 Spring Security 来处理登录和安全性 当用户进入网站时 他将被转发到登录页面 该页面创
  • PHP 是否有与 Java 的 RequestDispatcher.forward 等效的功能?

    在 Java 中我可以编写一个非常基本的 JSPindex jsp像这样 这样做的效果是用户请求index jsp 或者只是包含目录 假设index jsp是目录的默认文档 将会看到home action没有浏览器重定向 即 forward
  • 如何使用 node.js 请求模块使用我自己的证书进行 SSL 调用?

    我正在使用 node js 和此请求模块对另一台服务器进行 HTTP 调用 https github com mikeal request https github com mikeal request 效果很好 我现在需要修改此代码以使用
  • 通过 HTTPS 加载页面但请求不安全的 XMLHttpRequest 端点

    我有一个页面 上面有一些 D3 javascript 该页面位于 HTTPS 网站内 但证书是自签名的 当我加载页面时 我的 D3 可视化效果不显示 并且出现错误 混合内容 页面位于 https integration jsite com
  • 按照约定应返回哪些 REST PUT/POST/DELETE 调用?

    根据 REST 意识形态 PUT POST DELETE 请求的响应正文中应该包含什么 返回码呢 是HTTP OK enough 如果有的话 这种约定的原因是什么 我发现了一篇描述 POST PUT 差异的好文章 发布与放置 http ww
  • 我应该使用多个 HttpClient 来进行批量异步 GET 请求吗?

    我有一个场景 我需要在尽可能短的时间内发出大量 GET 请求 想想大约 1000 个 我知道通常最好保留一个客户端并尽可能重用它 Create Single HTTP Client HttpClient client new HttpCli
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 404 标头 - HTTP 1.0 还是 1.1?

    为什么我能找到的几乎每个例子 包括这个问题 https stackoverflow com questions 437256 sending a 404 error in php大约一年前 说 404 标头应该是HTTP 1 0 404 N
  • 如何转义角度 HttpParams?

    在 Angular 服务中 我使用 HttpParams 将字符串发送到服务 get phone string Observable
  • JS 库请求的常见 HTTP 标头是什么?

    使用JavaScript 框架原型 http www prototypejs org 我注意到 Ajax 请求通过一个名为X Requested With 其他 JavaScript 库 如 jQuery dojo 和 YUI 是否会向其
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • 用 C++ 解析 HTTP 标头

    我正在使用curl 与服务器通信 当我发出数据请求时 我收到 HTTP 标头 后跟由边界分隔的 jpeg 数据 如下所示 我需要解析出 边界字符串 内容长度 我已将传入数据复制到 char 数组 如下所示 static size t OnR
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 从手机访问本地主机[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • Angular 2 - Http - 正确忽略空结果

    我有很多处理请求并简单返回 200 的 REST 端点 我注意到将结果映射为错误json 如果我尝试不进行任何类型的映射 我会看到浏览器警告它无法解析 XML 由于不返回任何内容是很常见的 我很好奇我应该如何处理响应 这是一个基本的代码示例

随机推荐

  • 为什么使用牛顿法的 FindMaximum 会抱怨找不到足够的函数减少?

    首先 这看起来 来自 ContourPlot 是一个相当简单的最大化问题 为什么使用牛顿法的 FindMaximum 会出现问题 其次 如何摆脱警告 第三 如果我无法摆脱这些警告 我如何判断警告是否有意义 即最大化失败 例如 在下面的代码中
  • “System.Composition.TypedParts.dll”在哪里?

    我正在尝试使用容器配置来自托管扩展性框架 MEF 的类型 根据here http msdn microsoft com en us library system composition hosting containerconfigurat
  • 尝试将 nil 与数字堆栈回溯进行比较?

    我正在通过以下链接玩 Lua https www lua org pil 4 2 html https www lua org pil 4 2 html并对某一点感到困惑 Lua 5 2 4 Copyright C 1994 2015 Lu
  • 我在统一复制门时遇到问题

    我正在尝试统一复制我的门 但是 当我尝试这样做时 只有原来的门正在执行打开和关闭等动画 我有一个 UI 按钮 它使用 OnClick 函数来操作门 当我输入触发器时它会弹出 这是带有OnClick功能的按钮UI https i stack
  • iReport:如何隐藏带有文本字段的行,而没有数据行包含不同类型的数据

    我有空文本字段 它包含字符串或大十进制值 放在为我的报告拉出的单行上 该行显示一个空行 为了删除具有空行的空白行 我使用了该属性isRemoveLineWhenBlank对于该行中的报表元素 但这是行不通的 有人可以帮我解决这个问题吗 sn
  • usort 不适用于 laravel 多维数组

    我有一个数组 Illuminate Support Collection Object items protected gt Array 0 gt stdClass Object id gt 79 name gt shelin status
  • 我可以实施对半取偶吗?

    我需要去做四舍五入到偶数 https en wikipedia org wiki Rounding Round half to even在浮子上 即 如果该值是两个整数之间的中间值 打破平局 y 的小数部分正好是 0 5 则四舍五入到最接近
  • 如何在 Android 4.1+ 上将自签名 SSL 证书导入到 Volley

    我开发的android应用程序使用Volley 所有通信均通过HTTPS联系 因为我是在本地环境测试的 所以我对Tomcat使用自签名证书 之前我只有安卓2 3 and 3 0设备 现在我也有了4 1和4 4 我的实现使用这种方法 http
  • 如果 gem 安装不支持,本机扩展会回退到纯 Ruby

    我正在开发一个 gem 目前是纯 Ruby 但我也一直在为其中一个功能开发更快的 C 变体 该功能在纯 Ruby 中可用 但有时很慢 这种缓慢只会影响一些潜在用户 取决于他们需要哪些功能 以及他们如何使用这些功能 因此 如果 gem 无法在
  • 是否可以在纯 Rust 宏中编写像“print!”这样复杂的东西?

    我开始学习 Rust 宏 但文档有些有限 这很好 我想它们是一个专家功能 虽然我可以进行基本的代码生成 特征的实现等 但一些内置宏似乎远远超出了这些 例如各种打印宏 它们检查字符串文字并将其用于代码扩展 我在看的来源print https
  • 如何在 microk8s 中使用本地 docker 镜像?

    我一直在使用 minikube 在本地测试 Kubernetes 在 minikube 中 我们可以使用本地 docker 镜像eval minikube docker env 命令 我开始探索microk8s 在我运行 Ubuntu 18
  • 如何在 netsuite 中使用 suitescript 2.0 显示自定义错误消息而不使用堆栈跟踪

    我想使用 suitescript 2 0 版本向用户显示没有堆栈跟踪的自定义错误消息 在工作流程中 自定义错误消息在没有堆栈跟踪的情况下显示 但在套件脚本中 错误消息 与堆栈跟踪一起显示 堆栈跟踪错误 type error SuiteScr
  • 一起使用@Scheduled 和@Async 吗?

    如果我想要一个重复异步的方法 我可以一起使用 Scheduled 和 Async 吗 Async Scheduled fixedDelay x public void doSomethingEveryXMinuteAsync action
  • 如何将CSS应用于iframe内容? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我无法让 CSS 生成的内容发挥作用
  • Google 文件系统中的块大小问题

    谷歌文件系统论文 http labs google com papers gfs html 块大小是关键设计之一 参数 我们选择了64MB 这比典型文件大得多 系统块大小 每个块 副本存储为普通 Linux 文件放在 chunkserver
  • 如何将data_files安装到绝对路径?

    我使用 pip 和 setuptools 来安装软件包 我希望 pip 将一些资源文件复制到 例如 etc my package My setup py看起来像这样 setup data files etc my package confi
  • 在flutter中动态显示数据表布局中的JSON数据

    我正在 flutter 中创建动态数据表视图 其中列标题和行值是动态添加的 数据是一个 Json 响应 标题是一个字符串数组 行中要显示的数据也是一个字符串数组 目标是在表视图中显示数据 而不需要任何硬编码值 这就是我尝试显示数据的方法 r
  • Firebase - 将对象推送到嵌套的对象列表中

    Firebase 将对象推送到嵌套的对象列表中 目前的尝试 this application userUid this uid this application companyUid job uid this application job
  • 配置 Jersey + Jetty + JSP

    我如何配置该项目以便它能够呈现 JSP 文件 我希望以 rest 开头的 URL 路由到球衣资源 并让 URLS 提供 JSP 文件 我这个项目中没有任何 web xml 项目文件夹 src main java Main java reso
  • 在获得响应之前发出多个请求

    当并行发送多个请求时 在获得响应之前 我无法理解 HTTP 的工作原理 有两种情况 1 With Connection Keep Alive 根据HTTP规范 http www w3 org Protocols rfc2616 rfc261