HTTP:非法分块编码
HTTP: Illegal chunked encoding
我有一个 .NET 客户端应用程序,它使用第三方库通过 http 访问服务器。库抛出以下错误:
The server committed a protocol violation. Section=ResponseBody Detail=Response chunk format is invalid
这个软件已经安装了几十次了,所以我想肯定是客户系统的问题,我怀疑是代理之间的问题。
我已经使用 Fiddler 获得了第一个提示。在嗅探 Fiddler 时注意到违反协议:
Illegal chunked encoding. 'MIME-Version: 1.0' is not a hexadecimal number.
Fiddler 显示以下响应:
MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary_RsidtvFKHs9ymusS/NI6l56qcD8r76ye; type=text/xml
--MIME_boundary_RsidtvFKHs9ymusS/NI6l56qcD8r76ye
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <osci@message>
Content-Length: 1545
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ soapMessageEncrypted.xsd http://www.w3.org/2000/09/xmldsig# oscisig.xsd http://www.w3.org/2001/04/xmlenc# oscienc.xsd"><soap:Body><xenc:EncryptedData MimeType="Multipart/Related"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"></xenc:EncryptionMethod><ds:KeyInfo><xenc:EncryptedKey><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"></xenc:EncryptionMethod><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIID0jCCArqgAwIBAgIJAMg6MGbE+zZRMA0GCSqGSIb3DQEBDQUAMIGJMQswCQYDVQQGEwJERTEf
MB0GA1UECAwWTWVja2xlbmJ1cmctVm9ycG9tbWVybjERMA8GA1UEBwwIU2Nod2VyaW4xLDAqBgNV
BAoMI0NvbXB1dGVyLUJlcm
如您所见,响应意外停止。
有谁知道问题出在哪里或如何解决?
The header of the request is as follows:
POST /osci-manager-entry/externalentry HTTP/1.0
Host: [the-host]
Content-Length: 3984
Proxy-Connection: Keep-Alive
The header of the response contains this:
HTTP/1.0 200 OK
Date: Mon, 04 Jan 2016 12:10:31 GMT
Transfer-Encoding: chunked
Content-Type: text/plain; charset=iso-8859-1
Connection: Keep-Alive
The software is already installed dozens of times, so i think it must
be an issue in the customers system, my suspicion is the proxy
between.
问题很可能是由于在这种情况下使用 HTTP/1.0 引起的。分块传输和 Keep-Alive 在 HTTP/1.0.
中不是标准的
在分块传输编码中,每个块都应该start with a hexadecimal number指示后面的块的大小。显然这里没有这个数字:Illegal chunked encoding. 'MIME-Version: 1.0' is not a hexadecimal number.
在 HTTP/1.0 中,Keep-Alive 和分块 transfer-coding cannot be used together:
An HTTP/1.1 server may also establish persistent connections with
HTTP/1.0 clients upon receipt of a Keep-Alive connection token.
However, a persistent connection with an HTTP/1.0 client cannot make
use of the chunked transfer-coding, and therefore MUST use a
Content-Length for marking the ending boundary of each message.
我有一个 .NET 客户端应用程序,它使用第三方库通过 http 访问服务器。库抛出以下错误:
The server committed a protocol violation. Section=ResponseBody Detail=Response chunk format is invalid
这个软件已经安装了几十次了,所以我想肯定是客户系统的问题,我怀疑是代理之间的问题。
我已经使用 Fiddler 获得了第一个提示。在嗅探 Fiddler 时注意到违反协议:
Illegal chunked encoding. 'MIME-Version: 1.0' is not a hexadecimal number.
Fiddler 显示以下响应:
MIME-Version: 1.0
Content-Type: Multipart/Related; boundary=MIME_boundary_RsidtvFKHs9ymusS/NI6l56qcD8r76ye; type=text/xml
--MIME_boundary_RsidtvFKHs9ymusS/NI6l56qcD8r76ye
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <osci@message>
Content-Length: 1545
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ soapMessageEncrypted.xsd http://www.w3.org/2000/09/xmldsig# oscisig.xsd http://www.w3.org/2001/04/xmlenc# oscienc.xsd"><soap:Body><xenc:EncryptedData MimeType="Multipart/Related"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"></xenc:EncryptionMethod><ds:KeyInfo><xenc:EncryptedKey><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"></xenc:EncryptionMethod><ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIID0jCCArqgAwIBAgIJAMg6MGbE+zZRMA0GCSqGSIb3DQEBDQUAMIGJMQswCQYDVQQGEwJERTEf
MB0GA1UECAwWTWVja2xlbmJ1cmctVm9ycG9tbWVybjERMA8GA1UEBwwIU2Nod2VyaW4xLDAqBgNV
BAoMI0NvbXB1dGVyLUJlcm
如您所见,响应意外停止。
有谁知道问题出在哪里或如何解决?
The header of the request is as follows:
POST /osci-manager-entry/externalentry HTTP/1.0 Host: [the-host] Content-Length: 3984 Proxy-Connection: Keep-Alive
The header of the response contains this:
HTTP/1.0 200 OK Date: Mon, 04 Jan 2016 12:10:31 GMT Transfer-Encoding: chunked Content-Type: text/plain; charset=iso-8859-1 Connection: Keep-Alive
The software is already installed dozens of times, so i think it must be an issue in the customers system, my suspicion is the proxy between.
问题很可能是由于在这种情况下使用 HTTP/1.0 引起的。分块传输和 Keep-Alive 在 HTTP/1.0.
中不是标准的在分块传输编码中,每个块都应该start with a hexadecimal number指示后面的块的大小。显然这里没有这个数字:Illegal chunked encoding. 'MIME-Version: 1.0' is not a hexadecimal number.
在 HTTP/1.0 中,Keep-Alive 和分块 transfer-coding cannot be used together:
An HTTP/1.1 server may also establish persistent connections with HTTP/1.0 clients upon receipt of a Keep-Alive connection token. However, a persistent connection with an HTTP/1.0 client cannot make use of the chunked transfer-coding, and therefore MUST use a Content-Length for marking the ending boundary of each message.