Perché gli URL fanno distinzione tra maiuscole e minuscole?


54

La mia domanda: quando gli URL sono stati progettati per la prima volta, perché la distinzione tra maiuscole e minuscole è diventata una funzionalità? Lo chiedo perché mi sembra (cioè un laico) che la distinzione tra maiuscole e minuscole sarebbe preferibile per prevenire errori inutili e semplificare una stringa di testo già complicata.

Inoltre, esiste un reale scopo / vantaggio nell'avere un URL con distinzione tra maiuscole e minuscole (al contrario della stragrande maggioranza degli URL che puntano alla stessa pagina, indipendentemente dalla capitalizzazione)?

Wikipedia, ad esempio, è un sito Web sensibile alle lettere maiuscole (ad eccezione del primo carattere):

https://en.wikipedia.org/wiki/St Un ck_Exchange è DOA.


11
Ovviamente non esegui IIS su Windows
John Conde

53
Immagino che itscrap.com, expertexchange e whorepresents.com preferirebbero che più persone usassero nomi sensibili al maiuscolo / minuscolo. Per ulteriori informazioni, consultare boredpanda.com/worst-domain-names .
Eric Towers,

22
Gli URL sono stati progettati quando i dinosauri resi su sistemi Unix vagavano per la Terra e Unix fa distinzione tra maiuscole e minuscole.
Thorbjørn Ravn Andersen,

11
Wikipedia tenta di utilizzare la corretta maiuscola per il titolo del soggetto e utilizza i reindirizzamenti per differenze comuni. per esempio. html, htmE Htmltutti i redirect a HTML. Ma soprattutto, a causa dell'enorme argomento, è possibile avere più di una pagina in cui l'URL differisce solo per caso. Ad esempio: Latex e LaTeX
MrWhite,

7
@ edc65 Ma Kobi afferma che parti dell'URL (in particolare il percorso ) fanno distinzione tra maiuscole e minuscole, quindi non rende l'URL (nel suo insieme) sensibile al maiuscolo / minuscolo?
MrWhite,

Risposte:


8

Perché l'URL non dovrebbe distinguere tra maiuscole e minuscole?

Capisco che possa sembrare una domanda retorica provocatoria (e "avvocato del diavolo"), ma penso che sia utile considerare. Il design di HTTP è che un "client", che comunemente chiamiamo "browser web", richiede dati al "web server".

Esistono molti, molti server Web diversi che vengono rilasciati. Microsoft ha rilasciato IIS con i sistemi operativi Windows Server (e altri, incluso Windows XP Professional). Unix ha pesi massimi come nginx e Apache, per non parlare delle offerte più piccole come l'httpd interno di OpenBSD, o il httpd o lighttpd. Inoltre, molti dispositivi compatibili con la rete hanno server Web integrati che possono essere utilizzati per configurare il dispositivo, inclusi i dispositivi con scopi specifici delle reti, come router (inclusi molti punti di accesso Wi-Fi e modem DSL) e altri dispositivi come stampanti o UPS (gruppi di continuità alimentati a batteria) che possono avere connettività di rete.

Quindi la domanda "Perché gli URL fanno distinzione tra maiuscole e minuscole?", Chiede: "Perché i server Web considerano l'URL come sensibile al maiuscolo / minuscolo?" E la vera risposta è: non lo fanno tutti. Almeno un web server, che è abbastanza popolare, in genere NON è sensibile al maiuscolo / minuscolo. (Il web server è IIS.)

Un motivo chiave per comportamenti diversi tra server Web diversi si riduce probabilmente a una questione di semplicità. Il modo più semplice per creare un server Web è quello di fare le cose nello stesso modo in cui il sistema operativo del computer / dispositivo individua i file. Molte volte, i server Web individuano un file per fornire una risposta. Unix è stato progettato attorno a computer di fascia alta, e quindi Unix ha fornito la desiderabile funzionalità di consentire lettere maiuscole e minuscole. Unix ha deciso di trattare maiuscole e minuscole come diverse perché, beh, sono diverse. Questa è la cosa semplice e naturale da fare. Windows ha una storia senza distinzione tra maiuscole e minuscole a causa del desiderio di supportare software già creato, e questa storia risale al DOS che semplicemente non supportava lettere minuscole, forse nel tentativo di semplificare le cose con computer meno potenti che utilizzavano meno memoria. Poiché questi sistemi operativi sono diversi, il risultato è che i server Web (versioni precedenti di) progettati semplicemente riflettono le stesse differenze.

Ora, con tutto questo background, ecco alcune risposte specifiche alle domande specifiche:

Quando gli URL sono stati progettati per la prima volta, perché la distinzione tra maiuscole e minuscole è diventata una funzionalità?

Perchè no? Se tutti i server Web standard non facessero distinzione tra maiuscole e minuscole, ciò indicherebbe che i server Web stavano seguendo una serie di regole specificate dallo standard. Semplicemente non vi era alcuna regola che affermasse che il caso dovesse essere ignorato. Il motivo per cui non esiste una regola è semplicemente che non c'era motivo per una tale regola. Perché preoccuparsi di inventare regole inutili?

Lo chiedo perché mi sembra (cioè un laico) che la distinzione tra maiuscole e minuscole sarebbe preferibile per prevenire errori inutili e semplificare una stringa di testo già complicata.

Gli URL sono stati progettati per l'elaborazione da parte delle macchine. Sebbene una persona possa digitare un URL completo in una barra degli indirizzi, questa non era una parte importante del design previsto. Il progetto previsto è che le persone seguano ("clicca") i collegamenti ipertestuali. Se i laici medi lo stanno facendo, a loro non importa se l'URL invisibile sia semplice o complicato.

Inoltre, esiste un reale scopo / vantaggio nell'avere un URL con distinzione tra maiuscole e minuscole (al contrario della stragrande maggioranza degli URL che puntano alla stessa pagina, indipendentemente dalla capitalizzazione)?

Il quinto punto numerato della risposta di William Hay menziona un vantaggio tecnico: gli URL possono essere un modo efficace per un browser Web di inviare un po 'di informazioni a un server Web, e possono essere incluse più informazioni se ci sono meno restrizioni, quindi una distinzione tra maiuscole e minuscole la restrizione ridurrebbe quante informazioni possono essere incluse.

Tuttavia, in molti casi, non esiste un vantaggio super convincente per la sensibilità del caso, il che è dimostrato dal fatto che IIS in genere non si preoccupa di esso.

In sintesi, il motivo più convincente è probabilmente la semplicità per coloro che hanno progettato il software del server Web, in particolare su una piattaforma con distinzione tra maiuscole e minuscole come Unix. (HTTP non è stato qualcosa che ha influenzato il design originale di Unix, poiché Unix è notevolmente più vecchio di HTTP.)


"Un motivo chiave per il diverso comportamento tra diversi browser web si riduce probabilmente a una questione di semplicità." - Suppongo che intendi "server Web", anziché "browser Web" qui e in un paio di altri posti?
MrWhite,

2
Aggiornato. Ha esaminato ogni caso di "browser" e ha effettuato più sostituzioni. Grazie per averlo sottolineato, in modo da migliorare la qualità.
TOOGAM,

1
Ho ricevuto diverse risposte eccellenti alla mia domanda, che vanno dallo storico al tecnico. Sono titubante nell'andare controcorrente e accettare una risposta di livello inferiore, ma la risposta di @ TOOGAM mi è stata di grande aiuto. Questa risposta è esaustiva ed esaustiva, ma spiega il concetto in modo semplice e conversazionale che posso capire. E penso che questa risposta sia una buona introduzione alle spiegazioni più approfondite.
Kyle

74

Gli URL non fanno distinzione tra maiuscole e minuscole, ma solo in parte.
Ad esempio, nulla fa distinzione tra maiuscole e minuscole nell'URL https://google.com,

Con riferimento a RFC 3986 - Uniform Resource Identifier (URI): sintassi generica

Innanzitutto, da Wikipedia , un URL appare come:

 scheme:[//host[:port]][/]path[?query][#fragment]

(Ho rimosso la user:passwordparte perché non è interessante e raramente utilizzata)

gli schemi non fanno distinzione tra maiuscole e minuscole

Il sottocomponente host non distingue tra maiuscole e minuscole.

Il componente percorso contiene dati ...

Il componente di query contiene dati non gerarchici ...

I singoli tipi di media possono definire le proprie restrizioni o strutture all'interno della sintassi dell'identificatore di frammento per specificare diversi tipi di sottoinsiemi, viste o riferimenti esterni

Quindi, schemee non hostfanno distinzione tra maiuscole e minuscole.
Il resto dell'URL fa distinzione tra maiuscole e minuscole.

Perché la pathdistinzione tra maiuscole e minuscole?

Questa sembra essere la domanda principale.
È difficile rispondere "perché" qualcosa è stato fatto se non è stato documentato, ma possiamo fare un'ottima ipotesi.
Ho preso citazioni molto specifiche dalle specifiche, con enfasi sui dati .
Diamo un'occhiata all'URL di nuovo:

 scheme:[//host[:port]][/]path[?query][#fragment]
 \____________________/\________________________/
        Location                 Data
  • Posizione: la posizione ha una forma canonica ed è sensibile al maiuscolo / minuscolo. Perché? Probabilmente in modo da poter acquistare un nome di dominio senza dover acquistare migliaia di varianti.

  • Dati: i dati vengono utilizzati dal server di destinazione e l'applicazione può scegliere il significato . Non avrebbe alcun senso rendere insensibili i casi di dati. L'applicazione dovrebbe avere più opzioni e la definizione di insensibilità al maiuscolo / minuscolo nelle specifiche limiterà queste opzioni.
    Questa è anche una distinzione utile per HTTPS: i dati sono crittografati , ma l'host è visibile.

È utile?

La distinzione tra maiuscole e minuscole ha le sue insidie ​​quando si tratta di memorizzazione nella cache e URL canonici, ma è sicuramente utile. Qualche esempio:


1
"Gli URL non fanno distinzione tra maiuscole e minuscole." / "Il resto dell'URL fa distinzione tra maiuscole e minuscole." - Sembrerebbe essere una contraddizione?
MrWhite,

8
In verità, lo schema definisce cosa aspettarsi nel resto dell'URL. http:e schemi correlati indicano che l'URL fa riferimento a un nome host DNS. Il DNS non distingue tra maiuscole e minuscole ASCII molto prima dell'invenzione degli URL. Vedi pagina 55 di ietf.org/rfc/rfc883.txt
O. Jones,

3
Ben dettagliato! Stavo andando da un punto di vista storico. In origine era il percorso del file che richiedeva la distinzione tra maiuscole e minuscole solo se si stava colpendo il file system. Altrimenti no. Ma oggi le cose sono cambiate. Ad esempio, in origine non esistevano parametri e CGI. La tua risposta assume una prospettiva attuale. Ho dovuto premiare i tuoi sforzi !! Hai davvero scavato in questo! Chi sapeva che sarebbe esploso come ha fatto ?? Saluti!!
closetnoc,

2
@ w3dk: è una stranezza non molto interessante della terminologia, ma potresti prendere "maiuscole / minuscole" per dire "cambiare il caso di un personaggio può cambiare il tutto", o potresti intenderlo nel senso ", cambiando il il caso di un personaggio cambia sempre il tutto ". Kobi sembra affermare quest'ultimo, preferisce che la distinzione tra maiuscole e minuscole significhi "qualsiasi cambiamento nel caso sia significativo", il che ovviamente non è vero per gli URL. Preferisci il primo. È solo una questione di quanto siano sensibili al caso.
Steve Jessop,

2
@ rybo111: se un utente digita example.com/fOObaR , le specifiche richiedono che il server su www.example.com riceva il percorso "/ fOObaR" come indicato; rimane in silenzio sulla domanda se il server debba trattarlo diversamente da "/ foOBaR".
supercat,

59

Semplice. Il sistema operativo è sensibile al maiuscolo / minuscolo. In genere i server Web non si preoccupano a meno che non debbano colpire il file system a un certo punto. È qui che Linux e altri sistemi operativi basati su Unix applicano le regole del file system, nel qual caso la sensibilità è una parte importante. Questo è il motivo per cui IIS non è mai stato sensibile al maiuscolo / minuscolo; perché Windows non ha mai distinto tra maiuscole e minuscole.

[Aggiornare]

Ci sono stati alcuni argomenti forti nei commenti (da quando sono stati eliminati) sul fatto che gli URL abbiano qualche relazione con il file system, come ho affermato. Questi argomenti sono diventati accesi. È estremamente miope credere che non ci sia una relazione. C'è assolutamente! Lasciami spiegare ulteriormente.

I programmatori di applicazioni non sono generalmente programmatori interni di sistemi. Non sto insultando. Sono due discipline separate e non è richiesta la conoscenza interna del sistema per scrivere applicazioni quando le applicazioni possono semplicemente effettuare chiamate al sistema operativo. Poiché i programmatori di applicazioni non sono programmatori interni ai sistemi, non è possibile bypassare i servizi del sistema operativo. Lo dico perché si tratta di due campi separati e raramente si incrociano. Le applicazioni sono scritte per utilizzare i servizi OS come regola. Ci sono alcune rare eccezioni ovviamente.

Quando i server web iniziarono ad apparire, gli sviluppatori di applicazioni non tentarono di bypassare i servizi del sistema operativo. Ci sono state diverse ragioni per questo. Uno, non era necessario. Due, i programmatori di applicazioni generalmente non sapevano come bypassare i servizi del sistema operativo. Tre, la maggior parte dei sistemi operativi era estremamente stabile e robusta, oppure estremamente semplice e leggera e non valeva il costo.

Tieni presente che i primi server Web funzionavano su computer costosi come i server DEC VAX / VMS e Unix del giorno (Berkeley e Ultrix e altri) su computer con frame principale o medio, quindi subito dopo computer leggeri come PC e Windows 3.1. Quando iniziarono ad apparire motori di ricerca più moderni, come Google nel 1997/8, Windows si era spostato su Windows NT e anche altri sistemi operativi come Novell e Linux avevano iniziato a eseguire server Web. Apache era il web server dominante sebbene ce ne fossero altri come IIS e O'Reilly che erano anche molto popolari. Nessuno di questi al momento ignorava i servizi del sistema operativo. È probabile che nessuno dei server web lo faccia nemmeno oggi.

I primi web server erano abbastanza semplici. Lo sono ancora oggi. Qualsiasi richiesta fatta per una risorsa tramite una richiesta HTTP esistente su un disco rigido è stata / è effettuata dal server Web tramite il file system del sistema operativo.

I file system sono meccanismi piuttosto semplici. Quando viene effettuata una richiesta di accesso a un file, se tale file esiste, la richiesta viene passata al sottosistema di autorizzazione e, se concessa, la richiesta originale viene soddisfatta. Se la risorsa non esiste o non è autorizzata, viene generata un'eccezione dal sistema. Quando un'applicazione effettua una richiesta, viene impostato un trigger e l'applicazione attende. Quando si risponde alla richiesta, viene attivato il trigger e l'applicazione elabora la risposta della richiesta. Funziona ancora così oggi. Se l'applicazione rileva che la richiesta è stata soddisfatta, continua, se non è riuscita, l'applicazione esegue una condizione di errore nel suo codice o muore se non gestita. Semplice.

Nel caso di un server Web, supponendo che venga effettuata una richiesta URL per un percorso / file, il server Web accetta la parte percorso / file della richiesta URL (URI) e fa una richiesta al file system ed è soddisfatto o genera un'eccezione. Il server Web quindi elabora la risposta. Se, ad esempio, il percorso e il file richiesti vengono rilevati e l'accesso concesso dal sottosistema di autorizzazione, il server Web elabora normalmente la richiesta di I / O. Se il file system genera un'eccezione, il server Web restituisce un errore 404 se il file non è stato trovato o un 403 proibito se il codice motivo non è autorizzato.

Poiché alcuni sistemi operativi fanno distinzione tra maiuscole e minuscole e i file system di questo tipo richiedono corrispondenze esatte, il percorso / file richiesto al server Web deve corrispondere esattamente a ciò che esiste sul disco rigido. Il motivo è semplice. I server Web non indovinano cosa intendi. Nessun computer lo fa senza essere programmato. I server Web elaborano semplicemente le richieste quando le ricevono. Se la parte percorso / file della richiesta URL che viene passata direttamente al file system non corrisponde a ciò che si trova sul disco rigido, il file system genera un'eccezione e il server Web restituisce un errore 404 Not Found.

È davvero gente così semplice. Non è scienza missilistica. Esiste una relazione assoluta tra la parte percorso / file di un URL e il file system.


1
Penso che il tuo argomento sia difettoso. Mentre Berners-Lee non aveva alcuna scelta in merito alla distinzione tra maiuscole e minuscole degli URL ftp. Ha progettato URL http. Avrebbe potuto specificarli solo come US-ASCII e maiuscole e minuscole. Se ci sono mai stati server Web che hanno appena passato il percorso URL al file system, allora non erano sicuri e l'introduzione della codifica URL ha rotto la compatibilità con loro. Dato che il percorso è in fase di elaborazione prima di passare al caso smashing del sistema operativo sarebbe stato facile da implementare. Pertanto, penso che dobbiamo considerare questo come una decisione di progettazione, non una stranezza di implementazione.
William Hay,

@WilliamHay Questo non ha nulla a che fare con Berners-Lee o con il design del web. Si tratta di limitazioni e requisiti del sistema operativo. Sono un ingegnere interno di sistemi in pensione. Ho lavorato su questi sistemi in quel momento. Ti sto dicendo esattamente perché gli URL fanno distinzione tra maiuscole e minuscole. Non è un'ipotesi. Non è un'opinione. È un fatto. La mia risposta è stata intenzionalmente semplificata. Naturalmente ci sono controlli dei file e altri processi che possono essere eseguiti prima di emettere una dichiarazione aperta. E di conseguenza i server Web Sì (!) Sono ancora parzialmente insicuri fino ad oggi.
closetnoc,

Il fatto che gli URL facciano distinzione tra maiuscole e minuscole non ha nulla a che fare con il design del Web? Veramente? Argomento dell'Autorità seguito da Argomento dell'Asserzione. Il fatto che i server Web trasmettano il componente del percorso di un URL più o meno direttamente a una chiamata aperta è una conseguenza della progettazione di URL e non una sua causa. I server (o gli smart client nel caso di FTP) potrebbero nascondere all'utente la distinzione tra maiuscole e minuscole dei filesystem. Non farlo è una decisione di progettazione.
William Hay

@WilliamHay Devi rallentare la tramoggia dell'erba e rileggere ciò che ho scritto. Sono un ingegnere interno di sistemi in pensione che scrive componenti del sistema operativo, stack di protocollo e codice router per ARPA-Net, ecc. Ho lavorato con interni di Apache, O'Reilly e IIS. L'argomento FTP non trattiene l'acqua poiché almeno i principali server FTP rimangono sensibili al maiuscolo / minuscolo per lo stesso motivo. Non ho mai detto nulla sulla progettazione di URL / URI. In nessun momento ho detto che i server Web hanno passato valori senza elaborazione. Ho detto che i servizi del sistema operativo sono comunemente usati e che il file system richiede una corrispondenza esatta per avere successo.
closetnoc

@WilliamHay Per favore, capisci che tu e io stiamo pensando a scopi trasversali. Tutto quello che stavo dicendo nella mia risposta è che per alcuni sistemi operativi, le chiamate al file system sono sensibili al maiuscolo / minuscolo. Le applicazioni che utilizzano le chiamate di sistema, e la maggior parte lo fanno, sono limitate all'applicazione delle regole del sistema operativo, in questo caso la distinzione tra maiuscole e minuscole. Non è impossibile aggirare questa regola. In effetti questo può essere in qualche modo banale in alcuni casi sebbene non pratico. Ero abituato a bypassare sistematicamente il file system nel mio lavoro per decodificare dischi rigidi che diventavano kablooie per un motivo o un altro o per analizzare gli interni dei file di database, ecc.
closetnoc

21
  1. Gli URL dichiarano di essere un localizzatore di risorse UNIFORM e possono puntare a risorse precedenti al Web. Alcuni di questi sono case sensitive (ad esempio molti server ftp) e gli URL devono essere in grado di rappresentare queste risorse in modo ragionevolmente intuitivo.

  2. L'insensibilità alle maiuscole richiede più lavoro quando si cerca una corrispondenza (nel sistema operativo o sopra di essa).

  3. Se si definiscono gli URL come singoli server con distinzione tra maiuscole e minuscole, è possibile implementarli come insensibili alle maiuscole. Il contrario non è vero.

  4. L'insensibilità ai casi può essere non banale in contesti internazionali: https://en.wikipedia.org/wiki/Dotted_and_dotless_I . Inoltre RFC1738 consentiva l'uso di caratteri al di fuori dell'intervallo ASCII purché fossero codificati ma non specificasse un set di caratteri. Questo è abbastanza importante per qualcosa che si autodefinisce WORLD wide web. Definire gli URL come maiuscole e minuscole aprirebbe molto spazio ai bug.

  5. Se si sta tentando di raggruppare molti dati in un URI (ad es. Un URI dati ), è possibile comprimere di più se le lettere maiuscole e minuscole sono distinte.


1
Sono abbastanza sicuro che gli URL fossero storicamente limitati ad ASCII. È quindi improbabile che l'internazionalizzazione sia una ragione originale. La storia di Unix con distinzione tra maiuscole e minuscole, OTOH, probabilmente ha giocato un ruolo enorme.
derobert,

Mentre solo un sottoinsieme di ASCII può essere usato non codificato in un URL RFC1738 afferma specificamente che caratteri al di fuori dell'intervallo ASCII possono essere usati codificati. Senza specificare un set di caratteri non è possibile sapere quali ottetti rappresentano lo stesso carattere tranne il caso. Aggiornato.
William Hay,

1
Ri # 4: In realtà è peggio di così. Punteggiato e senza punti I è una dimostrazione del principio più generale che, anche se tutto è UTF-8 (o qualche altro UTF), non è possibile capitalizzare o minuscole correttamente senza conoscere il locale a cui appartiene il testo. Nella locale predefinita, una lettera latina I maiuscola in minuscola una lettera latina i minuscola, che è errata in turco perché aggiunge un punto (non esiste un punto di codice "I maiuscola turca"); si intende utilizzare il codice ASCII punto). Lancia le differenze di codifica e questo va da "veramente difficile" a "completamente intrattabile".
Kevin,

5

Ho rubato dal blog una Vecchia Cosa Nuova l'abitudine di affrontare le domande del modulo "perché succede che qualcosa sia così?" con la contro-domanda "come sarebbe il mondo, se non fosse così?"

Supponiamo di aver impostato un server Web per servire da solo i miei file di documenti da una cartella in modo da poterli leggere al telefono quando ero in ufficio. Ora, nella mia cartella documenti, ho tre file, todo.txt, ToDo.txte TODO.TXT(lo so, ma aveva senso per me quando ho fatto i file).

Quale URL mi piacerebbe poter utilizzare per accedere a questi file? Vorrei accedervi in ​​modo intuitivo, utilizzando http://www.example.com/docs/filename.

Supponi di avere uno script che mi consente di aggiungere un contatto alla mia rubrica, cosa che posso fare anche sul Web. Come dovrebbe prendere i suoi parametri? Beh, mi piacerebbe utilizzarlo come: http://www.example.com/addcontact.php?name=Tom McHenry von der O'Reilly. Ma se non avessi modo di specificare il nome per caso, come lo farei?

Come differenzerei le pagine wiki per Cat e CAT, Text e TEXT, latex e LaTeX? Disambig pagine, immagino, ma preferisco solo ottenere la cosa che ho chiesto.

Ma tutto ciò che sembra rispondere a una domanda sbagliata, comunque.

La domanda che penso davvero ti stia ponendo è "Perché i server web ti fanno solo una differenza, quando sono computer, progettati per semplificare la vita e sono perfettamente in grado di trovare almeno le più ovvie variazioni del caso nel URL che ho digitato che funzionerebbe? "

La risposta a ciò è che mentre alcuni siti hanno fatto questo (e meglio, controllano anche altri errori di battitura), nessuno ha pensato che valesse la pena cambiare la pagina di errore 404 predefinita di un server web per farlo ... ma forse dovrebbero?


1
Alcuni siti usano un qualche tipo di meccanismo per convertire qualsiasi query in minuscolo o coerente. In un certo senso, questo è intelligente.
closetnoc,

No, non dovrebbero. Questa funzionalità può essere, e spesso viene, aggiunta quando è desiderabile (ad esempio, da moduli in apache.) Imporre questo tipo di cambiamento come comportamento predefinito - o peggio, comportamento immutabile - sarebbe più dirompente del relativamente raro occasione in cui qualcuno deve digitare manualmente un URL oltre il nome host. Per un buon esempio del perché non farlo, ricorda il fiasco quando Network Solutions ha "corretto" errori di dominio inesistenti da query DNS pubbliche.
SirNickity,

@SirNickity Nessuno stava proponendo l'immutabilità a qualsiasi livello e le pagine di errore del server web sono configurabili su ogni server web che abbia mai usato; nessuno stava suggerendo di sostituire 404 con codici 30 *, ma piuttosto di aggiungere un elenco di collegamenti di suggerimenti cliccabili dall'uomo alla pagina di errore; i nomi di dominio sono un argomento molto diverso e il problema non fa distinzione tra maiuscole e minuscole e in un diverso contesto di sicurezza; e IIS già "correggono" automaticamente (ignorando) le differenze maiuscole / minuscole nel percorso o nelle parti del nome file degli URI.
Dewi Morgan,

Dal 1996, Apache ti ha permesso di farlo con mod_speling . Non sembra essere una cosa molto popolare da fare. Le persone Unix / Linux vedono l'insensibilità ai casi come regola, l'insensibilità ai casi come eccezione.
reinierpost,

4

Sebbene la risposta sopra sia corretta e buona. Vorrei aggiungere altri punti.

Per capire meglio, si dovrebbe capire la differenza di base tra Unix (Linux) e il server Windows. Unix fa distinzione tra maiuscole e minuscole e Windows non è sensibile al maiuscolo / minuscolo.

Il protocollo HTTP è stato evoluto o ha iniziato a essere implementato intorno al 1990. Il protocollo HTTP è stato progettato da ingegneri che lavorano negli istituti del CERN, la maggior parte di quei giorni gli scienziati hanno usato macchine Unix e non Windows.

La maggior parte degli scienziati aveva familiarità con Unix, quindi avrebbero potuto essere influenzati dal file system in stile Unix.

Il server Windows è stato rilasciato dopo il 2000. molto prima che il server Windows diventasse popolare, il protocollo HTTP era ben maturo e le specifiche erano complete.

Questo potrebbe essere il motivo.


2
"Il server Windows è stato rilasciato dopo il 2000." Il team di Windows NT 3.1 non sarebbe stato d'accordo con te nel 1993. NT 3.51 nel 1995 fu probabilmente quando NT iniziò a diventare abbastanza maturo e consolidato da supportare le applicazioni server business-critical.
un CVn del

NT 3.51 aveva l'interfaccia di Win 3.1. Windows non è decollato fino a Windows 95 e NT NT ha impiegato la stessa interfaccia.
Thorbjørn Ravn Andersen,

Michael Kjörling, d'accordo. Lascia che lo modifichi.
Mani

1
@ ThorbjørnRavnAndersen Nel mercato dei server, NT 3.51 ha avuto un discreto successo. Nel mercato consumer / prosumer, ci sono voluti fino a Windows 2000 (NT 5.0) prima che la linea NT iniziasse a guadagnare seriamente trazione.
un CVn

In effetti, WorldWideWeb è stato inizialmente sviluppato su sistemi basati su Unix, che hanno file system con distinzione tra maiuscole e minuscole e la maggior parte degli URL mappati direttamente ai file sul file system.
reinierpost,

4

Come si dovrebbe leggere un "perché è stato progettato in questo modo?" domanda? Stai chiedendo un resoconto storicamente accurato del processo decisionale o stai chiedendo "perché qualcuno dovrebbe progettarlo in questo modo?"?

Molto raramente è possibile ottenere un account storicamente accurato. A volte, quando le decisioni vengono prese nei comitati standard, c'è una traccia documentale su come il dibattito è stato condotto, ma nei primi giorni del web le decisioni sono state prese in fretta da alcuni individui - in questo caso probabilmente dallo stesso TimBL - e la logica è improbabile essere stato scritto. Ma TimBL ha ammesso di aver commesso errori nella progettazione di URL - vedi http://www.dailymail.co.uk/sciencetech/article-1220286/Sir-Tim-Berners-Lee-admits-forward-slashes-web-address -mistake.html

All'inizio gli URL erano mappati direttamente ai nomi dei file e i file erano generalmente su macchine simili a Unix e le macchine simili a Unix hanno nomi di file sensibili al maiuscolo / minuscolo. Quindi la mia ipotesi è che sia successo in quel modo per comodità di implementazione e l'usabilità (per gli utenti finali) non è mai stata nemmeno presa in considerazione. Ancora una volta, nei primi tempi gli utenti erano comunque tutti programmatori Unix.


Anche gli utenti finali erano utenti Unix (non necessariamente programmatori, ma fisici ad alta energia e simili), quindi anche loro erano abituati all'insensibilità ai casi.
reinierpost,

3

Questo non ha nulla a che fare con il luogo in cui hai acquistato il dominio, il DNS non fa distinzione tra maiuscole e minuscole. Ma il file system sul server che si sta utilizzando per l'hosting è.

Questo non è davvero un problema ed è abbastanza comune sugli host * nix. Assicurati solo che tutti i link che scrivi sulle tue pagine siano corretti e non avrai problemi. Per semplificare, ti consiglio di dare sempre un nome alle tue pagine in minuscolo, quindi non devi mai ricontrollare il nome quando scrivi un link.


2

Closetnoc ha ragione sul sistema operativo. Alcuni file system considerano lo stesso nome con un involucro diverso come file diversi.

Inoltre, esiste un reale scopo / vantaggio nell'avere un URL con distinzione tra maiuscole e minuscole (al contrario della stragrande maggioranza degli URL che puntano alla stessa pagina, indipendentemente dalla capitalizzazione)?

Sì. per evitare duplicati dei contenuti.

Se avessi ad esempio i seguenti URL:

http://example.com/page-1
http://example.com/Page-1
http://example.com/paGe-1
http://example.com/PAGE-1
http://example.com/pAGE-1

e tutti hanno indicato la stessa identica pagina con lo stesso identico contenuto, quindi avresti contenuti duplicati e sono sicuro che se hai un account della console di ricerca di Google (strumenti per i webmaster), Google te lo indicherà.

Quello che suggerirei di fare se ti trovi in ​​quella situazione è usare tutti gli URL minuscoli, quindi reindirizzare gli URL con almeno una lettera maiuscola nella versione minuscola. Quindi nell'elenco degli URL sopra, reindirizza tutti gli URL al primo URL.


"Sì. Per evitare duplicati dei contenuti." - Ma il contrario sembrerebbe vero? Il fatto che gli URL possano fare distinzione tra maiuscole e minuscole (e questo è il modo in cui i motori di ricerca li trattano) causa i problemi di contenuto duplicati che menzioni. Se gli URL fossero universalmente senza distinzione tra maiuscole e minuscole, non ci sarebbero problemi di contenuto duplicati con casi diversi. page-1sarebbe lo stesso di PAGE-1.
MrWhite,

Penso che una scarsa configurazione del server sia ciò che può causare contenuti duplicati quando si tratta di involucro. Ad esempio, l'istruzione RewriteRule ^request-uri$ /targetscript.php [NC]memorizzata in .htaccess corrisponderebbe http://example.com/request-urie http://example.com/ReQuEsT-Uripoiché [NC]indica che il case non ha importanza quando si valuta quell'espressione regolare.
Mike,

1

La distinzione tra maiuscole e minuscole ha valore.

Se ci sono 26 lettere, ognuna con la possibilità di scrivere in maiuscolo, sono 52 caratteri.

4 caratteri ha la possibilità di 52 * 52 * 52 * 52 combinazioni, equivalenti a 7311616 combinazioni.

Se non riesci a mettere in maiuscolo i caratteri, la quantità di combinazioni è 26 * 26 * 26 * 26 = 456976

Esistono oltre 14 volte più combinazioni per 52 caratteri rispetto a 26. Pertanto, per l'archiviazione dei dati, gli URL possono essere più brevi e più informazioni possono essere trasferite su reti con meno dati trasferiti.

Ecco perché vedi YouTube che utilizza URL come https://www.youtube.com/watch?v=xXxxXxxX

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.