2010-04-05 9 views

Odpowiedz

0

Jeśli chodzi o protokół, to różne są http://example.com/something i http://example.com/something/. Niektóre serwery mogą przekierowywać użytkownika z jednego na drugi, jeśli jest on zaimplementowany w taki sposób.

Co do czystych nazw domen, zawsze wysyła żądanie kończące się ukośnikiem. (Nazwa domeny nie jest uwzględniona w sekcji ścieżki żądania HTTP, tak jak pisał Greg Hewgill i inni, ale jest ona uwzględniona w nagłówkach).

Możesz to sprawdzić za pomocą narzędzia takiego jak Fiddler lub WireShark.

+0

To jest błędne. '/ something /' różni się od '/ something' w znaczeniu HTTP. http://googlewebmastercentral.blogspot.com.es/2010/04/to-slash-or-not-to-slash.html – Ryall

+0

@Ryall zredagował moją odpowiedź, aby wyjaśnić. – Venemo

28

Żądanie HTTP wysłane z przeglądarki do serwera nie zawiera nazwy domeny, tylko część "ścieżka" (zaczynając od pierwszego ukośnika po nazwie domeny). Ponieważ ścieżka nie może być pusta, w takim przypadku jest wysyłana /.

Próbkę żądania GET dla korzenia strony internetowej może być:

 
GET/HTTP/1.0 

/ powyżej nie może zostać pominięty.

+1

Aby to wyjaśnić, domena jest wysyłana w nagłówku 'Host' (tylko HTTP 1.1). – jholster

+0

Więc mówisz, że nawet jeśli masz pustą ścieżkę, URL ma zagwarantowany końcowy ukośnik? – Hank

+3

@ Hank: Mówię tylko, że * jeśli * masz pustą ścieżkę, pojedynczy '/' jest wysyłany. To nie mówi nic o ukośnych ukośnikach, jeśli część ścieżki jest * nie * pusta (w takim przypadku przeglądarka wysyła dokładnie to, co jest na pasku adresu, ale serwer może wybrać przekierowanie przeglądarki w odpowiedzi). –

9

Należy pamiętać, że jest to very different sprawa, gdy adres URL ma element ścieżki:

http://example.com/dir 

jest inny URL niż

http://example.com/dir/ 

i może w rzeczywistości zawierać inną treść i mieć inna pozycja w rankingu wyszukiwarek.

+0

to jest dobry punkt. Zalecane jest zakończenie adresu URL za pomocą "/" –

+3

@ Claudio, proszę podać jakieś odniesienie? – jholster

+0

@Yaggo: spójrz na google "końcowy slash". Nie pamiętam ani jednego miejsca, w którym to przeczytałem, przepraszam. –

15

Jak RFC 2616 mówi:

3.2.2 http URL

"http" Program służy do zlokalizowania zasobów sieciowych za pośrednictwem protokołu HTTP
protokołu. Ta sekcja definiuje składnię specyficzną dla schematu i semantykę dla adresów URL protokołu http.

http_URL = "http:" "//" host [":" port] [ścieżka_błędy ["?" zapytanie]]

Jeśli port jest pusty lub nie został podany, zakłada się port 80. . Semantyka
polega na tym, że zidentyfikowany zasób to zlokalizowany na serwerze nasłuchującym dla połączeń TCP na tym porcie tego hosta , a identyfikatorem URI żądania dla zasobu jest ścieżka abs_path (sekcja 5.1.2). Należy unikać używania adresów IP w adresach URL pod numerami (patrz dokument RFC 1900 [24]).Jeśli ścieżka URL nie zawiera ścieżki abs_path , musi ona być podana jako "/", gdy jest używana jako identyfikator URI żądania (sekcja 5.1.2). Jeśli serwer proxy otrzymuje nazwę hosta, który nie jest w pełni kwalifikowaną domeną, może dodać swoją domenę do nazwy hosta, którą odebrał. Jeśli serwer proxy odbiera w pełni kwalifikowaną nazwę domeny , proxy NIE MOŻE zmienić nazwy hosta na .

Więcej: http://www.faqs.org/rfcs/rfc2616.html#ixzz0kGbpjYWa

5.1.2 Request-URI
...
Na przykład klient chcąc odzyskać zasobu powyżej bezpośrednio z serwera pochodzenie stworzyłoby TCP połączenie z portem 80 hosta "www.w3.org" i wysłanie wierszy:

GET /pub/WWW/TheProject.html HTTP/1.1 
    Host: www.w3.org 

, a następnie pozostałą część żądania . Należy zauważyć, że ścieżka bezwzględna nie może być pusta; jeśli żadna nie jest obecna w oryginalnym identyfikatorze URI, musi być podana jako "/" (główny serwer).

Więcej: http://www.faqs.org/rfcs/rfc2616.html#ixzz0kGcaRbqU

Powiązane problemy