Czy adres URL jest http://example.com/foo?bar
prawidłowy?
Szukam linku do czegoś oficjalnego, który mówi w ten czy inny sposób. Prosta odpowiedź tak / nie lub anegdotyczne dowody nie wystarczą.
url
query-parameters
Conley Owens
źródło
źródło
Odpowiedzi:
URI RFC nie określa format ciągu zapytania. Chociaż uznaje się, że ciąg zapytania często będzie zawierał pary nazwa-wartość, nie jest to wymagane (np. Często będzie zawierał inny identyfikator URI).
HTML ustala, że formularz przesłany przez HTTP GET powinien zakodować wartości formularza jako pary nazwa-wartość w postaci „? Klucz1 = wartość1 & klucz2 = wartość2 ...” (odpowiednio zakodowane). Parsowanie ciągu zapytania odbywa się zgodnie z kodem po stronie serwera (np. Mechanizm serwletów Java).
Nie identyfikujesz, jakiej struktury po stronie serwera używasz, jeśli w ogóle, ale jest możliwe, że twoja struktura po stronie serwera może założyć, że ciąg zapytania zawsze będzie w parach nazwa-wartość i może się zakrztusić na ciągu zapytania, który nie jest w tym formacie (np
?bar
.). Jeśli jest to Twój własny niestandardowy kod analizujący ciąg zapytania, po prostu musisz upewnić się, że obsługujesz ten format ciągu zapytania. Jeśli jest to framework, musisz zapoznać się z dokumentacją lub po prostu przetestować, aby zobaczyć, jak jest obsługiwany.źródło
isindex
Magianame
z HTML5 umożliwia wysyłanie ciąg kwerendy bez klucz-wartość w formacie stackoverflow.com/a/37579004/895245Są całkowicie poprawne. Można by je uznać za odpowiednik dużego, umięśnionego faceta stojącego cicho za posłańcem mafii. Facet nie ma imienia i nic nie mówi, ale sama jego obecność przekazuje informacje.
źródło
„Schemat„ http ”służy do lokalizowania zasobów sieciowych za pośrednictwem protokołu HTTP. Ta sekcja definiuje specyficzną dla schematu składnię i semantykę adresów URL http.” http://www.w3.org/Protocols/rfc2616/rfc2616.html
Więc tak, wszystko jest ważne po znaku zapytania. Twój serwer może interpretować inaczej, ale anegdotycznie , możesz zobaczyć, że niektóre języki traktują to jako wartość logiczną, która jest prawdą, jeśli jest wymieniona.
źródło
Tak, to jest ważne.
Jeśli ktoś chce po prostu sprawdzić, czy parametr istnieje, czy nie, jest to jeden ze sposobów.
źródło
Specyfikacja URI
Jedyną istotną częścią specyfikacji URI jest wiedzieć, że wszystko między pierwszym
?
a pierwszym#
odpowiada definicji zapytania w specyfikacji. Może zawierać dowolne znaki, takie jak[:/.?]
. Oznacza to, że ciąg zapytania, taki jak?bar
lub,?ten+green+apples
jest prawidłowy.Znajdź RFC 3986 tutaj
Specyfikacja HTML
isindex
nie jest znacząco HTML5.Został dostarczony jako przestarzały do użycia jako pierwszy element tylko w formularzu i przesyła bez nazwy.
Ostatni raz, kiedy isindex był obsługiwany, był HTML3 . Jest używany w HTML5, aby zapewnić łatwiejszą kompatybilność wsteczną.
Wsparcie w bibliotekach
Obsługa tego formatu URI w bibliotekach jest różna, jednak niektóre biblioteki zapewniają obsługę starszych wersji, aby ułatwić korzystanie z
isindex
.Perl URI.pm (wsparcie specjalne)
Niektóre biblioteki, takie jak URI Perla, udostępniają metody analizowania tego rodzaju struktur
Node.js
url
(brak specjalnej obsługi)Jako kolejny znacznie częstszy przykład,
node.js
przyjmuje normalną trasę i ułatwia analizęparseQueryString
)Większość innych interfejsów API analizujących identyfikatory URI postępuje podobnie.
parse_url
jest podobną implementacją, ale zwraca tylko ciąg dla zapytania. Przetwarzanie do obiektuk=>v
wymagańparse_string()
źródło
Obowiązuje: patrz Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Składniki składni) .
źródło
isindex
przestarzała magianame
z HTML5Ta przestarzała funkcja umożliwia przesłanie formularza do wygenerowania takiego adresu URL, dostarczając dalszych dowodów, że jest on prawidłowy dla HTML. Na przykład:
generuje adres URL typu:
Standard: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
jest jednak przestarzałe, jak wspomniano na: https://stackoverflow.com/a/41689431/895245źródło
Jak wszystkie opisane odpowiedzi, jest to całkowicie poprawne do sprawdzenia, szczególnie w przypadku rzeczy typu boolean
Oto prosta funkcja umożliwiająca pobranie ciągu zapytania według nazwy:
a teraz chcesz sprawdzić, czy ciąg zapytania, którego szukasz, istnieje, czy nie, możesz zrobić prostą rzecz, taką jak:
exampleQueryString
będziefalse
, jeśli funkcja nie może znaleźć ciągu kwerendy, w przeciwnym razie będzietrue
.źródło