L'URL deve essere sensibile al maiuscolo / minuscolo?


284

ho notato che

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

e

http://stackoverflow.com/questions/ask

entrambi funzionano bene - in realtà il precedente viene convertito in minuscolo.

Penso che questo abbia senso per l'utente.

Se guardo Google, questo URL funziona bene:

http://www.google.com/intl/en/about/corporate/index.html  

ma questo con "INFORMAZIONI" non funziona:

http://www.google.com/intl/en/ABOUT/corporate/index.html   

L'URL deve essere sensibile al maiuscolo / minuscolo?


13
IMHO, l'URL non dovrebbe mai fare distinzione tra maiuscole e minuscole, questo sta solo rendendo la vita più difficile per le persone che la useranno.
Muhammad Umer,

16
La domanda "DOVREBBERO essere sensibili al maiuscolo / minuscolo?" è una cattiva domanda perché invoca l'opinione. Piuttosto, una domanda migliore sarebbe: "PERCHÉ sono (o PERCHÉ non lo sono) la distinzione tra maiuscole e minuscole?" Oppure "Perché alcuni sono sensibili alla distinzione tra maiuscole e minuscole mentre altri no?"
Chharvey,

Ma per una possibile risposta, controlla di WHATWG nuovo URL standard , che è stato adottato da node.js .
Chharvey,

secondo me, no, non dovrebbero esserlo
Andrew

se il browser non rispetta il caso, l'indirizzo ipfs sarà rotto, ma non è rotto
Beeno Tung

Risposte:


281

Secondo " HTML e URL " di W3 dovrebbero:

Potrebbero esserci degli URL o parti di URL in cui il caso non ha importanza, ma identificarli potrebbe non essere facile. Gli utenti devono sempre considerare che gli URL fanno distinzione tra maiuscole e minuscole.


96
Immagino che "essere liberale in ciò che accetti e conservatore in ciò che invii" (IETF parla) sarebbe la mia linea guida.
jldupont,

9
La linea guida W3 è ragionevole. Afferma semplicemente che non si dovrebbe fare un'ipotesi su come il server gestisce l'URL che si sta inviando. Spetta al server come gestire l'URL della richiesta. La maggior parte dei server Web sono unix / linux e ciò significa che la maggior parte dei server Web sono case sensitive.
oᴉɹǝɥɔ

37
W3 afferma che gli UTENTI dovrebbero presumere che i server facciano distinzione tra maiuscole e minuscole, ma non danno una raccomandazione per i SERVER.
trysis,

3
Per quanto riguarda la resilienza, i programmi che interpretano gli URL dovrebbero trattare le lettere maiuscole come equivalenti alle lettere minuscole nei nomi degli schemi (ad esempio, consentire "HTTP" e "http"). Fonte
realPK,

3
@PK_ Nota che questo vale solo per la parte dello schema dell'URL. RFC1738 non discute se altre parti dell'URL debbano essere interpretate come case sensitive o meno.
Dthrasher,

126

Tutti gli " insensibili " sono in grassetto per la leggibilità.

I nomi di dominio non fanno distinzione tra maiuscole e minuscole secondo RFC 4343 . Il resto dell'URL viene inviato al server tramite il metodo GET. Questo può essere sensibile al maiuscolo / minuscolo.

Prendi ad esempio questa pagina, stackoverflow.com riceve GET string / questions / 7996919 / should-url-be-case-sensitive , inviando un documento HTML al tuo browser. Stackoverflow.com non fa distinzione tra maiuscole e minuscole perché produce lo stesso risultato per / QUEStions / 7996919 / La distinzione tra maiuscole e minuscole .

D'altra parte, Wikipedia fa distinzione tra maiuscole e minuscole tranne il primo carattere del titolo. Gli URL https://en.wikipedia.org/wiki/Case_sensitivity e https://en.wikipedia.org/wiki/case_sensitivity portano allo stesso articolo, ma https://en.wikipedia.org/wiki/CASE_SENSITIVITY restituisce 404.


7
Wikipedia in realtà è molto indulgente per la distinzione tra maiuscole e minuscole nei casi in cui gli utenti potrebbero pensare che una parola debba essere un caso o un altro, ma ciò è più dovuto al disturbo ossessivo compulsivo ... mi dispiace, la natura premurosa dei suoi editor. Tuttavia, i suoi URL sono tecnicamente sensibili al maiuscolo / minuscolo.
trysis,

14
Questo perché la parte semantica e leggibile dell'URL di una domanda in StackOverflow non la identifica, è identificata da 7996919. La parte semantica dell'URL è lì solo per scopi SEO.
user3367701

4
In realtà anche /programming/7996919/should-BLABLA-be-or-NOT-to-be funziona. Questo perché il server stackoverflow.com utilizza solo l'ID della domanda per identificarlo e restituire l'URL e la pagina HTML corretti.
Bozzy,

72

Dipende dal sistema operativo di hosting. I siti ospitati su Windows tendono a non distinguere tra maiuscole e minuscole poiché il file system sottostante non distingue tra maiuscole e minuscole. I siti ospitati su sistemi di tipo Unix tendono a distinguere tra maiuscole e minuscole in quanto i loro file system sottostanti in genere fanno distinzione tra maiuscole e minuscole. La parte del nome host dell'URL non fa mai distinzione tra maiuscole e minuscole, è il resto del percorso che varia.


1
Sì, come questo dolorosamente scoperto nelle richieste http ai file su un server ftp Unix.
Laurie Stearn,

1
Sarebbe più accurato dire "dipende dal server" in senso generale, poiché la pubblicazione dei file non è l'unico modo per rispondere alle richieste HTTP.
Valentin Waeselynck,

31

La parte del nome di dominio di un URL non fa distinzione tra maiuscole e minuscole poiché il DNS ignora il caso: http://en.example.org/ed HTTP://EN.EXAMPLE.ORG/entrambi aprono la stessa pagina.

Il percorso viene utilizzato per specificare e forse trovare la risorsa richiesta. Fa distinzione tra maiuscole e minuscole, sebbene possa essere trattato come maiuscole e minuscole da alcuni server, in particolare quelli basati su Microsoft Windows.

Se il server fa distinzione tra maiuscole e minuscole ed http://en.example.org/wiki/URLè corretto, allora http://en.example.org/WIKI/URLo http://en.example.org/wiki/urlvisualizzerà una pagina di errore HTTP 404, a meno che questi URL non facciano riferimento a risorse valide.


3
Questa risposta ha la sola formulazione corretta "è sensibile al maiuscolo / minuscolo, sebbene possa essere trattato senza distinzione tra maiuscole e minuscole". Solo una risposta valida.
Daniel W.

@DanFromGermany, il percorso con distinzione tra maiuscole e minuscole può essere dedotto vagamente da qui "Gli URL in generale fanno distinzione tra maiuscole e minuscole (ad eccezione dei nomi di macchine). Potrebbero esserci URL o parti di URL, in cui il caso non ha importanza, ma identificando questi potrebbero non essere facili ". Ma è ambiguo dedurlo. Come menzionato in un commento sopra, RFC1738 non discute se parti dell'URL diverse dallo schema debbano essere interpretate come case sensitive o meno. Hai qualche link che chiarisce quali parti dell'url fanno distinzione tra maiuscole e minuscole?
granato,

2
@garnet Da RFC3986 6.2.2.1. Normalizzazione del caso : quando un URI utilizza componenti della sintassi generica, si applicano sempre le regole di equivalenza della sintassi del componente; vale a dire che lo schema e l'host non fanno distinzione tra maiuscole e minuscole e quindi dovrebbero essere normalizzati in minuscolo. Ad esempio, l'URI HTTP://www.EXAMPLE.com/è equivalente a http://www.example.com/. Si presume che gli altri componenti della sintassi generica facciano distinzione tra maiuscole e minuscole se non diversamente specificato dallo schema. "
Daniel W.,

2
@garnet E da RFC HTTP : " Quando si confrontano due URI per decidere se corrispondono o meno, un client DOVREBBE utilizzare un confronto ottetto per ottetto con distinzione tra maiuscole e minuscole di tutti gli URI [...] " (ad eccezione dello schema e host stesso).
Daniel W.,

15

Non sono un fan dei vecchi articoli, ma poiché questa è stata una delle prime risposte a questo particolare problema, ho sentito il bisogno di chiarire qualcosa.

Come la risposta di @Bhavin Shah afferma che la parte del dominio dell'URL non fa distinzione tra maiuscole e minuscole, quindi

http://google.com 

e

http://GOOGLE.COM 

e

http://GoOgLe.CoM 

sono tutti uguali ma tutto ciò che segue la parte del nome di dominio è considerato case sensitive.

così...

http://GOOGLE.COM/ABOUT

e

http://GOOGLE.COM/about

sono diversi.

Nota: sto parlando "tecnicamente" e non "letteralmente" in molti casi, in realtà i server sono configurati per gestire questi elementi allo stesso modo, ma è possibile configurarli in modo che NON vengano gestiti allo stesso modo.

Diversi server lo gestiscono in modo diverso e in alcuni casi devono essere case sensitive. In molti casi i valori delle stringhe di query sono codificati (come ID di sessione o dati con codifica Base64 passati come valore di stringa di query) Questi elementi fanno distinzione tra maiuscole e minuscole per la loro natura, quindi il server deve fare distinzione tra maiuscole e minuscole nella loro gestione.

Quindi, per rispondere alla domanda ", se i server dovessero fare distinzione tra maiuscole e minuscole nel prendere questi dati, la risposta è" sì, sicuramente ".

Ovviamente non tutto deve fare distinzione tra maiuscole e minuscole, ma il server dovrebbe essere consapevole di cosa si tratta e come gestire tali casi.


Il commento di @Hart Simha dice sostanzialmente la stessa cosa. L'ho perso prima di postare, quindi voglio dare credito dove è dovuto il credito.



3

Considera quanto segue:

https://www.example.com/createuser.php?name=Paul%20McCartney

In questo ipotetico esempio, un modulo HTML - usando il metodo GET - invia il parametro "name" a uno script PHP che crea un nuovo account utente.

E il punto che sto sottolineando con questo esempio è che questo parametro GET deve fare distinzione tra maiuscole e minuscole per preservare la capitalizzazione di "McCartney" (o, come altro esempio, per preservare "Walter d'Isney", poiché esistono altri modi per i nomi che infrangono le solite regole di capitalizzazione).

Sono casi come questi che guidano la raccomandazione del W3C secondo cui lo schema e l'host non fanno distinzione tra maiuscole e minuscole, ma tutto ciò che segue è potenzialmente sensibile al maiuscolo / minuscolo e viene lasciato al server. Forzare l'insensibilità maiuscole / minuscole per standard renderebbe l'esempio precedente incapace di preservare il caso dell'input dell'utente passato come parametro di query GET.

Ma quello che direi è che sebbene questa sia necessariamente la lettera della legge per accogliere tali casi, lo spirito della legge è che, laddove il caso è irrilevante, si comportano in modo insensibile al caso. Gli standard, tuttavia, non possono dirti dove il caso è irrilevante perché, come gli esempi che ho dato, è una cosa dipendente dal contesto.

(ad esempio, il nome utente di un account è probabilmente il migliore costretto all'insensibilità al maiuscolo-minuscolo poiché "User123" e "user123" essendo account diversi potrebbero creare confusione - anche se il loro vero nome, come sopra, è meglio lasciare la distinzione tra maiuscole e minuscole).

A volte è rilevante, la maggior parte delle volte non lo è. Ma deve essere lasciato al server / sviluppatore web decidere queste cose - e non può essere prescritto dalla norma - poiché solo a quel livello si può conoscere il contesto.

Lo schema e l'host non fanno distinzione tra maiuscole e minuscole (che mostra la preferenza dello standard per la distinzione tra maiuscole e minuscole, dove può essere universalmente prescritto). Il resto spetta a te decidere, mentre comprendi meglio il contesto. Ma, come è stato discusso, probabilmente dovresti, nello spirito della legge, non considerare l'insensibilità del caso a meno che tu non abbia una buona ragione per non farlo.


Le stringhe di query vengono trattate come parte della posizione? Credo che siano trattati come entità separate e non utilizzati per la risoluzione della posizione.
jpmc26,

Le stringhe di query sono separate dalla posizione, sì. Ma gli stessi principi che ho mostrato lì con i parametri di query possono applicarsi anche ad altre parti dell'URL. Alcuni CMS, ad esempio, potrebbero riscrivere intenzionalmente "/user.php?id=3756" su "/ users / PaulMcCartney" per migliori URL leggibili dall'uomo in SEO (Wordpress lo fa, ad esempio). Il punto è che gli standard si ritirano deliberatamente dalla prescrizione rispetto a ciò che dipende dal contesto. È lasciato al server decidere, poiché il server comprende il contesto, dove uno standard universale non può.
Bob,

2

Gli URL non devono distinguere tra maiuscole e minuscole, a meno che non ci sia una buona ragione per cui non dovrebbero esserlo.

Questo non è obbligatorio (non fa parte di una RFC) ma rende la comunicazione e la memorizzazione degli URL molto più affidabili.

Se ho due pagine su un sito Web:

http://stackoverflow.com/ABOUT.html

e

http://stackoverflow.com/about.html

Come dovrebbero differire? Forse uno è scritto "gridando stile" (maiuscole) - ma da un punto di vista IA, la distinzione non dovrebbe mai essere fatta da una modifica nel caso dell'URL.

Inoltre, è facile implementarlo in Apache - basta usare CheckSpelling Onda mod_Speling.


0

Vecchia domanda ma mi sono imbattuto qui, quindi perché non fare un tentativo perché la domanda sta cercando varie prospettive e non una risposta definitiva.

w3c potrebbe avere i suoi consigli - a cui tengo molto - ma voglio ripensarci poiché la domanda è qui.

Perché w3c considera i nomi di dominio senza distinzione tra maiuscole e minuscole e lascia qualcosa in seguito insensibile alle maiuscole / minuscole?

Sto pensando che la logica è che la parte del dominio dell'URL è digitata a mano da un utente. Tutto dopo l'ipertesto verrà risolto dalla macchina (browser e server sul retro).

Le macchine sono in grado di gestire l'insensibilità del case meglio degli umani (non di tipo tecnico :)).

Ma la domanda è solo perché le macchine POSSONO gestire ciò che dovrebbe essere fatto in quel modo?

Voglio dire quali sono i vantaggi di nominare e accedere a una risorsa seduta su hereIsTheResourcevs hereistheresource?

La laterale è molto illeggibile rispetto a quella del cammello, che è più leggibile. Leggibile agli umani (incluso il tipo tecnico.)

Quindi, ecco i miei punti: -

Il percorso delle risorse cade da qualche parte nel mezzo della struttura di programmazione e talvolta si trova vicino a un utente finale dietro il browser.

L'URL (escluso il nome di dominio) non dovrebbe fare distinzione tra maiuscole e minuscole se si prevede che gli utenti lo tocchino o lo digitino ecc. È necessario sviluppare l'applicazione in modo da EVITARE che gli utenti digitino il percorso il più possibile.

Il tuo URL (escluso il nome di dominio) dovrebbe fare distinzione tra maiuscole e minuscole se i tuoi utenti non lo scriverebbero mai manualmente.

Conclusione

Il percorso dovrebbe essere case sensitive. I miei punti stanno pesando verso i percorsi case sensitive.


0

I caratteri URL vengono convertiti in codice esadecimale (se hai mai notato spazi negli URL visualizzati come% 20, ecc.) E poiché le lettere minuscole e maiuscole hanno valori esadecimali diversi, ha perfettamente senso che gli URL facciano sicuramente distinzione tra maiuscole e minuscole. Comunque lo spirito della domanda sembra DOVREBBE essere lo standard e io dico di no, ma lo sono. Spetta allo sviluppatore / fornitore tenere conto di ciò nel loro codice se vogliono farlo funzionare indipendentemente da un utente finale.


questo è interessante. i caratteri ASCII e normali (che hanno una maiuscola e una minuscola) non vengono effettivamente convertiti, se no? sono solo spazi e caratteri estesi a essere salvati nell'URL. I caratteri estesi hanno un modificatore maiuscolo / minuscolo?
TygerKrash,

0

Penso che questo e molte delle risposte intorno a ciò che la specifica fa o non dice manchi il punto della domanda. Dovrebbero essere case sensitive? Questa è davvero una domanda carica. Dal punto di vista dell'utente, la distinzione tra maiuscole e minuscole è un punto dolente, non tutti sanno fare la differenza. La questione se gli URI dovrebbero o meno essere, dipende dal contesto della domanda. Per flessibilità tecnica, sì, dovrebbero essere. Per usabilità, no, non dovrebbero esserlo.


Per essere onesti, qualsiasi domanda che si rivolge a "DOVREBBE" è intrinsecamente basata sull'opinione e potrebbe essere rimossa da StackOverflow. (More: stackoverflow.blog/2010/09/29/good-subjective-bad-subjective )
chharvey

0

Conservazione dei casi

Gli URL mantengono il caso , tra client e server. Tuttavia, alcune porzioni di URL possono o meno fare distinzione tra maiuscole e minuscole , a seconda del server, per un paio di motivi.

Sensibilità al maiuscolo / minuscolo

Le seguenti parti in grassetto degli URL potrebbero fare distinzione tra maiuscole e minuscole, a seconda della configurazione del sito e / o del server.

    http: // www. esempio.com /abc/def.ghi?jkl=mno#pqr

    utente @ esempio.com

Fondamento logico

La distinzione tra maiuscole e minuscole negli URL può avere diversi usi. Principalmente:

  1. Compatibilità nativa con filesystem sensibili al maiuscolo / minuscolo.
  2. Codifica dei dati più compatta all'interno degli URL, ad esempio per serializzazione, hash, ID, permalink e accorciatori di URL.

Come sviluppatore, credo che quanto sopra possa spesso essere gestito in modo migliore, ma capisco anche che ci sono casi in cui una situazione potrebbe non permetterlo.

Ad esempio, immagina un prodotto esistente che richiede molti dati inseriti nell'URL "GET", ma deve essere compatibile con le lunghezze massime degli URL di tutti i principali server, browser e meccanismi di cache / proxy. Per adattarsi anche a una stringa di comando di lunghezza moderata (inferiore a 1.024 caratteri per alcuni browser meno recenti), dovrai utilizzare ogni carattere univoco sicuro per l'URL che potresti (che è fondamentalmente la codifica base64url).

In un mondo ideale

È discutibile se gli URL debbano fare distinzione tra maiuscole e minuscole. Personalmente credo che non dovrebbero esserlo, per semplicità (anche se può creare URL più lunghi, abbiamo scappate percentuali per gestire facilmente i casi in cui dobbiamo garantire la conservazione di caratteri esatti e ci sono modi per trasferire dati diversi da quelli dell'URL) .

Molti sembrano concordare in base al fatto che gli URL senza distinzione tra maiuscole e minuscole sono esplicitamente abilitati per molti siti e servizi popolari, al fine di aumentare l'usabilità. L'esempio più importante è la parte nome utente degli indirizzi e-mail. La maggior parte dei provider di posta elettronica ignorerà il caso e talvolta anche i punti e altri simboli (come "j.smith@example.com" essendo gli stessi di "JSMITH@example.com"). Anche se i nomi utente e-mail fanno distinzione tra maiuscole e minuscole per impostazione predefinita, secondo le specifiche.

Tuttavia, il fatto è che, nonostante ciò che io o altri potremmo desiderare, questo è lo stato di funzionamento delle cose. E mentre un'eventuale transizione in tutto il mondo a uno standard URL senza distinzione tra maiuscole e minuscole è certamente possibile, ci vorrebbe probabilmente molto tempo poiché la distinzione tra maiuscole e minuscole è attualmente ampiamente utilizzata in rete per vari scopi.

Migliori pratiche

Per quanto riguarda le migliori pratiche, come utente puoi ragionevolmente attenersi alle lettere minuscole per la maggior parte delle situazioni e aspettarti che le cose funzionino. Le principali eccezioni sarebbero gli URL che usano la codifica basata su maiuscole o percorsi di documenti con equivalenti diretti del filesystem. Tuttavia, tali URL complessi sono generalmente incollati (o semplicemente cliccati) anziché digitati manualmente.

Come sviluppatore web, dovresti considerare di mantenere gli URL il più insensibili alle maiuscole. Sebbene ci siano chiaramente alcune situazioni difficili da evitare, a seconda del contesto, come notato sopra.


-1

la domanda è: l'URL deve essere sensibile al maiuscolo / minuscolo?

Non vedo alcuna utilità o buona pratica dietro gli URL sensibili al maiuscolo / minuscolo. È stupido, fa schifo e dovrebbe essere evitato in ogni momento.

Solo per sostenere la mia opinione, quando qualcuno chiede quale URL, come puoi spiegare quali caratteri dell'URL sono maiuscoli o minuscoli? È una sciocchezza e nessuno dovrebbe dirti diversamente.


32
C'è un vantaggio nel fatto che gli URL fanno distinzione tra maiuscole e minuscole. In alcuni siti Web, in cui gli oggetti sono codificati con ID univoci a cui è possibile fare riferimento tramite l'URL, la codifica può essere simile a base64 anziché a base36 . Ciò consente di codificare in modo esponenziale più oggetti univoci nello stesso numero di caratteri URL. Ad esempio, foo.com/000 - foo.com/zzz (senza distinzione tra maiuscole e minuscole) potrebbe fare riferimento a 36 ^ 3 oggetti unici, dove foo.com/000 - foo.com/ZZZ (distinzione tra maiuscole e minuscole, ovvero foo.com/zzz e foo.com/ZZZ sono percorsi diversi), farebbero riferimento a 62 ^ 3 oggetti.
Hart Simha,

6
Questa non è una risposta, è un commento supponente.
Tin Man,

1
Lo backup con un esempio. Gli URL vengono utilizzati dalle persone (vedi domanda originale), non dai computer. È molto difficile, quindi vedi PERCHÉ un collegamento non funziona e poiché quasi TUTTI i domini non fanno distinzione tra maiuscole e minuscole, così dovrebbe fare il resto dell'URL. I voti negativi sono per il mio tono di voce (che è un male), o perché le persone tecniche tendono a scegliere la bellezza tecnica piuttosto che l'esperienza dell'utente.
HenriKoppen,

1
@theTinMan È una risposta alla domanda che evoca l'opinione.
Chharvey,

Sono d'accordo con @HartSimha e poiché la domanda richiede un parere: a meno che una parte del percorso dell'URL non venga utilizzata per identificare un oggetto unico, per favore per l'amore di tutto ciò che è buono su Internet, NON renderlo maiuscolo / minuscolo.
jaybro,

-3

Per i siti Web ospitati su un server Linux, l'URL fa distinzione tra maiuscole e minuscole. http://www.google.com/about e http://www.google.com/Informazioni verranno reindirizzati in posizioni diverse. In un server Windows, l'URL non fa distinzione tra maiuscole e minuscole, come nel nominare una CARTELLA e verrà reindirizzato nella stessa posizione.


-6

È possibile creare URL non sensibili

RewriteEngine on
rewritemap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^/(.*)$ /${lowercase:$1} [R=301,L]

Rendere Google.com..GOOGLE.com ecc. Diretto a google.com


Questo non risponde alla domanda
monokrome il

3
La domanda è: "L'URL dovrebbe fare distinzione tra maiuscole e minuscole?" La tua risposta è: "Come rendere gli URL senza distinzione tra maiuscole e minuscole"
realPK l'
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.