2

XmlHttpRequest に Expect: 100-continue ヘッダーを追加させるにはどうすればよいですか? デスクトップ ブラウザの世界でこの機能を利用するにはどうすればよいですか?

var xmlhttp = new XMLHttpRequest();
var dataToSend = new FormData();
dataToSend.append('some', 'data');
dataToSend.append('token', 'secret-token');

xmlhttp.open("POST", "/post", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Expect", "100-continue");
xmlhttp.setRequestHeader("Custom-Header", "This is custom data");
xmlhttp.send(dataToSend);

ここにTCPダンプ出力ピースがあります

POST /post HTTP/1.1
Host: 127.0.0.1:3000
Connection: keep-alive
Content-Length: 243
Origin: http://127.0.0.1:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Custom-Header: This is custom data
Content-type: application/x-www-form-urlencoded
Accept: */*
Referer: http://127.0.0.1:3000/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: connect.sid=s%3AAKgYIit0sVHMcI7na85UR_Na.o7uSDBEidLEyQ3cTaGyXlMrPiF3vADrwpnCrkCrJBD0

------WebKitFormBoundary9agFn5mlxh7SUBf7
Content-Disposition: form-data; name="some"

data
------WebKitFormBoundary9agFn5mlxh7SUBf7
Content-Disposition: form-data; name="token"

secret-token
------WebKitFormBoundary9agFn5mlxh7SUBf7--
4

1 に答える 1

4

W3C XMLHttpRequest 仕様で読むことができるように、セキュリティ上の理由からXMLHttpRequest.setRequestHeader()メソッドにヘッダーを追加することを強制することはできません。Expect

setRequestHeader(header, value) メソッドは、次の手順を実行する必要があります。

  1. 状態が OPENED でない場合は、「InvalidStateError」例外をスローして、これらの手順を終了します。
  2. send() フラグが設定されている場合は、「InvalidStateError」例外をスローして、これらの手順を終了します。
  3. ヘッダーがフィールド名の生成と一致しない場合は、「SyntaxError」例外をスローして、これらの手順を終了します。
  4. 値がフィールド値生成と一致しない場合は、「SyntaxError」例外をスローして、これらの手順を終了します (注: 空の文字列は正当であり、空のヘッダー値を表します)。
  5. ヘッダーが次のヘッダーのいずれかと大文字と小文字を区別しないで一致する場合は、これらの手順を終了します。

    • Accept-Charset
    • Accept-Encoding
    • アクセス制御要求ヘッダー
    • Access-Control-Request-メソッド
    • 接続内容の長さ
    • クッキー
    • Cookie2
    • 引用符
    • 日にち
    • DNT
    • 予想
    • ホスト
    • キープアライブの起点
    • リファラー
    • トレーラー
    • 転送エンコーディング
    • アップグレード
    • ユーザーエージェント
    • 経由

...または、ヘッダーの開始が Proxy- または Sec- の大文字と小文字を区別しない一致である場合 (ヘッダーが Proxy- または Sec- のみの場合を含む)。

上記のヘッダーは、ユーザーエージェントによって制御され、トランスポートのこれらの側面を制御できます。これにより、データの整合性がある程度保証されます。Sec- で始まるヘッダー名を設定して、XMLHttpRequest からのものではないことが保証されている新しいヘッダーを作成できるようにすることはできません。

さらなる参考として:

一部のブラウザー (Chrome など) では、"JavaScript コンソール" にもエラーが表示されます。

安全でないヘッダー

于 2013-08-11T20:08:04.813 に答える