标签: chunked-encoding

在 ASP.NET 中读取分块传输编码的 http 请求的正文

J2ME 客户端使用分块传输编码发送 HTTP POST 请求。

当 ASP.NET(在 IIS6 和 WebDev.exe.server 中)尝试读取请求时,它会将 Content-Length 设置为 0。我想这没问题,因为加载请求时 Content-length 是未知的。

但是,当我将 Request.InputStream 读到最后时,它返回 0。

这是我用来读取输入流的代码。

using (var reader = new StreamReader(httpRequestBodyStream, BodyTextEncoding)) {
    string readString = reader.ReadToEnd();
    Console.WriteLine("CharSize:" + readString.Length);
    return BodyTextEncoding.GetBytes(readString);
}
Run Code Online (Sandbox Code Playgroud)

我可以用 Fiddler 模拟客户端的行为,例如

网址 http://localhost:15148/page.aspx

标头: 用户代理:Fiddler 传输编码:分块主机:somesite.com:15148

兔兔兔兔。谢谢光临,很有用!

我从上面的身体阅读器将返回一个零长度字节数组......跛脚......

有谁知道如何在 IIS 和 ASP.NET 开发服务器 (cassini) 上启用分块编码?

我为 IIS找到了这个脚本,但它不起作用。

asp.net asp.net-mvc chunked-encoding

5
推荐指数
1
解决办法
4126
查看次数

IIS7拒绝分块编码的文件上传

我有一个Windows/Apache2/PHP应用程序,使用分块编码接收文件.原因是上传的文件是动态的,并且在传输之前它的长度是未知的.这一直都很好用.

现在我需要将应用程序移植到IIS7/PHP.问题是IIS无法接收分块文件:上传文件时,服务器根本没有响应.我该如何解决这个问题?

请注意,在我的测试中,我甚至不使用PHP.我只是有一个.php扩展名,因为IIS拒绝.htm文件上的POST(这是有意义的).

正如rupello在这个答案中所建议的那样,我用cURL进行了测试,以确保我的客户端没有被破坏.cURL也没有得到答案,尽管如果转移没有分块,一切正常.

我做了以下测试:

test.php的:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
  </head>
  <body>
    <form method="post" enctype="multipart/form-data">
      File: <input type="file" name="upfile" />
      <input type="submit" value="go"/>
  </form>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

此命令不返回(等待答案卡住)

curl.exe http://serveur/test.php --form "upfile=@text.txt" 
   -H "Transfer-Encoding: chunked" -H "Expect:"
Run Code Online (Sandbox Code Playgroud)

注意:-H "Expect:"是压制Expect 100-Continuecurl发出的.没有这个标题的结果是相同的,execpt当然是额外的往返.发送:

POST http://serveur/test.php HTTP/1.1
User-Agent: curl/7.15.3 (i586-pc-mingw32msvc) libcurl/7.15.3 zlib/1.2.2
Host: serveur
Pragma: no-cache
Accept: */*
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------310dbcc6761b

8c
------------------------------310dbcc6761b
Content-Disposition: form-data; name="upfile"; filename="text.txt"
Content-Type: text/plain


5
hello …
Run Code Online (Sandbox Code Playgroud)

php iis iis-7 chunked-encoding

5
推荐指数
1
解决办法
4614
查看次数

HTTP 内容长度和分块传输编码。有2GB限制吗?

现代网络服务器是否支持Content-Length 超过 2GB4GB的HTTP ?

HTTP分块传输编码中的块怎么样?单个 HTTP 块的长度可以超过2GB吗?

我需要知道在我的代码中使用32-bit integersor 64-bit integers

http http-content-length chunked-encoding http-chunked

5
推荐指数
1
解决办法
8984
查看次数

在 Tomcat 响应中强制进行分块编码

我正在将客户的应用程序迁移到 Tomcat 6。在测试过程中,我们发现他们的一些客户希望响应始终被分块,即传输编码:分块。但是,Tomcat 并不总是使用分块编码,有时会使用 Content-Length,我认为是因为响应大小足够小,以至于它在发送标头时知道整个长度。

我已经看到了大量有关如何禁用分块编码的问题/答案,但我遇到了相反的问题。我知道在每个响应中强制分块编码并不理想,并且客户端应该与 http1.1 规范完全兼容并接受任一编码,但我只是想找出是否有任何简单的配置可以执行所需的行为。

我单独使用 Tomcat 和标准 http 连接器。我查看了连接器属性并尝试了 bufferSize 和 socketBuffer,但没有成功。

我能做些什么来强制分块响应吗?

tomcat6 chunked-encoding

5
推荐指数
1
解决办法
2200
查看次数

Django 返回 http 早期刷新(分块响应)

我有一个算法,它等待近 5 秒来生成响应,我想在用户发送请求后立即向用户发送一个 ack(http 200),告诉他他的请求已收到并等待 5 秒。

发电机功能:

def chunked_res():
    yield "Chunk 1"

    stop = time.time() + 5    # wait for 5 seconds
    while time.time() < stop:
        pass

    yield "Chunk 2"
Run Code Online (Sandbox Code Playgroud)

在某些方面:

response = HttpResponse ( chunked_res() )
response['Connection'] = 'close'
response['Transfer-Encoding'] = 'chunked'
response['status'] = 200
return response
Run Code Online (Sandbox Code Playgroud)

浏览器中的响应:

"传输编码:分块\n状态:200\n连接:关闭\n内容类型:文本/html;字符集=utf-8\n\nChunk 1Chunk 2"

问题: 我得到了要求的响应(Chunk 1,Chunk 2),但在 5 秒后。我想先发送“Chunk 1”,然后在 5 秒后发送“Chunk 2”(更新响应)。是否有任何特定的设置/更改来实现这一点?

更新:

Django = 1.4 蟒蛇 = 2.7

python django http chunked-encoding http-chunked

5
推荐指数
1
解决办法
4223
查看次数

分块传输编码:如何使内容无效

我需要使用分块传输编码,并且我正在处理生成内容期间可能出现的错误问题。如果在处理我发送的内容过程中发生一些错误,我需要使已经发送的(部分)内容无效。在IE10 中,我能够强制浏览器使用尾随标题执行此操作

Refresh: 0; url=http://
Run Code Online (Sandbox Code Playgroud)

但在Chrome 中,我找不到任何解决方案,因为此浏览器中似乎未实现尾随标头

我有哪些选择?如何通知浏览器和/或用户下载的文件无效(因此不应打开或保存)?

browser google-chrome http chunked-encoding http-headers

5
推荐指数
0
解决办法
518
查看次数

如何告诉 HTTP 服务器不发送分块编码

我目前正在编写一个 HTTP 客户端来对返回 HTTP 响应的 URL 执行 HTTP POST。

但是,对于错误消息代码 400 和 500,它发送回非分块 HTTP 响应,对于成功消息 201,它发送分块响应。

在请求中,我设置了内容长度,所以我不确定为什么它仍然向我们发送分块传输编码。我可以在请求中设置任何其他标头,它会告诉 HTTP 服务器不要发送分块编码吗?

        headerList.append("POST /v2/charges HTTP/1.1")
        headerList.append("Content-Type: application/json")
        headerList.append("host: xxxxxxxxx")
        headerList.append("request-id: ABCD001123")
        headerList.append("Content-length: %d" %len(Msg))
        hostReqHeader = "\r\n".join(headerList)
        reqData = hostReqHeader + '\r\n\r\n' + qbPosMsg
Run Code Online (Sandbox Code Playgroud)

我使用套接字来发送这些 HTTP 消息,而不是使用 httplib 或请求库。

python http chunked-encoding http-headers

5
推荐指数
2
解决办法
4881
查看次数

为什么有些服务器在最后一个块长度为零后不使用 CRLF?

我正在使用 HTTP 请求工具(类似于 cURL)并且遇到服务器响应问题。或者我对 HTTP 1.1 和分块数据的 RFC 的理解。

我所看到的是分块数据应采用以下格式:

4\r\n
Wiki\r\n
5\r\n
pedia\r\n
e\r\n
 in\r\n\r\nchunks.\r\n
0\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)

我实际看到的是以下内容:

4\r\n
Wiki\r\n
5\r\n
pedia\r\n
e\r\n
 in\r\n\r\nchunks.\r\n
0
Run Code Online (Sandbox Code Playgroud)

换句话说,我测试过的少数服务器在 0.. 之后不再发送数据。不是 CRLF,更不用说 CRLFCRLF。

如果没有正确的分块标签格式,我们怎么知道这是分块数据的结尾?超时发生在 0 之后寻找 CRLF,这还不够。

http chunked chunked-encoding

5
推荐指数
1
解决办法
1464
查看次数

分块编码和连接:紧密结合在一起

我对使用分块编码时如何处理“连接”标头有点困惑。是否应不添加“Connection”标头(或设置为 keep-alive,这与我们谈论的 HTTP 1.1 相同),或者是否授权将其设置为 Connection:close 发送空块,意味着结束传输,但这是否意味着连接的结束?我认为当我的目的是在发送空块后关闭连接时,我需要添加 Connection:close ,如果我不添加 Connection 标头,它将保持打开状态

谢谢

http chunked-encoding

5
推荐指数
1
解决办法
4335
查看次数

HTTP 中的多重响应是否合法?

我对 HTTP 协议的细微差别有点生疏,我想知道它是否可以直接支持发布/订阅?

HTTP 是一种请求响应协议。所以客户端发送请求,服务器发回响应。在 HTTP 1.0 中,为每个请求建立了一个新连接。现在 HTTP 1.1 改进了 HTTP 1.0,允许客户端保持连接打开并发出多个请求。

我意识到您可以将 HTTP 连接升级到 websocket 以进行快速的 2 路通信。我很好奇的是这是否是绝对必要的?

例如,如果我请求资源“ http://somewhere.com/fetch/me/slowly

服务器有空直接回复两次吗?例如首先接受 202,然后在内容准备好后不久接受内容,但没有客户端先发送额外的请求?

IE

Client: GET http://somewhere.com/fetch/me/slowly
Server: 202 "please wait..."
Server: 200 "here's your document"
Run Code Online (Sandbox Code Playgroud)

以这种方式实现发布/订阅服务是否正确?例如:

Client: http://somewhere.com/subscribe
Server: item 1
...
Server: item 2
Run Code Online (Sandbox Code Playgroud)

我的印象是这“可能”有效,因为客户端通常会有一个事件循环来监视连接,但在技术上是错误的(因为不需要以这种方式实现遵循协议的客户端)。

但是,如果您使用分块传输编码,这将起作用。

HTTP/2 似乎也允许这样做,但我不清楚是否进行了更改以使其成为可能。

我还没有看到太多关于 pub/sub 的讨论,所以如果使用带有或不带有分块编码的普通 HTTP/1.1 有什么问题怎么办?

如果这有效,为什么你需要像 RSS 或 ATOM 这样的东西?

http publish-subscribe chunked-encoding

5
推荐指数
1
解决办法
5898
查看次数