问题标签 [http-chunked]

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

swift - 如何在 Swift Vapor 中使用异步创建的主体块生成响应主体

我正在研究 Swift Vapor 框架。

我正在尝试创建一个控制器类,它将在 SSL 链接上获得的数据映射到第三方系统(Asterisk PBX 服务器..)到响应主体,该响应主体在一段时间内发送到客户端。

因此,我需要在接收到的文本行(在 SSL 连接上单独获得)进入时发送它们,而无需等待构建“完整响应”。

看到这个例子:

我想这可能是要走的路。

但是我看到连接到 Vapor 服务器的是 REST 调用等待循环完成,然后才收到三行作为结果。

如何在不先等待循环完成的情况下让 try chunker.send(name) 将其字符发送回客户端?

在实际代码中,控制器方法可能会长时间保持与客户端的 HTTP 连接打开,并在获得 Asterisk 活动数据后立即将其发送给客户端。所以每个 .send(name) 实际上应该立即将数据传递给客户端,而不是等待最终的 .close() 调用。

添加 try chunker.flush() 并没有产生更好的结果..

0 投票
1 回答
530 浏览

json - 为什么 POST 和 PUT 的 ReadAsAsync() 为空,但 ReadAsStringAsync() 已填充?又名“我如何关闭分块?”

我有一个 Web API 项目,它有几十个 RESTful 方法,在 GET、POST 和 PUT 之间平均分配。该系统使用来自 Nuget(版本 9.0.1)的实体框架对象和 Newtonsoft 的 JSON。

我最近做的事情突然破坏了所有的 POST 和 PUT。我发现我正在 POST/PUTting 的 [FromBody] 对象作为空值到达。

所以我的“更新用户”方法看起来像这样......

...但是“用户”总是到达空值。同样,如果我这样做...

...然后 obj 为空。

但如果我这样做...

...然后我得到了预期的 JSON。(但对于我的架构,我不想要 JSON,我想要对象。)

据我了解,如果某些内容已经阅读了 Request.Content,这是我所期望的那种行为。内容流不可回退,并设置为最后一个字节;但是 .ReadAsStringAsync() 和 .ReadAsByteArrayAsync() 通过(我认为)复制流并自己处理来解决这个问题。

我使用 HttpClient 从 WPF 应用程序调用它。样品调用...

我的“API.GetHttpClient()”例程看起来像这样。您可以看到我正在使用 DelegateHandler 在客户端做一些 JWT 工作,但我认为这与这里无关;它不会触及传出请求,只会触及传入响应。

我已经确认传入的请求是“应用程序/json”和 UTF-8 的内容类型。

我在 Web 服务器上有两个 DelegatingHandler,但它们似乎不是问题,因为当我在第一个的最顶部执行 ReadAsAsync() 时,它也是空的;ReadAsStringAsync() 返回 JSON。

所以......我做错了什么?再一次,这很好用,并且发生了一些变化,我所有的 POST 和 PUT 都以这种方式中断了。

我看到一些链接说要从我的类中删除 [Serializable] ——但这些是我在很多地方使用的实体框架类,我不想这样做。

最后...当我通过 Postman 调用此 Update PUT 时,它可以工作。

更新
比较来自我自己的客户端和 Postman 的 HttpRequest,我发现前者是“分块的”,而后者不是。这似乎是一个重要的线索。我看到其他一些人也在处理同样的问题:

ASP.NET Web Api - 使用分块传输编码时,框架未将 JSON 转换为对象

我找不到任何关于如何关闭分块的明确指示。我确实看到有一个属性可以关闭分块,但这样做并没有帮助。

问题:是什么触发了块的“选择”?是客户选择这样做,还是控制器,还是两者之间的某种协商?

0 投票
1 回答
646 浏览

c# - 为什么我不能阻止我的 HttpRequest 从 WPF 客户端到 Web API 控制器的分块?

我已经为此奋斗了一个星期。有关其他背景信息,请参阅我之前的问题。

我的WPF客户对我的 Web API 控制器进行GETPOST调用PUT。几周来一切都很好。然后突然之间,我所有的 PUT 和 POST 调用都分块进入。我找不到任何阻止它的方法。我强烈怀疑我做了一个影响一切的核心更改,但我已经筋疲力尽地试图找到它。我回顾了源代码控制并恢复了旧代码,但它只是拒绝工作。

我知道“request.Headers.TransferEncodingChunked”,它没有效果。我可以在我的客户端中明确地将其设置为nullfalse,并且它总是以true的形式出现在我的下面的例程中。

我的 PUT/POST 控制器方法遵循此模型。对我来说,结果是我的传入对象(此处为“用户”)作为空值到达。但是,如果我.ReadAsStringAsync()对请求执行操作,我会得到完全预期的 JSON。但我不想围绕这种不直观的模式重新设计这个应用程序。爆破的物体应该未分块到达并准备好工作!

“用户”对象是一个实体框架对象,并且不起眼。简单的字符串、日期时间和数字属性。

同样,同样令人愤怒的是,我可以将 request.Headers.AcceptEncoding 设置为null并且它以Accept-Encoding: gzip, deflate 的形式到达我的控制器。

一些描述相同问题和症状的链接:

0 投票
1 回答
50 浏览

http - 没有压缩传输编码的微型 Web 服务器

我正在开发具有 TCP 支持的非常受限的设备,我想支持 HTTP/1.1,但消除所有压缩支持以使其符合设备限制。

如果客户端发送压缩传输编码,服务器应该返回哪个 HTTP 响应状态来表明它只接受非压缩块?

0 投票
2 回答
23921 浏览

python - Python 请求 - ChunkedEncodingError(e) - requests.iter_lines

我收到了一个ChunkedEncodingError(e)使用 Python 的请求。我正在使用以下内容来破坏 JSON:

并且迭代每一行,使用回车作为分隔符,这就是这个 API 区分不同 JSON 事件的方式。

我在回车上划定界限,然后将其添加回端点,我将日志推送到实际上也期望在每个事件结束时有回车。这似乎适用于大约 100k 的日志文件。当我尝试拨打更大的电话时,我会收到以下信息:

更新:我发现 APINoneType在某个时候也会发回 a 。那么,我如何才能在响应中的某处解释这个空字节而不把所有东西都炸毁呢?每个单独的事件都以 结束\n,我需要能够单独检查每个事件。我应该分块内容而不是iter_lines?然后确保NoneType块中没有?这样我就不会尝试iter_lines超过 aNoneType并且它会爆炸?

0 投票
1 回答
740 浏览

javascript - 上传分块图像文件问题

我正在使用ng-file-upload指令将图像从我的 Angular 应用程序发送到服务器。这是我的代码:

图像正在分块传输。但现在,我被打动了。我不知道如何接收这些块并合并以创建完整图像。我的服务器代码如下:

每次,我都会收到一个块请求,req.on('end', ...)触发器。我是新手,在这里很困惑。

0 投票
1 回答
430 浏览

c - 分块传输编码 - 页面显示不正确

我的任务是实现简单的 HTTP 服务器。当我发送响应时,我应该支持分块传输编码。这是我向客户端发送响应的函数。

CHUNK_SIZE定义为 1024 因为我想发送 1KB 大小的块。当我打开页面时出现问题enter image description here 页面显示不正确。我还设置了 Transfer-Encoding: chunked

ENCODING 被定义为“Transfer-Encoding: chunked\r\n”

0 投票
0 回答
1411 浏览

c - ERR_INVALID_CHUNKED_ENCODING 用于 HTTP 服务器的分块传输编码

我的任务是使用分块传输编码实现简单的 HTTP 服务器。这是读取请求并向客户端发送响应的函数。

当我尝试使用我的服务器打开简单站点时,出现错误:ERR_INVALID_CHUNKED_ENCODING。所以我希望你能帮助我找到问题。

0 投票
1 回答
969 浏览

http - 分块的 HTTP 请求

我尝试在带有 mbedOS 的 ODIN-W2 上使用分块 http 请求。我有下一个 http 请求/响应:

我使用 mbedOS 的标准 HTTP 库。

0 投票
1 回答
659 浏览

c# - 在http-context响应C#中分块下载文件

我有以下情况。

客户端向服务器 1 发送文件下载请求 服务器 1 向服务器 2 发送文件请求。

为了完成这项工作,我需要创建一种机制,一旦客户端向 Server-1 发送请求,Server-1 将向 Server-2 请求,Server-2 将文件作为响应输出流以块的形式发送。服务器 1 将不断地从服务器 2 接收此文件块到客户端浏览器。

我已经完成了如下代码,理论上它看起来不错,但仍然无法正常工作。它没有在客户端浏览器中下载整个文件,似乎最后一个块没有传输到 Server-1 或者它没有从 Server-1 下载到客户端浏览器

Server-1 代码(客户端请求文件下载的地方)

Server-2 代码(Server-1 将发送文件请求的位置)

请帮我解决这个问题。