Moje pytanie: kiedy adresy URL zostały po raz pierwszy zaprojektowane, dlaczego rozróżniana jest wielkość liter? Pytam o to, ponieważ wydaje mi się (np. Laikowi), że rozróżnianie wielkości liter byłoby preferowane, aby zapobiec niepotrzebnym błędom i uprościć i tak już skomplikowany ciąg tekstu.
Ponadto, czy istnieje rzeczywisty cel / korzyść posiadania adresu URL z rozróżnianiem wielkości liter (w przeciwieństwie do zdecydowanej większości adresów URL, które prowadzą do tej samej strony bez względu na wielkie litery)?
Wikipedia, na przykład, jest witryną wrażliwą na wielkość liter (z wyjątkiem pierwszego znaku):
url
case-sensitive
Kyle
źródło
źródło
html
,htm
AHtml
wszystkie przekierowaniaHTML
. Ale co ważne, ze względu na olbrzymi przedmiot może istnieć więcej niż jedna strona, na której adres URL różni się tylko wielkością liter. Na przykład: Latex i LaTeXOdpowiedzi:
Dlaczego w adresie URL nie jest rozróżniana wielkość liter?
Rozumiem, że może to wyglądać jak prowokujący (i „diabelski adwokat”) retoryczne pytanie, ale myślę, że warto to rozważyć. Projekt HTTP polega na tym, że „klient”, który zwykle nazywamy „przeglądarką internetową”, prosi „serwer sieciowy” o dane.
Wydano wiele, wiele różnych serwerów WWW. Microsoft wydał IIS z systemami operacyjnymi Windows Server (i innymi, w tym Windows XP Professional). Unix ma duże wagi, takie jak nginx i Apache, nie wspominając o mniejszych ofertach, takich jak wewnętrzny httpd OpenBSD, thttpd lub lighttpd. Ponadto wiele urządzeń z obsługą sieci ma wbudowane serwery sieciowe, których można używać do konfigurowania urządzenia, w tym urządzenia przeznaczone do określonych celów w sieci, takie jak routery (w tym wiele punktów dostępu Wi-Fi i modemów DSL) oraz inne urządzenia, takie jak drukarki lub UPS (zasilacze bezprzerwowe zasilane bateryjnie), które mogą mieć połączenie sieciowe.
Pytanie „Dlaczego w adresach URL rozróżniana jest wielkość liter?” Brzmi zatem: „Dlaczego serwery WWW traktują adres URL jako rozróżniający małe i wielkie litery?” Właściwa odpowiedź brzmi: nie wszyscy tak robią. Co najmniej jeden serwer WWW, który jest dość popularny, zwykle NIE rozróżnia wielkości liter. (Serwer WWW to IIS.)
Kluczowy powód różnych zachowań między różnymi serwerami internetowymi sprowadza się prawdopodobnie do prostoty. Prostym sposobem na stworzenie serwera WWW jest zrobienie tego samego, co w przypadku sposobu, w jaki system operacyjny komputera / urządzenia lokalizuje pliki. Wiele razy serwery sieciowe lokalizują plik w celu udzielenia odpowiedzi. Unix został zaprojektowany na komputerach wyższej klasy, więc Unix zapewniał pożądaną funkcjonalność pozwalającą na pisanie wielkimi i małymi literami. Unix postanowił traktować wielkie i małe litery jako różne, ponieważ, cóż, są różne. To jest prosta, naturalna rzecz do zrobienia. Historia Windows nie uwzględnia wielkości liter ze względu na chęć obsługi już utworzonego oprogramowania, a historia ta sięga wstecz do DOS, który po prostu nie obsługiwał małych liter, być może w celu uproszczenia rzeczy z mniej wydajnymi komputerami, które zużywały mniej pamięci. Ponieważ te systemy operacyjne są różne, w rezultacie proste (wczesne wersje) serwerów WWW odzwierciedlają te same różnice.
Teraz, z całym tym tłem, oto kilka konkretnych odpowiedzi na konkretne pytania:
Dlaczego nie? Jeśli wszystkie standardowe serwery internetowe nie rozróżniają wielkości liter, oznaczałoby to, że serwery WWW przestrzegały zestawu reguł określonych przez standard. Po prostu nie było reguły, która mówi, że przypadek należy zignorować. Powodem braku reguły jest po prostu brak takiej reguły. Po co zawracać sobie głowę niepotrzebnymi zasadami?
Adresy URL zostały zaprojektowane dla maszyn do przetwarzania. Chociaż dana osoba może wpisać pełny adres URL w pasku adresu, nie była to znacząca część zamierzonego projektu. Zamierzony projekt polega na tym, że ludzie będą podążać za (hiperłączami). Jeśli robią to przeciętny laicy, to naprawdę nie obchodzi ich, czy niewidoczny adres URL jest prosty czy skomplikowany.
Piąty numer odpowiedzi Williama Hay'a wymienia jedną zaletę techniczną: adresy URL mogą być skutecznym sposobem, aby przeglądarka internetowa wysłała trochę informacji do serwera internetowego, a więcej informacji można dołączyć, jeśli istnieją mniejsze ograniczenia, więc rozróżniaj wielkość liter ograniczenie ograniczyłoby ilość informacji, które można zawrzeć.
Jednak w wielu przypadkach wrażliwość na wielkość liter nie jest szczególnie atrakcyjna, o czym świadczy fakt, że usługi IIS zwykle nie przejmują się tym.
Podsumowując, najbardziej przekonującym powodem jest prawdopodobnie po prostu prostota dla tych, którzy zaprojektowali oprogramowanie serwera WWW, szczególnie na platformie rozróżniającej wielkość liter, takiej jak Unix. (HTTP nie był czymś, co wpłynęło na oryginalny design Uniksa, ponieważ Unix jest znacznie starszy niż HTTP).
źródło
W adresach URL nie jest rozróżniana wielkość liter, tylko ich części.
Na przykład w adresie URL nie jest rozróżniana wielkość liter
https://google.com
,W odniesieniu do RFC 3986 - Uniform Resource Identifier (URI): Ogólna składnia
Po pierwsze, z Wikipedii , URL wygląda następująco:
(Usunąłem
user:password
część, ponieważ nie jest interesująca i rzadko używana)scheme
:host
:path
:query
:fragment
:Tak,
scheme
ihost
są wielkości liter.W pozostałej części adresu URL rozróżniana jest wielkość liter.
Dlaczego wielkość
path
liter ma znaczenie?To wydaje się być głównym pytaniem.
Trudno jest odpowiedzieć „dlaczego” coś zostało zrobione, jeśli nie zostało to udokumentowane, ale możemy zgadywać.
Wybrałem bardzo szczegółowe cytaty ze specyfikacji, z naciskiem na dane .
Spójrzmy jeszcze raz na adres URL:
Lokalizacja - lokalizacja ma postać kanoniczną i nie uwzględnia wielkości liter. Dlaczego? Prawdopodobnie po to, byś mógł kupić nazwę domeny bez konieczności kupowania tysięcy wariantów.
Dane - dane są używane przez serwer docelowy, a aplikacja może wybrać, co to znaczy . Nie ma sensu, aby dane rozróżniały wielkość liter. Aplikacja powinna mieć więcej opcji, a zdefiniowanie rozróżniania wielkości liter w specyfikacji ograniczy te opcje.
Jest to również przydatne rozróżnienie dla HTTPS: dane są szyfrowane , ale host jest widoczny.
To jest użyteczne?
Rozróżnianie wielkości liter ma swoje pułapki, jeśli chodzi o buforowanie i kanoniczne adresy URL, ale z pewnością jest użyteczne. Kilka przykładów:
/a5B
mogą być inne niż/a5b
źródło
http:
a powiązane schematy oznaczają, że adres URL odnosi się do nazwy hosta DNS. DNS na długo przed wynalezieniem adresów URL nie rozróżniał wielkości liter w kodzie ASCII. Zobacz str. 55 ietf.org/rfc/rfc883.txtProsty. System operacyjny rozróżnia małe i wielkie litery. Serwery WWW na ogół nie dbają o to, chyba że w pewnym momencie będą musiały uderzyć w system plików. To tutaj Linux i inne systemy operacyjne oparte na Uniksie egzekwują reguły systemu plików, w których rozróżnianie wielkości liter ma duże znaczenie. Dlatego w IIS nigdy nie rozróżniano wielkości liter; ponieważ Windows nigdy nie rozróżniał wielkości liter.
[Aktualizacja]
W komentarzach (od momentu usunięcia) pojawiły się mocne argumenty na temat tego, czy adresy URL mają związek z systemem plików, jak już powiedziałem. Te argumenty stały się gorące. Wierzenie, że nie ma związku, jest niezwykle krótkowzroczne. Tam jest absolutnie! Pozwól mi wyjaśnić dalej.
Programiści aplikacji zazwyczaj nie są programistami wewnętrznymi systemów. Nie obrażam się. Są to dwie odrębne dyscypliny, a wiedza wewnętrzna nie jest wymagana do pisania aplikacji, gdy aplikacje mogą po prostu nawiązywać połączenia z systemem operacyjnym. Ponieważ programiści aplikacji nie są programistami wewnętrznymi systemów, omijanie usług systemu operacyjnego nie jest możliwe. Mówię to, ponieważ są to dwa osobne obozy i rzadko się krzyżują. Aplikacje są napisane, aby z reguły korzystać z usług systemu operacyjnego. Oczywiście są rzadkie wyjątki.
Kiedy zaczęły pojawiać się serwery WWW, twórcy aplikacji nie próbowali ominąć usług systemu operacyjnego. Było tego kilka przyczyn. Po pierwsze, nie było to konieczne. Po drugie, programiści aplikacji ogólnie nie wiedzieli, jak ominąć usługi systemu operacyjnego. Po trzecie, większość systemów operacyjnych była albo wyjątkowo stabilna i solidna, albo wyjątkowo prosta i lekka i nie warta kosztów.
Należy pamiętać, że wczesne serwery WWW działały na drogich komputerach, takich jak serwery DEC VAX / VMS i Unix dnia (Berkeley i Ultrix, a także inne) na komputerach z ramką główną lub środkową, a wkrótce potem lekkie komputery, takie jak PC i Windows 3.1. Kiedy zaczęły pojawiać się bardziej nowoczesne wyszukiwarki, takie jak Google w latach 1997/8, Windows przeniósł się do Windows NT, a inne systemy operacyjne, takie jak Novell i Linux, również zaczęły obsługiwać serwery sieciowe. Apache był dominującym serwerem sieciowym, choć były też inne, takie jak IIS i O'Reilly, które również były bardzo popularne. Żadna z nich nie omijała usług systemu operacyjnego. Prawdopodobnie żaden z serwerów WWW nie robi tego nawet dzisiaj.
Wczesne serwery WWW były dość proste. Nadal są dzisiaj. Każde żądanie dotyczące zasobu za pośrednictwem żądania HTTP, które istnieje na dysku twardym, zostało złożone przez serwer WWW za pośrednictwem systemu plików OS.
Systemy plików to raczej proste mechanizmy. Po złożeniu wniosku o dostęp do pliku, jeśli plik ten istnieje, jest on przekazywany do podsystemu autoryzacji, a jeśli zostanie spełniony, pierwotne żądanie jest spełnione. Jeśli zasób nie istnieje lub nie jest autoryzowany, system zgłasza wyjątek. Gdy aplikacja wysyła żądanie, wyzwalacz jest ustawiany i aplikacja czeka. Po odebraniu żądania wyzwalacz jest generowany, a aplikacja przetwarza odpowiedź na żądanie. Nadal działa to w ten sposób dzisiaj. Jeśli aplikacja stwierdzi, że żądanie zostało spełnione, jest kontynuowane, jeśli się nie powiedzie, aplikacja wykonuje warunek błędu w swoim kodzie lub umiera, jeśli nie zostanie obsłużona. Prosty.
W przypadku serwera WWW, zakładając, że zostało wysłane żądanie adresu URL ścieżki / pliku, serwer internetowy pobiera część ścieżki / pliku żądania adresu URL (URI) i wysyła żądanie do systemu plików i jest albo spełniony lub zgłasza wyjątek. Serwer WWW przetwarza następnie odpowiedź. Jeśli na przykład zostanie znaleziona żądana ścieżka i plik, a podsystem autoryzacji uzyska dostęp, serwer WWW przetwarza żądanie We / Wy w normalny sposób. Jeśli system plików zgłasza wyjątek, serwer WWW zwraca błąd 404, jeśli plik nie został znaleziony, lub błąd 403, jeśli kod przyczyny jest nieautoryzowany.
Ponieważ w niektórych systemach operacyjnych rozróżniana jest wielkość liter, a systemy plików tego typu wymagają dokładnych dopasowań, żądana ścieżka / plik serwera WWW musi dokładnie odpowiadać temu, co istnieje na dysku twardym. Powód tego jest prosty. Serwery sieciowe nie odgadują, co masz na myśli. Żaden komputer tego nie robi bez zaprogramowania. Serwery WWW po prostu przetwarzają żądania w momencie ich otrzymania. Jeśli część ścieżki / pliku żądania adresu URL przekazywana bezpośrednio do systemu plików nie pasuje do tego, co znajduje się na dysku twardym, system plików zgłasza wyjątek, a serwer WWW zwraca błąd 404 Nie znaleziono.
To naprawdę tak proste osoby. To nie jest rakieta. Istnieje bezwzględna zależność między ścieżką / częścią pliku adresu URL a systemem plików.
źródło
Adresy URL podają się za lokalizator zasobów UNIFORM i mogą wskazywać na zasoby sprzed sieci. Niektóre z nich uwzględniają wielkość liter (np. Wiele serwerów ftp), a adresy URL muszą być w stanie reprezentować te zasoby w racjonalnie intuicyjny sposób.
Niewrażliwość na wielkość liter wymaga więcej pracy podczas wyszukiwania dopasowania (w systemie operacyjnym lub powyżej).
Jeśli zdefiniujesz adresy URL jako rozróżniane małe i wielkie litery, poszczególne serwery mogą je zaimplementować jako małe i małe litery, jeśli chcą. Odwrotna sytuacja nie jest prawdą.
Niewrażliwość na wielkość liter może być nietrywialna w kontekście międzynarodowym: https://en.wikipedia.org/wiki/Dotted_and_dotless_I . Również RFC1738 zezwalał na używanie znaków spoza zakresu ASCII, pod warunkiem, że zostały one zakodowane, ale nie określiły zestawu znaków. Jest to dość ważne w przypadku czegoś, co nazywa się siecią WORLD. Zdefiniowanie adresów URL jako bez rozróżniania wielkości liter otworzyłoby wiele możliwości dla błędów.
Jeśli próbujesz spakować dużo danych do identyfikatora URI (np. Identyfikator URI danych ), możesz zapakować więcej, jeśli duże i małe litery są różne.
źródło
Ukradłem z bloga Old New Thing nawyk zbliżania się do pytań w formie „dlaczego tak się dzieje?” z pytaniem „jak wyglądałby świat, gdyby tak nie było?”
Załóżmy, że skonfigurowałem serwer WWW, aby udostępniać sobie pliki dokumentów z folderu, aby móc je czytać w telefonie, gdy byłem poza biurem. Teraz, w folderze Moje dokumenty, mam trzy pliki
todo.txt
,ToDo.txt
aTODO.TXT
(wiem, ale to dla mnie sens, kiedy zrobiłem plików).Jakiego adresu URL chciałbym użyć, aby uzyskać dostęp do tych plików? Chciałbym uzyskać do nich dostęp w intuicyjny sposób, przy użyciu
http://www.example.com/docs/filename
.Powiedzmy, że mam skrypt, który pozwala mi dodać kontakt do mojej książki adresowej, co mogę zrobić również przez Internet. Jak powinno to brać jego parametry? Cóż, chciałbym go używać jak:
http://www.example.com/addcontact.php?name=Tom McHenry von der O'Reilly
. Ale jeśli nie byłoby sposobu, abym określił nazwę dla każdego przypadku, jak miałbym to zrobić?Jak rozróżnić strony wiki Cat i CAT, Text i TEXT, lateks i LaTeX? Chyba disambiguje strony, ale wolę po prostu dostać to, o co prosiłem.
Ale i tak wszystko wydaje się odpowiadać na złe pytanie.
Pytanie, które, jak sądzę, naprawdę zadawałeś, brzmi: „Dlaczego serwery WWW 404 robią to tylko dla różnicy przypadków, gdy są to komputery zaprojektowane z myślą o ułatwieniu życia i doskonale potrafią znaleźć przynajmniej najbardziej oczywiste warianty przypadków w Wpisany adres URL, który zadziała? ”
Odpowiedź na to jest taka, że chociaż niektóre strony to zrobiły (i lepiej sprawdzają też inne literówki), nikt nie pomyślał, że warto zmienić domyślną stronę błędu 404 serwera WWW, aby to zrobić ... ale może powinni?
źródło
Chociaż powyższa odpowiedź jest poprawna i dobra. Chciałbym dodać więcej punktów.
Aby lepiej zrozumieć, należy zrozumieć podstawową różnicę między serwerem Windows Unix (Linux) a Windows. W Uniksie rozróżniana jest wielkość liter, a system Windows nie rozróżnia wielkości liter.
Protokół HTTP został opracowany lub zaczął być wdrażany około 1990 roku. Protokół HTTP został zaprojektowany przez inżynierów pracujących w instytutach CERN, przez większość dni naukowcy korzystali z maszyn uniksowych, a nie z Windows.
Większość naukowców znała Uniksa, więc mógł mieć na nie wpływ system plików w stylu Uniksa.
Serwer Windows został wydany po 2000 roku. Na długo przed tym, jak serwer Windows stał się popularny, protokół HTTP był dobrze dojrzały i specyfikacja była kompletna.
To może być powód.
źródło
Jak należy przeczytać „dlaczego tak zostało zaprojektowane?” pytanie? Czy pytasz o historycznie dokładny opis procesu decyzyjnego, czy pytasz „dlaczego ktoś miałby to tak zaprojektować?”?
Bardzo rzadko można uzyskać historycznie dokładne konto. Czasami, gdy decyzje podejmowane są w komitetach normalizacyjnych, istnieje dokumentalna ścieżka prowadząca debatę, ale we wczesnych dniach Internetu decyzje podejmowane były w pośpiechu przez kilka osób - w tym przypadku prawdopodobnie przez samego TimBL - a uzasadnienie jest mało prawdopodobne zostać spisane. Ale TimBL przyznał, że popełnił błędy w projektowaniu adresów URL - patrz http://www.dailymail.co.uk/sciencetech/article-1220286/Sir-Tim-Berners-Lee-admits-forward-slashes-web-address -mistake.html
Na początku adresy URL były mapowane bardzo bezpośrednio na nazwy plików, a pliki były na ogół na komputerach z systemem uniksowym, a na maszynach z systemem uniksowym rozróżniane są wielkie i małe litery. Domyślam się, że stało się tak dla wygody implementacji, a użyteczność (dla użytkowników końcowych) nigdy nie była brana pod uwagę. Znów na początku wszyscy użytkownicy byli programistami uniksowymi.
źródło
Nie ma to nic wspólnego z miejscem zakupu domeny, w systemie DNS nie jest rozróżniana wielkość liter. Ale system plików na serwerze, którego używasz do hostingu, to.
To naprawdę nie jest problem i jest dość powszechny na hostach * nix. Upewnij się tylko, że wszystkie linki, które piszesz na swoich stronach, są prawidłowe i nie będziesz mieć problemu. Aby to ułatwić, zalecamy zawsze nazywać swoje strony małymi literami, wtedy nie trzeba dwukrotnie sprawdzać nazwy podczas pisania linku.
źródło
Closetnoc ma rację co do systemu operacyjnego. Niektóre systemy plików traktują tę samą nazwę z inną obudową jak różne pliki.
Tak. aby uniknąć powielania problemów z treścią.
Jeśli masz na przykład następujące adresy URL:
i wszystkie wskazywały na dokładnie tę samą stronę z dokładnie taką samą treścią, wówczas powielalibyśmy treść, i jestem pewien, że jeśli masz konto w konsoli wyszukiwania Google (narzędzia dla webmasterów), Google to ci wskaże.
Sugeruję, aby zrobić, jeśli jesteś w takiej sytuacji, aby użyć wszystkich małych adresów URL, a następnie przekieruj adresy URL zawierające co najmniej jedną wielką literę do wersji z małymi literami. Na powyższej liście adresów URL przekieruj wszystkie adresy URL na pierwszy adres URL.
źródło
page-1
byłby taki sam jakPAGE-1
.RewriteRule ^request-uri$ /targetscript.php [NC]
zapisana w pliku .htaccess będzie pasowaćhttp://example.com/request-uri
, ahttp://example.com/ReQuEsT-Uri
ponieważ[NC]
wskazuje, że obudowa nie ma znaczenia przy ocenie, że jednym wyrażeniem regularnym.Rozróżnianie wielkości liter ma wartość.
Jeśli jest 26 liter, każda z możliwością wielkich liter, to 52 znaki.
4 znaki mają możliwość kombinacji 52 * 52 * 52 * 52, co daje 7311616 kombinacji.
Jeśli nie możesz użyć wielkich liter, liczba kombinacji wynosi 26 * 26 * 26 * 26 = 456976
Istnieje ponad 14 razy więcej kombinacji dla 52 znaków niż dla 26. Tak więc do przechowywania danych, adresy URL mogą być krótsze i więcej informacji może być przesyłanych przez sieci z mniejszą liczbą przesyłanych danych.
Właśnie dlatego youtube używa adresów URL takich jak https://www.youtube.com/watch?v=xXxxXxxX
źródło