2012-03-01 10 views
8

Nie rozumiem jedynie korzyści płynących z używania "?" zamiast „&” w adresach URL:Separator parametrów w adresach URL, przypadek niewłaściwie używanego znaku zapytania

question mark vs ampersand

To sprawia, że ​​życie jest łatwiejsze, jeśli nikt nie używamy inny charakter jako pierwszy znak separatora. Czy możesz podać sensowne wyjaśnienie?

EDIT: po dalszych badań odkryłem, że „&” może być częścią nazwy pliku (warunki & conditions.html), więc „?” jest dobrym separatorem. Ale wciąż myślę, używając "?" dla separatorów czyni życie łatwiejszym (od wytwórców URL i parserami punktu widzenia):

question mark as separator

Czy jest jakaś korzyść ze stosowania „&” co nie jest oczywiste na pierwszy rzut oka?

Odpowiedz

7

Z punktu widzenia specyfikacji URI (RFC 3986) jedynym separatorem jest tutaj "?". format zapytania jest nieprzejrzysty; ampersandy to po prostu coś, czego HTML używa do przesyłania formularzy.

+0

Więc opracowali w różnych czasach? HTML był przed URI? –

+0

Tak, opracowali osobno, ale nie, HTML nie istniał przed URI (poprzednio zwanymi adresami URL). –

+4

Odpowiedź brzmi: "HTML i URI zostały opracowane osobno, a twórcy HTML nie zauważyli korzyści z używania? Jako separatora parametrów zamiast &" z wyjątkiem tego, że powiedziałbym "nie zauważyli" jest niepoprawny.Mogą mieć dobry powód. –

4

Odpowiedź jest dość dużo w tym artykule - http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/. Aby podkreślić to, tu idzie:

Zapytanie jest preferowanym sposobem wysłać niektórych parametrów do zasobu na serwerze. Są to pary klucz = wartość i są oddzielone od reszty adresu URL przez? (znak zapytania) i są zwykle oddzielone znakami znakami & (znak ampersand). To, czego nie możesz wiedzieć, to fakt, że legalne jest rozdzielenie ich od siebie przez; (średnik), jak również. Następujące adresy URL są równoważne:

http://www.blah.com/some/crazy/path.html?param1=foo&param2=bar

http://www.blah.com/some/crazy/path.html?param1=foo;param2

-1

RFC 3896 (https://www.ietf.org/rfc/rfc3986.txt) określa ogólne i sub ograniczniki ... '?' jest ogólnym, "&" i ";" są sub. Specyfikacja jest o tym całkiem jasna.

W tym przypadku ten ostatni "?" znaki będą traktowane jako część zapytania. Jeśli analizator składni zapytania zastosuje się ściśle do specyfikacji, wówczas przekaże całe zapytanie do miejsca docelowego aplikacji. Jeśli aplikacja docelowa może dalej przetwarzać ciąg zapytania w sposób, który traktuje znak? jako separator par nazwy-wartości par, który zależy od projektantów aplikacji.

Domyślam się, że to często "po prostu działa", ponieważ kod dzielący ciągi zapytania i oryginalny uri używa wszystkich ograniczników do dopasowania: 1) pierwsze zapytanie jest dzielone na "?" następnie 2) ciąg zapytania jest przetwarzany przy użyciu listy dopasowań znaków, która zawiera znak "?" (tylko wygoda) ... To może się zdarzyć już w wszechobecnych bibliotekach parsujących.

+0

wyjaśnij, co słychać w tobie. – Rondo

Powiązane problemy