人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Ajaxでの実装時のIEのリクエストヘッダについての質問です。jQueryの$.ajax()とPHPを使用。

1. $.ajax()を使ってPHPにPOST
2. PHP側でgetallheaders()を使ってリクエストヘッダを取得
3. 「X-Requested-With: XMLHttpRequest」がある場合とない場合で処理を分岐

参考までに、jQueryのソースから、$.ajax()内のリクエストヘッダを追加している部分を抜き出し。

// Set header so the called script knows that it's an XMLHttpRequest
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");


不思議なことに、getallheaders()で取得したリクエストヘッダをvar_dump()してみると、
IE(6/7)では「x-requested-with: XMLHttpRequest」と小文字になってしまうのです。
その他のヘッダは小文字にはなっていませんし、FirefoxやOperaでは小文字にはなりません。

このリクエストヘッダが小文字になってしまう原因わかりますか?

チェック自体はPHP側で大文字・小文字の区別なしに比較すればすむことなので、チェックの仕方についての回答はご遠慮ください。

●質問者: wizemperor
●カテゴリ:ウェブ制作
✍キーワード:Ajax firefox IE jQuery opera
○ 状態 :キャンセル
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kent013

http://www.ring.gr.jp/pub/doc/RFC/rfc2068.txt

では,


CHAR = <any US-ASCII character (octets 0 - 127)>
CTL = <any US-ASCII control character
 (octets 0 - 31) and DEL (127)>
CR = <US-ASCII CR, carriage return (13)>
LF = <US-ASCII LF, linefeed (10)>
SP = <US-ASCII SP, space (32)>
HT = <US-ASCII HT, horizontal-tab (9)>
tspecials = "(" | ")" | "<" | ">" | "@"
 | "," | ";" | ":" | "\" | <">
 | "/" | "[" | "]" | "?" | "="
 | "{" | "}" | SP | HT

token = 1*<any CHAR except CTLs or tspecials>

message-header = field-name ":" [ field-value ] CRLF
field-name = token

と定義されています.US-ASCIIの文字はISO/IEC 646 - Wikipediaで参照できます.そしてRFC2068には

Each header field consistsof a name followed by a colon (":") and the field value. Field names are case-insensitive.

とありますので,ヘッダは大文字小文字を区別しません.


IEが,なぜヘッダをすべて小文字にしているかはわかりませんが,仕様的には問題ありません.

FireFoxやOperaが大文字小文字を混ぜたヘッダを送ってきても,それは仕様としてはIEと等価です.

ですから,どのヘッダも,等価なものとして扱わなければならないということです.


回答になっていますでしょうか.

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ