2010-02-28 18 views

Odpowiedz

69

Miałem to samo pytanie i napisałem a small post about this in my blog

Powodem podsumowano tutaj (Znalazłem to na forum):

* _path są dla widoków bo ahrefs są pośrednio powiązane z obecny adres URL. Więc byłoby to stratą bajtów, aby powtarzać to w kółko. Jednak w kontrolerze * _url jest potrzebne do przekierowania, ponieważ specyfikacja HTTP nakazuje, aby nagłówek Location: w przekierowaniach 3xx był kompletnym adresem URL.

Here is another explanation który mówi, że to zależy od tego, czy musimy użyć bezwzględnego URI podczas łączenia się z witryną SSL z witryny non-SSL, i vice versa.

Co przeczytałem do tej pory, nie sugeruje, że którykolwiek z nich jest bezpieczniejszy niż inne. To naprawdę sprowadza się do tego, co jest "właściwe".

+1

Wielkie dzięki. Znalazłem to przydatne. Tak więc w kontrolerach używamy "_url", podczas gdy w widokach możemy użyć "_path", chociaż "_url" może być tam również użyty. – MohamedSanaulla

+10

Nie musisz używać * _url dla kontrolerów, ścieżka będzie działać równie dobrze. Powinieneś używać '_url' podczas wyświetlania trasy do źródeł zewnętrznych. –

+3

Aby wyjaśnić trochę więcej: wyjście '_path' będzie działało równie dobrze dla nagłówka' Location' w przekierowaniu. Przeglądarka zinterpretuje to jako przekierowanie relatywne do root. –

67

path jest względny, natomiast url jest bezwzględny.

+2

Raczej zwięzłe. Lubię zwięźle. ;) +1 – sholsinger

+2

Idealny. Użycie _url jest wymagane w kontrolerze (po stronie serwera), a _path jest w widoku (koniec przeglądarki). – Arun

+0

Krótka, zwięzła odpowiedź +1 – mjwatts

1

Bezpiecznie, jeśli nie chcesz ujawniać wszystkich przekazanych danych, wtedy ścieżka _ jest lepsza, ponieważ generuje względny URL, np. "/ Login", ale _path daje "http://localhost:3000/login". Proszę odnieść się do tego wpisu na blogu i znalazłem kiedyś z powrotem w odniesieniu do tego samego. When _url is better than _path

+3

Obawiam się, że jest niepoprawna. Używanie _path ze względów bezpieczeństwa nie zapewnia żadnych zabezpieczeń. Byłoby to tak samo, jak powiedzenie, że adres IP serwera WWW powinien być utrzymywany w tajemnicy, gdy proste żądanie DNS ujawni te informacje. – jefflunt

+1

Podobnie, z podanym wyżej przykładem dotyczącym ukrycia hosta i portu "localhost: 3000" dla bezpieczeństwa, jest niepoprawny. Odkrycie tych informacji jest proste dzięki szeroko dostępnemu narzędziu do skanowania sieciowego. – jefflunt

33

Przykładem różnicy do zasobu o nazwie "użytkownik":

users_url # => http://localhost:3000/users 
users_path # => /users 
1

_url poda całą ścieżkę. Ponieważ zawiera nazwę domeny i protokół, możesz jej użyć np. aby wysłać wiadomość e-mail lub przekierować do innej domeny, itp.

_path zwróci ścieżkę, która jest po "/" bez domeny, protokołu itp. Możesz więc używać go od czasu do czasu (chyba), gdzie nie masz t wymagają szczegółów domeny.

0

_url pomocniczy tworzy łańcuch zawierający cały adres, zaś _path pomocniczy tworzy łańcuch zawierający ścieżkę względną od korzenia do stosowania, np .:

photos_url # => "http://www.example.com/photos" 
photos_path # => "/photos" 

Zgodnie Rails Guides - Routing.

Powiązane problemy