http - ¿Las claves de la cadena de consulta son sensibles a las may
url uri (3)
Supongamos que tengo una url como esta:
http://www.example.com?key=123&KEY=198
Entonces, ¿cuál será el resultado de
request.querystring("key")
and
request.querystring("KEY")
Estoy un poco confundido.
La respuesta de @ gbjbaanb es incorrecta: las RFC solo especifican el juego de caracteres permitido para la cadena de consulta. Al igual que los componentes de ruta y fragmento del URI, el componente de consulta URI solo tiene significado solo para la autoridad que proporciona el recurso.
Depende totalmente de esa autoridad si esto es sensible a las mayúsculas o no.
En el caso de C # e IIS, el almacén de respaldo para la cadena de consulta analizada en el objeto HttpRequest
es System.Collections.Specialized.NameValueCollection
que no distingue entre mayúsculas y minúsculas (por defecto).
Dado que esa clase ofrece otros constructores permiten que se proporcionen diferentes comparadores de igualdad, no hay absolutamente nada para evitar que una implementación lo distinga entre mayúsculas y minúsculas.
Además, dado que la página en sí (y el javascript del lado del cliente) tienen acceso al URI sin formato, pueden hacer lo que quieran con él.
Si la cadena de consulta se genera como resultado de un envío de formulario HTML, las claves (nombres) provienen del valor del atributo de name
controles de formulario, que las especificaciones de HTML dicen que distingue entre mayúsculas y minúsculas. Pero, por lo que sé, nadie realmente hace eso.
Entonces, al final del día, debe saber qué espera el manejador de solicitudes en su cadena de consulta. Puede (o no) ser sensible a mayúsculas y minúsculas.
Según hurl.it , la key
será igual a 123
y KEY
, 198
. Serán accesibles como dos querystrings diferentes .
El RFC para URI dice:
6.2.2.1. Normalización de casos
Cuando un URI utiliza componentes de la sintaxis genérica, siempre se aplican las reglas de equivalencia de sintaxis de los componentes; a saber, que el esquema y el host no distinguen entre mayúsculas y minúsculas y, por lo tanto, deben normalizarse a minúsculas. Por ejemplo, el URI es equivalente a http://www.example.com/ .
Se supone que los demás componentes de sintaxis genéricos son sensibles a las mayúsculas y minúsculas, a menos que el esquema lo defina específicamente de otra manera (consulte la Sección 6.2.3).
Tenga en cuenta que el esquema ("http" aquí), el host (nombre del servidor) no distingue entre mayúsculas y minúsculas, pero debe estar en minúsculas de todos modos. El resto distingue entre mayúsculas y minúsculas a menos que esté usando un esquema diferente que explícitamente dice que debería ser insensible.
Entonces, key y KEY son cosas diferentes en todos los URI basados en http según la especificación.