gpt4 book ai didi

azure - Azure 函数 v1 的 Http 响应中不存在内容长度 header

转载 作者:行者123 更新时间:2023-12-03 05:39:49 25 4
gpt4 key购买 nike

我们有与 azure v1 (.NET Framework 4.7) 一起运行的 azure 函数。在http响应中,我们尝试设置内容长度,但它没有流向客户端。它将传输编码 header 的值设置为分块。让我们了解一下我们是如何设置它的。

var body = <some byte array data>
var response = new HttpResponseMessage();
response.Content = new ByteArrayContent(body);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentLength = body.Length;

我经历了一些online discussionAzure/azure-functions-host#3765他们在那里讨论了设置,

response.Headers.TransferEncoding.Add(TransferCodingHeaderValue.Parse("identity"))

不过好像没什么用。以前有人遇到过这样的问题吗?顺便说一句,当我在 azure function v2 (.NET Core 2.2) 上运行相同的代码时,它可以工作。

更新:我们可以使用wireshark通过数据包捕获看到传输编码 header 。 Wireshark screenshot depicting Transfer-Encoding header even if content-length is set through code

Update-2:本地运行的函数会发生这种情况。当我们在 azure 上发布该函数时,它确实提供了内容长度 header 。在本地,我猜它(v1)使用nodejs模拟器,这似乎有一些问题。无论如何,一旦我们找到任何解决方法,就会在这里更新。

最佳答案

如果传输编码设置为分块,则无法设置内容长度。渐进式渲染不需要 Transfer-Encoding: chunked。但是,当发送第一个字节之前总内容长度未知时,就需要它。

基本上,八位字节中内容长度的十进制值既代表实体长度又代表传输长度。如果存在某种传输编码,则这两个长度将不同,因此应忽略内容长度值。

我在函数 v1 中使用您的代码进行了测试,没有 Transfer-Encoding 它也工作得很好。

enter image description here

因此,如果您想设置特定的内容长度,您可以删除 Transfer-Encoding

关于azure - Azure 函数 v1 的 Http 响应中不存在内容长度 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59762586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com