Nie widzę dużej różnicy między parametrami a ciągami zapytań w adresie URL. Jaka jest więc różnica i kiedy należy użyć jednego nad drugim?
Nie widzę dużej różnicy między parametrami a ciągami zapytań w adresie URL. Jaka jest więc różnica i kiedy należy użyć jednego nad drugim?
Odpowiedzi:
Składnik zapytania jest oznaczony jako pierwszy ?
w identyfikatorze URI. „Ciąg zapytania” może być synonimem (termin ten nie jest używany w standardzie URI).
Kilka przykładów identyfikatorów URI HTTP ze składnikami zapytania:
http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b
( lista dozwolonych znaków w składniku zapytania )
„Format” składnika zapytania zależy od autorów identyfikatora URI. Powszechną konwencją ( ale niczym więcej niż konwencją, jeśli chodzi o standard URI1) jest użycie komponentu zapytania dla par klucz-wartość, czyli inaczej. Parametry , podobnie jak w poprzednim przykładzie: bar1=a&bar2=b
.
Takie parametry mogą również pojawić się w innych komponentach URI, tj. Path² i fragmencie. Jeśli chodzi o standard URI, to od Ciebie zależy, który komponent i jakiego formatu użyć.
Przykładowy identyfikator URI z parametrami w ścieżce, zapytaniu i fragmencie:
http://example.com/foo;key1=value1?key2=value2#key3=value3
¹ Standard URI mówi o składniku zapytania :
[…] Komponenty zapytania są często używane do przenoszenia informacji identyfikujących w postaci par „klucz = wartość” […]
² Standard URI mówi o składniku ścieżki :
[…] Średnik („;”) i znaki równości („=”) są często używane do oddzielania parametrów i wartości parametrów mających zastosowanie do tego segmentu. Znak zastrzeżony przecinka („,”) jest często używany do podobnych celów.
Parametry to pary klucz-wartość, które mogą pojawić się w ścieżce adresu URL i zaczynają się od znaku średnika ( ;
).
Ciąg zapytania pojawia się po ścieżce (jeśli istnieje) i zaczyna się znakiem zapytania ( ?
).
Zarówno parametry, jak i ciąg zapytania zawierają pary klucz-wartość.
W GET
żądaniu parametry pojawiają się w samym adresie URL:
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
W POST
żądaniu parametry mogą pojawić się w samym adresie URL, ale także w strumieniu danych (zwanym treścią).
Ciąg zapytania jest zawsze częścią adresu URL.
Parametry mogą być ukryte w form-data
strumieniu danych podczas korzystania z metody POST, więc mogą nie pojawiać się w adresie URL. Tak, POST
żądanie może definiować parametry jako dane formularza oraz w adresie URL, i nie jest to niespójne, ponieważ parametry mogą mieć kilka wartości.
Jak dotąd nie znalazłem wytłumaczenia tego zachowania. Wydaje mi się, że czasami przydatne może być „odkrycie” parametrów z POST
żądania, a nawet pozwolenie kodowi obsługującemu GET
żądanie współdzielić niektóre części z kodem obsługującym plik POST
. Oczywiście może to działać tylko z kodem serwera obsługującym parametry w adresie URL.
Dopóki nie uzyskasz lepszego wglądu, sugeruję używanie parametrów tylko w form-data
strumieniu danych POST
żądań.
Źródła: