特殊HTTPヘッダ

概要

元コンテンツのHTTPレスポンスヘッダに特殊項目を追加することにより、x-Servletにページ変換をさせない事やSession文字列の付加をやめさせることが出来ます。 また、x-Servletが自動的に付加する特殊なHTTPリクエストヘッダについて記述します。

形式

1. 特殊HTTPレスポンスヘッダ

x-Servletで使用できる特殊な HTTPレスポンスヘッダを以下に説明します。

  • X-Xproxy-Command: through
    変換を行うことなくそのまま端末にこのレスポンスを返します。(スルーします)
  • X-Xproxy-Command: nosession
    "Location:" HTTPヘッダを伴うようなレスポンス(リダイレクトレスポンス)を受け取った際に、通常はURL書き換えと同時にx- ServletのSession文字列の付加を行ないますが、このHTTPヘッダが記述されているレスポンスの場合にはURLの書き換えは行ないますが Session文字列の付加は行ないません。ブックマークさせるようなページにリダイレクトさせる際に用いることができます。

    注意) セッションパラメータが付加されないため、x-Servletのセッションに依存している機能であるCookie等はこのリダイレクトに関しては無効になります。

  • X-Xproxy-Command: fixsessionid [Version2.9.0以上]
    このレスポンスではセッションIDを変更しません。
  • X-Xproxy-Command: thissessionid [Version2.9.0以上]
    このレスポンスでセッションIDを変更します。
  • X-Xproxy-Command を複数個指定することはできません。複数指定された場合は最初に指定されたヘッダのみ有効になります。
  • 各コマンドはカンマ区切りで複数指定することができます。
  • 各コマンドが重複した場合の優先度は以下のようになります。
    through > nossession > fixsessionid > thissessionid

2. 特殊HTTPリクエストヘッダ

x-Servletが自動的に付加する特殊なHTTPリクエストヘッダには以下の項目があり、全て「X-Xp」で始まります。

これらのヘッダは画像先読み時のリクエスト(基本動作図内の④のリクエスト)では付加されません。
先読み時にも全てのヘッダを付加したい場合は xproxy.properties の「fullHeaderRequest」を "true" に設定する必要があります。

  • X-Xp-Remote-Host
    接続元のIPアドレスを格納します。
  • X-Xp-Remote-Port
    接続元のポート番号を格納します。
  • X-Xp-Host
    接続を受け付けたx-ServletのIPアドレスを格納します。
  • X-Xp-Port
    接続を受け付けたx-Servletのポート番号を格納します。
  • X-Xp-Host-Header
    x-Servlet にリクエストが来た時点で設定されていた Host ヘッダの内容+接続時のポート番号を格納します。
  • X-Xp-Terminal-Name [Version2.2.0以上]
    アクセスを行なった端末の名称を格納します。
  • X-Xp-ML-Name [Version2.2.0以上]
    アクセスを行なった端末に出力するMLの種類を格納します。
  • X-Xp-ML-Version [Version2.2.0以上]
    アクセスを行なった端末に出力するMLのバージョンを格納します。
  • X-Xp-Pixel-Width [Version2.2.0以上]
    アクセスを行なった端末の横pixel数を格納します。
  • X-Xp-Pixel-Height [Version2.2.0以上]
    アクセスを行なった端末の縦pixel数を格納します。
  • X-Xp-Image-Formats [Version2.2.0以上]
    アクセスを行なった端末の対応画像フォーマットを格納します。
    複数の画像フォーマットに対応している場合はカンマ区切りで列記します。
  • X-Xp-Uid [Version2.2.1以上]
    個体識別情報が取得できた場合、その個体識別情報を加工した文字列を格納します。
    このヘッダは常に付加されるわけではありません。個体識別情報が取得できた場合にのみ付加されます。
    加工は以下のように行なわれます。
    • docomo
      以下の4つの文字列を','で連結した文字列
      • "D_" + ユーザID(通常は付加されません。詳細はdocomoの正式な文書をご確認ください)
      • "d_" + 製造番号('User-Agent'HTTPヘッダの製造番号部。utn使用時)
      • "i_" + FOMAカード識別番号('User-Agent'HTTPヘッダのFOMAカード識別番号部。utn使用時)
      • "I_" + iモードID('X-Dcmguid'HTTPヘッダの値。guid=on使用時) [Version2.7.2以上]
    • SoftBank
      以下の2つの文字列を','で連結した文字列
      • "J_" + ユーザID('X-Jphone-Uid'HTTPヘッダの値)
      • "j_" + 製造番号('User-Agent'HTTPヘッダの製造番号部 [Version2.7.0以上]
    • au
      • "K_" + Ez番号('X-Up-Subno'HTTPヘッダの値)
    • EMOBILE [Version2.7.0以上]
      • "E_" + ユーザID('X-Em-Uid'HTTPヘッダの値)
    • WILLCOM [Version2.7.2以上]
      以下の2つの文字列を','で連結した文字列
      • "W_" + ユーザID('User-Agent'HTTPヘッダのユーザID部)
      • "w_" + 課金フラグ('User-Agent'HTTPヘッダの課金フラグ部)

    例)

    • docomo端末[utn](FOMA以前)
      X-Xp-Uid: d_serAAAAA000000
    • docomo端末[utn](FOMA)
      X-Xp-Uid: d_ser000000000000000,i_icc0000000000000000000A,I_a12b34c
    • SoftBank端末
      X-Xp-Uid: J_a0A0AaA00AaA0a0a,j_SN123456789012345
    • au端末
      X-Xp-Uid: K_00000000000000_vc.ezweb.ne.jp
    • EMOBILE端末
      X-Xp-Uid: E_a1234aa12345678901
    • WILLCOM端末
      X-Xp-Uid: W_a1b2c3d4e5,w_yes
    • スマートフォンでは個体識別情報が取得できないため X-Xp-Uid は付加されません。
    • 2011年6月30日に、SoftBank の SSL/TLS通信方式が GW中継から End-to-End に仕様変更された影響で SoftBank 端末で個体識別情報が取得できない場合があります。
  • X-Xp-Flash [Version2.4.0以上]
    端末のFlash対応バージョンを格納します。
    フラッシュに対応していない端末は"0.0"を格納し、対応している端末は対応バージョンが格納されます。ここで格納される値はuseragent.xmlで設定されている<Flash>の値になります。
  • X-Xp-Session-Header [Version2.5.0以上]
    xproxy.properties の setSessionHeader が true の場合、Web側へのリクエストヘッダ、及び携帯側へのレスポンスヘッダに現在使用している自分のセッションID(_xpxiの値)を格納します。アクセス解析などの外部ソフトとの連携に使用できます。
  • X-Xp-GPS [Version2.5.0以上]
    端末が対応している位置情報の形式を格納します。
    位置情報取得に対応していない端末は"false"を格納し、対応している端末は位置情報の形式が格納されます。ここで格納される値は useragent.xml で設定されている<GPS>の値になります。
  • X-Xp-Unique-Session-Header [Version2.9.0以上]
    xproxy.properties の setSessionHeader が true の場合、Web側へのリクエストヘッダにセッションIDと対になっている内部管理IDを格納します。
    セッションワンタイム化で随時変更されるセッションIDと異なり、内部で管理されているIDはセッションが有効な間は変化しないため、アクセス解析ソフトなどでリクエストの流れを特定する際の目安となります。
  • X-Xp-ML-Expand-Version [Version2.10.0以上]
    端末がiモードブラウザ2.0相当に対応しているかを示します。
    対応していない端末は"0.0"を格納し、対応している端末は対応バージョンが格納されます。ここで格納される値はuseragent.xmlで設定されている<ExpandVersion>の値になります。
  • X-Xp-Cookie [Version2.10.0以上]
    端末がCookieに対応しているかを示します。
    対応していない端末は"false"を格納し、対応している端末は"true"が格納されます。ここで格納される値はuseragent.xmlで設定されている<Cookie>の値になります。

HTTPリクエストヘッダ変更

ルールが<ContentsRule>で定義されている場合(デフォルトモードもしくはスルーモードの場合)
<Attribute name="appendReqHeader_n">及び
<Attribute name="removeReqHeader_n">によってリクエストヘッダを追加・削除することが可能です。

1. HTTPリクエストヘッダ追加

リクエストに新たなHTTPリクエストヘッダを追加します。
<Attribute name="appendReqHeader_n">YYY:ZZZ</Attribute>

  • n 重複しない0以上の数値を指定します。
  • YYY 追加するHTTPリクエストヘッダ名を指定します。
  • ZZZ 設定する値を指定します。設定方法は以下の3つの方法があります。
    1. 即値追加
      指定された値をそのまま用いてHTTPリクエストヘッダを構成します。
      例)<Attribute name="appendReqHeader_0">X-Use-XProxy:TRUE</Attribute>
      この場合 X-Use-Xproxy: TRUE
      というHTTPリクエストヘッダが追加されます。
    2. ヘッダ参照常時追加
      既に設定されているHTTPヘッダの値を用いてHTTPリクエストヘッダを構成します。
      参照したいHTTPヘッダの名前を"$"で挟んだ文字列(例:"$Host$")を指定します。
      もし指定したHTTPヘッダが設定されていない場合は"$"で挟まれたHTTPヘッダ名をそのまま用いてHTTPリクエストヘッダが構成されます。
      例)<Attribute name="appendReqHeader_1">X-Referer1:$Referer$</Attribute>

      この場合、Refererヘッダが端末から送信されてきている場合は

      X-Referer1: ${Refererヘッダの内容}

      というHTTPリクエストヘッダが追加されますし、Refererヘッダが端末から送信されてきていない場合は

      X-Referer1: $Referer$

      というHTTPリクエストヘッダが追加されます。

    3. ヘッダ参照適宜追加
      既に設定されているHTTPヘッダの値を用いてHTTPリクエストヘッダを構成します。
      参照したいHTTPヘッダの名前を"%"で挟んだ文字列(例:"%Host%")を指定します。
      もし指定したHTTPヘッダが設定されていない場合はこのヘッダを追加しません。
      例)<Attribute name="appendReqHeader_2">X-Referer2:%Referer%</Attribute>

      この場合、Refererヘッダが端末から送信されてきている場合は

      X-Referer2: ${Refererヘッダの内容}

      というHTTPリクエストヘッダが追加されますし、

      Refererヘッダが端末から送信されてきていない場合は"X-Referer2"というヘッダ自体を追加しません。

      注:x-Servletが必ず削除するヘッダも存在するため、ここでの設定が有効にならない場合も有ります。

2. HTTPリクエストヘッダ削除

リクエストから指定されたリクエストヘッダを除去します。
<Attribute name="removeReqHeader_n">YYY</Attribute>

  • n 重複しない0以上の数値を指定します。
  • YYY 削除するHTTPリクエストヘッダ名を指定します。
    例) <Attribute name="removeReqHeader_0">Accept-Language</Attribute>
    この場合、リクエストからAccept-Languageヘッダが削除されます。

注 : x-Servletが必ず追加するヘッダも存在するため、ここでの設定が有効にならない場合もあります。

注 : x-Servletは、読み込む前に送信されてきたHTTPヘッダが必要か不必要かの判断は行えません。
そのため、意図しないhttpヘッダが付加されていても処理を行おうとします。もし、完全に不要と思われるHTTPヘッダの削除が必要ならば前段のFirewallやLoad Balancerなどで制限をかけていただくことをお願いします。

注意点

  • HTTPヘッダの正規化
    x-ServletではHTTPヘッダ名は「先頭文字と"-"の次の文字は大文字にし、それ以外の文字は小文字にする」という正規化を行って処理を行います。HTTPヘッダ値に関しては何ら変更を行いません。(例えば'user-agent: docomo/1.0/P501i'というようなHTTPヘッダは'User-Agent: docomo/1.0/P501i'というように変換されて処理されます)そのため、HTTPヘッダ名から値を取得する際に大文字小文字を区別するアプリケーションは修正が必要です。
  • x-ServletにおけるHTTPヘッダの削除
    x-Servletは下記のHTTPリクエストヘッダを削除します。下記のヘッダ情報をアプリケーション側で取得したい場合にはappendReqHeader_nを設定することにより取得することが可能です。
    • Content-Location
    • Accept-Encoding
    • Keep-Alive
    • Referer(Version2.8.0以上は削除されずに出力されます)
    • If-Modified-Since
    • If-None-Match
    • If-Match
    • If-Range
    • If-Unmodified-Since
    • Content-Base
    • Transfer-Encoding
  • x-ServletにおけるHTTPヘッダの書き換え
    x-Servletは"Connection"ヘッダ値を"close"に書き換えます。元のヘッダ情報をアプリケーション側で取得したい場合にはappendReqHeader_nを設定することにより取得することが可能です。
  • x-ServletにおけるHTTPヘッダ値の追加
    x-Servletは"Accept"ヘッダ値に"image/*"が設定されていない場合、ヘッダ値に"image/*"を追加します。元のヘッダ情報をアプリケーション側で取得したい場合にはappendReqHeader_nを設定することにより取得することが可能です。
TOP