如何告诉 HTTP 服务器不发送分块编码
How to tell the HTTP server to not send chunked encoding
我目前正在编写一个 HTTP 客户端,以便在 returns HTTP 响应的 URL 上执行 HTTP POST。
但是,对于错误消息代码 400 和 500,它会发回非分块 HTTP 响应,对于成功消息 201,它会发送分块响应。
在请求中,我设置了content-length,所以我不确定为什么它仍然向我们发送分块传输编码。我可以在请求中设置任何其他 header 来告诉 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
我正在使用套接字发送这些 HTTP 消息,而不是使用 httplib 或请求库。
Chunked 是 HTTP/1.1 的必需功能。如果您不需要任何其他 1.1 特定的功能,请在您的请求中指定 HTTP/1.0:
headerList.append("POST /v2/charges HTTP/1.0")
您在请求中指定的 Content-Length header 适用于请求,而不是服务器的响应。
当客户端指定 HTTP/1.1 作为协议时,HTTP/1.1 服务器仅在响应中使用分块传输。如果您想完全禁用分块传输,请在请求中指定 HTTP/1.0 作为协议。
或者,使用支持分块传输的 HTTP 客户端库 - 任何支持 HTTP/1.1 的都可以,因为在任何 HTTP/1.1 对话中,服务器可以自由选择是否对任何请求使用分块传输。
HTTP/1.1(实际上是 HTTP/2)服务器仍然支持 HTTP/1.0,并且 HTTP 1.0 对于编写简单客户端的能力仍然非常有用代码,仍然可以查询现代 Web 服务器(尽管需要 TLS-wrap 来支持 HTTPS)。所以在这种情况下是非常合适的。我认为这就是 HTTP 的优点,基本协议非常简单。 HTTP 1.1 和 HTTP 2.0 在能够编写支持它们的客户端方面逐渐增加了更多的复杂性,但所有这些复杂性都是可选的 - HTTP 1.0 仍然可以使用。
我目前正在编写一个 HTTP 客户端,以便在 returns HTTP 响应的 URL 上执行 HTTP POST。
但是,对于错误消息代码 400 和 500,它会发回非分块 HTTP 响应,对于成功消息 201,它会发送分块响应。
在请求中,我设置了content-length,所以我不确定为什么它仍然向我们发送分块传输编码。我可以在请求中设置任何其他 header 来告诉 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
我正在使用套接字发送这些 HTTP 消息,而不是使用 httplib 或请求库。
Chunked 是 HTTP/1.1 的必需功能。如果您不需要任何其他 1.1 特定的功能,请在您的请求中指定 HTTP/1.0:
headerList.append("POST /v2/charges HTTP/1.0")
您在请求中指定的 Content-Length header 适用于请求,而不是服务器的响应。
当客户端指定 HTTP/1.1 作为协议时,HTTP/1.1 服务器仅在响应中使用分块传输。如果您想完全禁用分块传输,请在请求中指定 HTTP/1.0 作为协议。
或者,使用支持分块传输的 HTTP 客户端库 - 任何支持 HTTP/1.1 的都可以,因为在任何 HTTP/1.1 对话中,服务器可以自由选择是否对任何请求使用分块传输。
HTTP/1.1(实际上是 HTTP/2)服务器仍然支持 HTTP/1.0,并且 HTTP 1.0 对于编写简单客户端的能力仍然非常有用代码,仍然可以查询现代 Web 服务器(尽管需要 TLS-wrap 来支持 HTTPS)。所以在这种情况下是非常合适的。我认为这就是 HTTP 的优点,基本协议非常简单。 HTTP 1.1 和 HTTP 2.0 在能够编写支持它们的客户端方面逐渐增加了更多的复杂性,但所有这些复杂性都是可选的 - HTTP 1.0 仍然可以使用。