7

RFC2396 - Uniform Resource Identifiersのセクション 3.3、パス コンポーネントよると、

パスは、単一のスラッシュ「/」文字で区切られた一連のパス セグメントで構成される場合があります。パス セグメント内では、文字「/」、「;」、「=」、および「?」予約されています。各パス セグメントには、セミコロン「;」で示される一連のパラメータを含めることができます。キャラクター。パラメータは、相対参照の解析には重要ではありません。

ただし、最後のセグメント以外のセグメントにクエリ パラメータを含む URL は見たことがありません。したがって、これを正しく読んでいるかどうかはわかりません。

http://www.url.com/segment1?seg1param1=val1/page.html?pageparam1=val2有効な URL ですか?

4

4 に答える 4

13

RFC が参照しているのは、次のようなものです。

http://www.example.com/foo/bar;param=value/baz.html

/foo/bar/baz.htmlこれは、パラメーターparam=valueを含むbarセグメントへのパスとして解釈できます。疑問符は使用されません。

RFC 2396 は RFC 3986 によって廃止されたことに注意してください。RFC 3986では、実装がセグメント固有のパラメーターを埋め込むためにさまざまなことを実行できる (および実行する) という一般的な注意事項を支持して、セグメント固有のパラメーターの仕様が省略されています。

階層パスのドット セグメントは別として、パス セグメントは一般的な構文では不透明と見なされます。URI 生成アプリケーションは、セグメントで許可されている予約文字を使用して、スキーム固有または逆参照ハンドラー固有のサブコンポーネントを区切ることがよくあります。たとえば、セミコロン (";") と等号 ("=") の予約文字は、そのセグメントに適用されるパラメーターとパラメーター値を区切るためによく使用されます。コンマ (",") 予約文字は、同様の目的でよく使用されます。たとえば、ある URI プロデューサーは「name;v=1.1」などのセグメントを使用して「name」のバージョン 1.1 への参照を示す場合がありますが、別の URI プロデューサーは「name,1.1」などのセグメントを使用して同じことを示す場合があります。パラメータの型は、スキーム固有のセマンティクスによって定義できます。

于 2011-07-01T13:26:03.223 に答える
1

すぐ下にある文法を見ると、次のように書かれています。

  path          = [ abs_path | opaque_part ]

  path_segments = segment *( "/" segment )
  segment       = *pchar *( ";" param )
  param         = *pchar

  pchar         = unreserved | escaped |
                  ":" | "@" | "&" | "=" | "+" | "$" | ","

セグメントは pchar と param で構成され、param 自体が pchar です。読み進めると「?」が一切ない。pchar 文字コンポーネントの文字。したがって、パラメータに「?」を含めることはできず、「?」を含めることもできません。セグメントで。

それで、「?」と言うエドワード・トムソンの答えに同意します。クエリ セグメントを区切るだけで、パス内では使用できません。

于 2011-06-30T15:41:30.603 に答える
0

私はあなたがそれで得ることができ、ほとんどのウェブサーバーがそれを処理すると信じていますが、あなたが期待している結果が得られるとは思いません. つまり、pageparam1=val2 は評価されません。

そのようなパラメーターが必要な場合は、常に # 記号を使用できます (多くの JavaScript ベースの GUI が現在行っているように)。

于 2011-06-30T15:18:51.697 に答える
0

RFC 2396 を読んだところによると、いいえ。は?予約文字であり、クエリ セグメントを区切るためだけに使用されます。は?、パスまたはクエリ セグメントでは使用できません。

あなたの例では、最初?はクエリセグメントの始まりを示しています。2 番目?はクエリ セグメント内にあり、許可されていません。

于 2011-06-30T15:13:10.230 に答える