2017-02-15 8 views
4

で許可されて私はいくつかのコードを見直していたと私はこのような何かを見た:明らかに、これはコードの作者は珍しい何も見ないこのhttp://example.com?&a=bは&URL

のようなURLになります

if (result.indexOf('?') === -1) { 
    result += '?'; 
} 
result += '&' + SOMETHING; 

をコードでは? &私は気になります。私はURIのRFCに間違っている(または私がそれを逃した)ことを証明するための制限を見つけることができませんでした。

明らかにクロームのdevのツールのネットワークタブで、それが空のペアのように表示されます。 enter image description here

は私を気に、このようなURLべきか、私はちょうどパラノイアのですか?

+2

私はこれが正当なものだと確信しています。クエリパラメータは単一項( 'http://example.com?queryparam')であり、そこから完全に空のクエリパラメータへのジャンプは遠くない。 –

+1

それはあなたを悩ませ、有効ではないでしょうか? – j08691

+4

@ j08691:誰かが&と珍しい文字列で始まるクエリ文字列を見つけるのは無理なことではありません。 – BoltClock

答えて

6

このケースは、ほとんどのサーバーでは空の値として解釈されるため、実際は有効です。サーバは?とすべて&の間をチェックし、それに応じて=に値を分けます。

したがって、?&(または2つの&)の間に何もない場合、値は両方とも空になります。値が ""かヌルかにかかわらず、=が失われますが、クエリが無効になりません。

一部のパーサーではこれが有効でないことがあるため、カスタムパーサー(JavaScriptなど)を使用しているときに問題が発生することがあります。

+1

カスタムJavaScriptについては、JavaScriptを使って 'loaction.serach'を単独で解析する人がいるので、 – NikxDa

+0

私は前のコメントを誤解を招くように削除しました。私はまだjavascriptの解析がその場合には関係ないとは思うが、もしOPの内容がこの答えで満足しているとすれば、すべてが役に立ちます:) – Aaron

+0

もう一度私のポイントを説明しようとします:クライアント側のパーサを使って値を抽出する人位置文字列自体(これは 'location.hash'に含まれています)から。ブラウザは '?&'を受け入れますが、それらのパーサはクライアント側でJavaScriptエラーを引き起こす可能性があります。 – NikxDa

4

年前にこれらのエッジケースのいくつかについてa blog postと書きました。

TL; DR:はい、?&exampleは何それについて重要なのは、あなたがnullの値を持つ""のキーを定義しているということです

有効です。

空の文字列キーをサポートしているライブラリはほとんどありませんので、動作しているとは限りませんが、?&foo=barのURLにURLがある限り、fooキーにアクセスすると問題ありません。