2011-06-22 11 views
5

Według Section 3.3, Path Component of RFC2396 - Uniform Resource Identifiers,Czy którekolwiek segmenty ścieżki identyfikatora URI mogą zawierać komponent zapytania?

Ścieżka może składać się z szeregu odcinków częściowych rozdzielonych pojedynczym cięciem znak „/”. W segmencie ścieżki znaki "/", ";", "=" i "?" są zarezerwowane. Każdy segment ścieżki może zawierać sekwencję parametrów, oznaczoną średnikiem ";" postać. Parametry nie są znaczące dla analizowania odniesień względnych.

Jednak nigdy nie widziałem adresu URL z parametrami zapytania w żadnym innym segmencie niż końcowy. Więc nie jestem pewien, czy czytam to poprawnie.

Czy prawidłowy adres URL to http://www.url.com/segment1?seg1param1=val1/page.html?pageparam1=val2?

Odpowiedz

8

Co RFC ma na myśli coś takiego:

http://www.example.com/foo/bar;param=value/baz.html 

To może być interpretowana jako ścieżka /foo/bar/baz.html z parametrem param=value do segmentu bar. Żadne znaki zapytania nie są używane.

Zauważ, że RFC 2396 został zastąpiony przez RFC 3986, który pomija określenie parametrów segmentu specyficznych na rzecz ogólnego zauważyć, że implementacje mogą (i robią) robić różne rzeczy, aby umieścić parametry segmentu specyficzne:

Oprócz segmentów punktowych w ścieżkach hierarchicznych segment ścieżki to uznawany za nieprzezroczysty według ogólnej składni. Produkujące aplikacje URI często używają zastrzeżonych znaków dozwolonych w segmencie do ograniczania podtypów specyficznych dla programów specyficznych dla schematu lub dereferencji-obsługi.W przypadku przykładu znaki zarezerwowane średnikami (";") i równymi ("=") są często używane w celu ograniczenia parametrów i wartości parametrów mających zastosowanie do tego segmentu. Znak zarezerwowany przecinkami (",") jest często używany do podobnych celów. Na przykład jeden producent URI może użyć segmentu , takiego jak "name; v = 1.1", aby wskazać odniesienie do wersji 1.1 z "name", podczas gdy inny może użyć segmentu takiego jak "name, 1.1" do podobnie. Typy parametrów mogą być zdefiniowane przez specyficzną dla schematu semantykę , ale w większości przypadków składnia parametru jest specyficzna dla implementacji algorytmu dereferencji URI.

+0

Nie wiedziałem, że specyfikacja została przestarzała. Przejdę teraz do zaktualizowanego. – smartcaveman

+0

Dodatek D2 "Modyfikacje" były również szczególnie pomocne ... Dziękuję bardzo, nigdy bym tego nie wymyślił po prostu czytając przestarzałą specyfikację – smartcaveman

+0

, jeśli używane są znaki zapytania, to staje się zapytaniem? – Anthony

0

Zgodnie z moim odczytem RFC 2396, nr. Znak ? jest zarezerwowaną postacią i służy wyłącznie do ograniczania segmentu zapytania. Znak ? nie jest dozwolony ani w ścieżce, ani w segmencie zapytania.

W tym przykładzie pierwszy ? oznacza początek segmentu zapytania. Drugi ? znajduje się wewnątrz segmentu zapytania i jest niedozwolony.

0

Sądzę, że można by się z tym uporać, a większość serwerów internetowych będzie je przetwarzać, ale nie sądzę, że można uzyskać oczekiwane rezultaty. To jest pageparam1 = wartość val2 nie podlegałaby ocenie.

Jeśli chcesz takie parametry, zawsze możesz użyć symbolu # (tak jak teraz wiele GUI opartych na javascriptach).

1

Kiedy patrzysz na gramatykę, która jest tuż poniżej, jest napisane:

path   = [ abs_path | opaque_part ] 

    path_segments = segment *("/" segment) 
    segment  = *pchar *(";" param) 
    param   = *pchar 

    pchar   = unreserved | escaped | 
        ":" | "@" | "&" | "=" | "+" | "$" | "," 

Segment składa się z PChar i param, param jest sama w sobie PChar. Kiedy nadal czytamy, absolutnie nie ma "?" znak w elementach znakowych pchar. Zatem parametry nie mogą mieć żadnego "?" I nie może być "?" w segmentach.

Zgadzam się z odpowiedzią Edwarda Thomsona, który mówi, że "?" ograniczaj tylko segment zapytania i nie można go używać wewnątrz ścieżki.

Powiązane problemy