2011-07-12 26 views
11

URLに末尾のアンパサンドが有効ですか?

http://localhost/path?a=b&c=d 

のようなURLは大丈夫です - しかし、末尾のアンパサンドと同じURLのステータスは何ですか? Scala's Sprayはない(すなわち、それはエラーをスローします)んどこ

http://localhost/path?a=b&c=d& 

は、例えば、JavaサーブレットAPIは、それを可能にします。

私はURI syntax specで答えを見つけようとしましたが、文法の解析方法は不明です。

答えて

16

URI構文specは汎用URIのためのものです。それはqueryの何でも許します。アンパサンドで区切られたキー=値のペアを実際に指定する仕様は認識していません。私はそれがただの大会だと信じています。たとえば、PHPでは、異なるセパレータを使用するオプションが用意されています。しかし今、誰もがキーと値のペアを必要とするときにアンパサンドで区切られたものを使います。あなたはたまには、単純な文字列のためにそれを使用するものを時々見つけます。 http://example.com/?example。これは完全に有効です。

しかし、基本的な答えは、&は、クエリ文字列のどこでも有効です(末尾を含む)。


&が有効などこにでもクエリ文字列であるのはなぜRFC構文、またはをDemistifying:

まず、あなたが

query  = *(pchar/"/"/"?") 

(だから、クエリ文字列がで作られていますpcharと任意の数のスラッシュと疑問符)

は戻って、あなたが

pchar   = unreserved/pct-encoded/sub-delims/":"/"@" 

およびそれ以前のまだ

sub-delims = "!"/"$"/"&"/"'"/"("/")" 
      /"*"/"+"/","/";"/"=" 

を持っているので、リテラル&pcharにあるsub-delimsであるので、それは、[セクション1.3]は注目に値しますquery

+0

に有効です(http://tools.ietf.org/html/rfc3986#section-1.3)を使用して、ユーザーを[rfc2234](http://tools.ietf.org/html/rfc2234)に転送します。はい、文法に慣れていますが、参照がどこにあるのかわかるとそれほど悪くはありません。 – aaaaaa

3

私は、すべてのRFCが理解できないほど近くになければならないという書かれていないルールがあると思います。あなたは文法を解析できない最初の人ではなく、私の謙虚な意見ではスプレーも失敗しました。

末尾のアンパサンドには何も問題はありません。これは、パラメータを区切るために使用されるURIの正当な文字です。末尾のアンパサンドは無意味かもしれませんが、無効ではありません。スプレーは、(私の意見では)単にそれを無視するべきです。

関連する問題