2013-12-11 42 views
24

Ben URL'ler ile ilgili bir sorum var:Yol bölümünde geçerli bir URL var mı?

okudum hala bir sorum var RFC 3986 ve yaklaşık bir URL: Bir URI bir otorite bileşeni, daha sonra yol bileşenini içeriyorsa


biri olması gerekir boş olmalı veya eğik çizgi ("/") karakteri ile başlayın. Bir URI bir yetki bileşeni içermiyorsa, yol iki eğik çizgi karakteriyle ("//")
başlayamaz. karakteri: Buna ek olarak, bir tanım
birinci yol bölümü bir kolon içeremez bu durumda göreceli yol başvuru, ("") olabilir
(Bölüm 4.1) referans. ABNF
, belirli bir URI referansı içindeki yol alt dizesiyle eşleşecek olan 'dan yalnızca biri olan bu durumları netleştirmek için beş ayrı kural gerektirir. , ayrıştırıcı tarafından eşleştirilen URI alt dizini
bu kurallardan birine açıklamak için "yol bileşeni" genel terimini kullanırız.

Biliyorum, o //server.com:80/path/info (bir şema göreli URL)

Ben de http://server.com:80/path//info geçerli olduğunu biliyoruz geçerlidir.

Ama şu bir geçerli olup olmadığından emin değilim:

http://server.com:80//path/info 

sorumu arkasında sorun, bir çerez gönderilmez olduğunu /path

için kısıtlama URI http://server.com:80/path/info yarattığı http://server.com:80//path/info e

cevap

21

Bkz. url with multiple forward slashes, does it break anything?, Are there any downsides to using double-slashes in URLs?, What does the double slash mean in URLs? ve RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax.

Konsensüs: olduğu gibi tarayıcılar isteği yapacak, onlar isteği değiştirmez. / karakter yolu ayırıcı olmakla yol parçaları olarak tanımlanır gibidir:

path-abempty = *("/" segment) 
segment  = *pchar 

http://example.com/ sonra çizgi doğrudan tekrar bölü, sonsuza takip edilebilir anlamına gelir. Sunucular bunu görmezden gelebilir, ancak bulduğunuz gibi tarayıcılar bunu yapmaz.

ifade: Bir URI bir otorite bileşeni içermiyorsa

ardından yol iki eğik çizgi karakterleriyle başlayamaz ("//").

protocol-relative URLs izin verir, ancak özellikle bu durumda yetkisi (sizin örnekte server.com:80) mevcut olabilir belirtmektedir.

Yani: evet, geçerli, hayır, kullanma.

+0

Bu bir tarayıcı hatasıdır, // yolu için bir çerez/yol'a gönderilmez? –

+0

@Christian bir hata değil, '// yol'/path '/ foo/path' ve '/// path' olarak farklıdır. Geçerli olan "// path" adında bir ad bulunmayan bir "altdizin" var.Bu yüzden, '// yol' için bir çerez ayarlarsanız, '/ yol'dan okunamaz ve başka bir şekilde okunamaz. :) – CodeCaster

+1

Yasal sesler. Farklı bir cevap veya görüş varsa ve cevap vermezse bir iki gün bekleyeceğim. –

İlgili konular