AJAXによるアクセスを判定(判別・区別)する
 2006.10.24

AJAXのXMLHttpRequestオブジェクトからの要求(HTTPリクエスト)なのか,通常のWebブラウザによる要求なのかをサーバサイドで判定(判別・区別)する方法. AJAXからのリクエストと通常のWebブラウザからのリクエストで出力する内容を変えたい場合があります.そんなときどうやって,両者の区別を判定するのか. Firefoxのlivehttpheader機能拡張を使って,Webサーバとブラウザ間のヘッダのやり取りを眺めました.すると,AJAXによるアクセスの場合は
  X-Requested-With : XMLHttpRequest
というヘッダが付いていました. このヘッダの有る/無しをサーバ側で判断すれば,両者の区別を判定できそうです.上記ヘッダは,サーバ側では HTTP_X_REQUESTED_WITH という環境変数として参照できました. ZopeのDTML Method 場合には以下のように記述しました.
<dtml-let reqwith="REQUEST.environ.get('HTTP_X_REQUESTED_WITH')">
<dtml-if "reqwith != 'XMLHttpRequest'">
通常のWebブラウザに返すHTML...
<dtml-else>
AJAXに返すHTML..
</dtml-if>
2006/10/27追記:補足があります.
カテゴリー:javascript