2009-06-02 6 views
11

In altre parole, ha importanza se utilizzo http://www.example.com/ o http://wwW.exAmPLe.COm/?Il caso del nome host HTTP (superiore/inferiore) è importante?

Ultimamente mi sono imbattuto in strani problemi con i nomi degli host: ho un server web Apache2.2 + PHP5.1.4, accessibile da tutti i tipi di browser. gli utenti di IE6, in particolare, (esp., quando il loro stringa UA è gravato da numerosi BHO, nessun modello ancora) sembrano avere problemi di accesso al sito (biscotti scompaiono, JS si rifiuta di caricare) quando si entra in via http://www.Example.com/, ma non http://www.example.com/

I ho controllato le RFC HTTP e DNS, le mie P3P policies, le impostazioni dei cookie e SOP; eppure da nessuna parte ho visto nemmeno menzionare i nomi di dominio che fanno distinzione tra maiuscole e minuscole.

(lo so percorso e query string sono case sensitive (?x=foo è diverso da ?x=Foo) e li trattano in modo appropriato; sto facendo nessuna analisi/elaborazione sul nome di dominio nel mio codice)

sto facendo qualcosa di sbagliato o è questo solo alcuni browser + cazzate della barra degli strumenti dovrei lavorare intorno?

risposta

24

I nomi di dominio sono non case-sensitive; Example.com si risolverà nello stesso IP di eXaMpLe.CoM. Se un server web o browser considera l'intestazione Host come case-sensitive, questo è un bug.

+2

Hai ragione - uno degli script di cache stava confrontando i nomi dei domini in modo sensato e stava causando i problemi. Forzare gli host in minuscolo sembra risolverlo. – Piskvor

+5

Quindi, questo script è gravemente danneggiato e deve essere corretto. – bortzmeyer

0

No, non c'è la distinzione tra maiuscole e minuscole rispetto allo specificatore del protocollo.

You can see this in the RFC for URLs.

2.1. Le parti principali degli URL

I nomi di schema sono costituiti da una sequenza di caratteri . Le lettere minuscole "a" - "z", le cifre ei caratteri plus ("+"), punto (".") E trattino ("-") sono consentiti. Per la resilienza, i programmi devono interpretare gli URL in lettere maiuscole equivalenti a in lettere minuscole nei nomi di schema (ad esempio, consentire "HTTP" e "http").

+1

Perché le persone continuano a citare le specifiche obsolete? Sospiro! –

5

No, questo non dovrebbe fare alcuna differenza.

Verificare l'RFC Spec URL (http://www.ietf.org/rfc/rfc1738.txt). Dalla sezione 2.1:

Per resilienza, i programmi di interpretariato URL dovrebbe trattare le lettere maiuscole equivalenti a minuscole nello schema nomi

+1

+1 per il riferimento :) – cgp

+5

Non stavamo discutendo il nome dello schema. (Anche: RFC 1738 è antico, ed è stato aggiornato più volte da allora: l'attuale RFC è 3986). –

+0

Per le specifiche elencate sopra ([http://www.ietf.org/rfc/rfc3986.txt][1]). Dalla Pagina 18: > Anche se host è case-insensitive, dei produttori e dei normalizzatori > dovrebbe usare lettere minuscole per i nomi registrati e esadecimale > indirizzi per esigenze di uniformità, mentre solo usando maiuscole > lettere per cento-codifiche. [1]: http://www.ietf.org/rfc/rfc3986.txt – geedew

1

Secondo http://tools.ietf.org/html/rfc1035:

Per tutti parti del DNS che fanno parte del protocollo ufficiale, tutti i confronti tra stringhe di caratteri (ad esempio, etichette, nomi di dominio, ecc.) sono fatti in modo non sensibile alla distinzione tra maiuscole e minuscole. Al momento, questa regola è nella forza in tutto il sistema di dominio, senza eccezioni.

Si prosegue dicendo che questo potrebbe cambiare in futuro. Penso che si possa dedurre che il dominio COM non fa distinzione tra maiuscole e minuscole, ma altri domini che consentono l'uso di caratteri non ASCII potrebbero differire.

+0

. COM accetta IDN, anche ... E IDN non modifica nulla per il fatto che i nomi di dominio non fanno distinzione tra maiuscole e minuscole, quindi café.com e CAFÉ.com sono gli stessi. – bortzmeyer

4

Dato che hai formulato la tua domanda come una domanda pratica e poi hai descritto un problema nel mondo reale, la risposta è in realtà: SÌ.

Le altre risposte sono corrette su ciò che le specifiche RFC dicono sui nomi degli host. Tecnicamente dovrebbero essere case-insensitive. (In effetti, la vecchia convenzione era che il dominio di primo livello (TLD) doveva essere in maiuscolo ... come "apple.COM").

Tuttavia, nel mondo reale, i software maturi come i resolver del sistema operativo e i principali browser hanno ragione. Qualunque tipo di codice secondario potrebbe gestire questo errore e incasinarti.