当我使用以下代码发出POST
请求时:
string body = "Hello World";
byte[] bytes = Encoding.ASCII.GetBytes(body);
WebRequest request = WebRequest.Create("http://internalurl");
request.Method = "POST";
request.ContentLength = bytes.Length;
我将内容长度设置为POST
ed的字节数。
ContentLength
请求的正确GET
是什么?
答案 0 :(得分:25)
由于您在执行GET
请求时通常不会发送任何其他数据,因此根本不应发送标头Content-Length
。
只有在您发送 message-body 时才应包含标题Content-Length
,并且相关标题的值始终是此字段的长度,以(< em> OCTET )字节。
(RFC2616) 14.13 Content-Length
Content-Length entity-header字段指示实体主体的大小,以十进制数量的OCTET发送给接收者,或者在HEAD方法的情况下,指示实体主体的大小。如果请求是GET,则已发送。
&lt; snip /&gt;
应用程序应该使用此字段来指示消息正文的传输长度,除非4.4部分中的规则禁止这样做。
在执行GET
请求时,(AFAIK)认为包含 message-body 的做法不好,但在阅读HTTP RFC2616时,我没有看到任何声明(RFC2616) 4.3 Message Body {1}}请求不能包含 message-body 。
虽然如果您在 message-body 中发送数据并且希望在这种情况下解析和处理数据,我将假设今天的大多数Web服务器都不会回复您希望他们回复的内容。
{{3}}
HTTP消息的消息体(如果有的话)用于携带 与请求或响应关联的实体主体。消息体 只有在传输编码时才与实体体不同 应用,如Transfer-Encoding标头字段所示(部分 14.41)。
GET
传输编码必须用于指示任何传输编码 应用程序申请确保安全和正确的转移 信息。 Transfer-Encoding是消息的属性,而不是实体的属性,因此可以由任何应用程序添加或删除 请求/响应链。 (但是,第3.6节规定了限制 当可以使用某些转移编码时。)
邮件中允许邮件正文的规则有所不同 请求和回复。
请求中存在消息正文 包含Content-Length或Transfer-Encoding标头字段 请求的消息标题。
如果请求方法的规范(第5.1.1节)不允许在请求中发送实体主体,则消息体不得包含在请求中。
服务器应该在任何请求中读取和转发消息体;如果是请求方法 不包含实体主体的定义语义,然后是 处理请求时,应该忽略message-body。