多くのWebサイト(特にGmail、yahoo、またはhotmail)では、URLに気付くでしょう。
続くのは次のようなものです:yahoo.com/abc/bcd.html; _x = 12323; _y = 2322;
これらの_xおよび_yパラメーターは何ですか?サーバーサイドコードでそれらにアクセスする方法は?
多くのWebサイト(特にGmail、yahoo、またはhotmail)では、URLに気付くでしょう。
続くのは次のようなものです:yahoo.com/abc/bcd.html; _x = 12323; _y = 2322;
これらの_xおよび_yパラメーターは何ですか?サーバーサイドコードでそれらにアクセスする方法は?
これらはURLのパラメーターです(クエリ文字列とは異なります)。この記事には、次の役立つ図を含め、適切な説明があります。
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
これらは、Java EEServletRequest#getParameter
などで使用される意味での「パラメータ」ではないことに注意してください(「パラメータ」とは、異なるクエリ文字列またはPOST引数を意味します)。
これはRFC2396の§3.3で定義されています:
パスは、単一のスラッシュ「/」文字で区切られた一連のパスセグメントで構成されている場合があります。パスセグメント内の文字「/」、「;」、「=」、および「?」予約されています。各パスセグメントには、セミコロン「;」で示される一連のパラメータを含めることができます。キャラクター。パラメータは、相対参照の解析には重要ではありません。
(誤解を避けるために:上記の「パス」という用語にはクエリ文字列は含まれていません。§3の冒頭を参照してください。)
ただし、 RFC2396はRFC3986によって廃止され、上記を大幅に修正します。
階層パスのドットセグメントを除いて、パスセグメントは一般的な構文では不透明であると見なされます。URI生成アプリケーションは、多くの場合、セグメントで許可されている予約文字を使用して、スキーム固有または間接参照ハンドラ固有のサブコンポーネントを区切ります。たとえば、セミコロン( ";")および等号( "=")の予約文字は、そのセグメントに適用可能なパラメーターとパラメーター値を区切るためによく使用されます。カンマ( "、")の予約文字は、同様の目的でよく使用されます。たとえば、あるURIプロデューサーは「name; v = 1.1」などのセグメントを使用して「name」のバージョン1.1への参照を示し、別のURIプロデューサーは「name、1.1」などのセグメントを使用して同じことを示す場合があります。パラメータタイプは、スキーム固有のセマンティクスによって定義できます。
これらは、URLに表示される可能性のある単なる文字です。これらは通常のクエリ文字列パラメータではないため、URLを解析してアクセスします。
これらは、URIのパス部分のセグメントへのパラメーターです。
URI構文は、RFC3986で次のように定義されています。
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
[...]
The following are two example URIs and their component parts: foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment | _____________________|__ / \ / \ urn:example:animal:ferret:nose
この例(http://yahoo.com/abc/bcd.html;_x=12323;_y=2322;
)では、これらのパラメータはパスコンポーネントの一部です。基本的に、これは、リソースを識別できるようにするためにそのアプリケーション内で使用される単なる規則です。
一般的に、HTTP URIのパスは、ファイルシステムで見られるものとよく似ていますが、ファイルシステムの構造に関連している必要はありません。これは純粋に、URIを逆参照するエンジンからの実装決定です(つまり、HTTPサーバーの実装と、応答を生成するものに要求をディスパッチするもの)。
厳密に言えば、クエリはURIの不可欠な部分でもあります(「RESTful」URIに関する多くの議論は、一部のSEO手法を除いて、無意味です)。
HTMLフォームを使用する場合、パラメーターはクエリセグメントを介して渡されるため、多くのHTTPフレームワークは、クエリをマップに分割することでコンテンツを公開します。たとえば、Java /サーブレットコンテンツでは、クエリ文字列(getQueryString()
)は)によって返されるパラメータを自動的に入力しますgetParameter(...
。
からパラメータを取得する場合bcd.html;_x=12323;_y=2322;
は、パスを自分で分割する必要があります。