次のコードを使用して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
は何ですか?
通常、GET
リクエストを実行するときに追加のデータを送信しないため、ヘッダーContent-Length
はまったく送信しないでください。
ヘッダーContent-Length
は、message-bodyを送信する場合にのみ含める必要があり、問題のヘッダーの値は常にこのフィールドの長さであり、測定されます(OCTETs)バイト単位。
(RFC2616)14.13 Content-Length
Content-Lengthエンティティヘッダーフィールドは、受信者に送信されるエンティティ本体のサイズをOCTETの10進数で示します。HEADメソッドの場合は、リクエストがGETだった場合に送信されたはずのentity-body。
<snip />
セクション 4.4 のルールで禁止されていない限り、アプリケーションはこのフィールドを使用してメッセージ本文の転送長を示す必要があります。
GET
リクエストを実行するときにmessage-bodyを含めることは(AFAIK)悪い習慣と見なされますが、HTTPを読み取るときに RFC2616GET
リクエストにmessage-bodyを含めることができないことを示すものは何もありません。
今日のほとんどのWebサーバーは、message-bodyでデータを送信し、それを期待している場合、応答したいもので応答しないと思いますがその場合、解析および処理されます。
(RFC2616)4.3メッセージ本文
HTTPメッセージのメッセージボディ(存在する場合)は、要求または応答に関連付けられたエンティティボディを運ぶために使用されます。 Message-bodyは、Transfer-Encodingヘッダーフィールド(セクション14.41)で示されているように、transfer-codingが適用されている場合にのみentity-bodyと異なります。
message-body = entity-body | <entity-body encoded as per Transfer-Encoding>
Transfer-Encodingは、メッセージの安全で適切な転送を保証するために、アプリケーションによって適用される転送コーディングを示すために使用する必要があります。 Transfer-Encodingは、エンティティではなくメッセージのプロパティであるため、要求/応答チェーンに沿った任意のアプリケーションによって追加または削除される場合があります。 (ただし、セクション3.6では、特定の転送コーディングを使用できる場合に制限があります。)
メッセージ本体がメッセージで許可される場合のルールは、要求と応答で異なります。
リクエストにメッセージ本文が存在することは、リクエストのメッセージヘッダーにContent-LengthまたはTransfer-Encodingヘッダーフィールドが含まれていることによって通知されます。
リクエストメソッドの仕様(セクション5.1.1)でエンティティボディをリクエストに送信することが許可されていない場合は、メッセージボディをリクエストに含めてはなりません(MUSTNOT)。
サーバーは、要求に応じてメッセージ本文を読み取って転送する必要があります。リクエストメソッドにエンティティボディの定義済みセマンティクスが含まれていない場合、リクエストを処理するときにメッセージボディを無視する必要があります。