¿El estándar HTTP o algo define qué codificación se debe usar en caracteres especiales antes de que se codifiquen en url con% XXs? Si no define, ¿hay alguna manera de definir qué codificación se usa? Parece que la mayoría de los navegadores envían los datos en utf-8.¿Cuál es la codificación correcta de las cadenas de solicitud de obtención HTTP?
Respuesta
¿El estándar HTTP o algo define qué codificación se debe utilizar en caracteres especiales antes de que se codifiquen en url con% XXs?
El estándar HTTP, no. Pero otro estándar, IRI, puede entrar en juego.
Los URI son secuencias de bytes explícitamente (una vez codificadas%). Los caracteres Unicode a los que se asignan los bytes no están especificados por el estándar URI o el estándar HTTP para http: -scheme URIs.
Específicamente para los parámetros de consulta: los navegadores web usarán la codificación de la página de origen para hacer un envío de formulario GET URL, de modo que si tiene una página en ISO-8859-1 y pone 'é' en un cuadro de búsqueda, obtendrá '? search =% E9', pero si hace lo mismo en una página codificada como UTF-8, obtendrá '? search =% C3% E9'. Si no sirve su página de formulario con un juego de caracteres en particular, el navegador lo adivinará, lo cual no quiere, ya que hará que sea imposible adivinar en qué formato entrará el envío.
Para las otras partes de una URL, un navegador no las generará, pero si la proporciona con caracteres no ASCII en los enlaces, generalmente las codificará como UTF-8. Esto no es confiable, ya que depende de la configuración del navegador y la configuración regional, por lo que es mejor no usar esto en este momento.
La norma que permite correctamente los caracteres que no son ASCII en los enlaces es IRI. IRI convierte a URI mediante UTF-8 -% - que codifica la mayor parte de la URL, pero el nombre de host se convierte utilizando Punycode. Por compatibilidad, es mejor no confiar en que los navegadores comprendan los IRI en los enlaces. En cambio, UTF-8-then -% - codifica su ruta y los caracteres de parámetros usted mismo. Todavía aparecerán como los caracteres correctos en la barra de direcciones en los navegadores modernos; Desafortunadamente, IE no mostrará el formulario IRI de caracteres decodificados en todos los casos, dependiendo de la configuración del idioma.
El Wiki IRI para el personaje griega gamma es:
http://en.wikipedia.org/wiki/Γ
codifica en un URI, que es:
http://en.wikipedia.org/wiki/%CE%93
Que yo sepa, no hay forma de definirlo, aunque siempre he supuesto que es ASCII, ya que eso es lo que es el DNS (actualmente, aunque el DNS localizado viene, con todos los problemas eso implica).
Nota: UTF8 es "compatible con ASCII" a menos que intente utilizar caracteres extendidos. Esto probablemente tenga una pequeña parte en el razonamiento detrás de por qué algunos navegadores pueden enviar sus datos GET codificados en UTF8.
EDIT: De tu comentario, parece que no sabes cómo funciona el% de codificación, así que aquí va.
Dada la cadena de consulta de cadena siguiente, "?foo=Hello World!"
, el "¡Hola mundo!" parte necesita codificación URL. La forma en que esto funciona es que cualquier carácter 'especial' obtiene su valor ASCII tomado y convertido a hexadecimal con el prefijo '%'
. Entonces la cadena anterior se convertiría a "?foo=Hello%20World%21"
.
me refería caracteres especiales en los parámetros de la petición como en http: // foo/page.php? name =% 12% 34foo. – JtR
Creo que ISO-8859 también es compatible con ASCII en caso de que no utilice nada que falte en ASCII. Mi Firefox al menos parece enviar iso-8859-1 como un parámetro accept-charset por defecto en las solicitudes. Después de cambiar la codificación predeterminada en about: config, aún envía solicitudes get en utf-8. – JtR
'Accept-Charset' solo afecta la codificación de páginas devueltas, no la solicitud en sí. Y me estaba refiriendo a cada personaje en la consulta GET, no solo al nombre de host, o alguna otra parte. –
por RFC 2616,
CHAR = <any US-ASCII character (octets 0 - 127)>
y
token = 1*<any CHAR except CTLs or separators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
y URIs son token
s con varios separadores específicos. Entonces, en teoría, nada más que US-ASCII debería estar allí. (En la práctica, dado que la extensión ISO-8859-1 de US-ASCII se utiliza en muchos otros lugares en las especificaciones HTTP, no es inusual encontrar implementaciones HTTP que admitan ISO-8859-1 en lugar de US-ASCII, pero estrictamente hablando que no es HTTP compatible con los estándares).
- 1. ¿Cuál es la codificación predeterminada para las cadenas C?
- 2. Detectando la codificación de caracteres de una solicitud HTTP POST
- 3. ¿Cuál es la forma correcta de validar solicitudes HTTP y devolver respuestas HTTP específicas en Global.asax?
- 4. ¿Cuál es la terminología correcta para una solicitud "no AJAX"?
- 5. ¿Cuál es la forma correcta de codificación URL de caracteres Unicode?
- 6. codificación nodejs usando la solicitud
- 7. ¿Cuál es la mejor práctica de codificación para las condiciones?
- 8. Cómo evitar las cadenas de codificación rígida
- 9. ¿Cuál es la forma correcta de emular la conexión TCP a través del proxy HTTP (s)?
- 10. ¿Cuál es la ventaja de utilizar la codificación Base64?
- 11. ¿Cuál es la codificación de caracteres de String en Java?
- 12. ¿Cuál es la posición correcta de los literales en la comparación de cadenas?
- 13. ¿Cuál es la forma correcta de verificar la igualdad de cadenas en JavaScript?
- 14. ¿Cuál es la declaración correcta de main?
- 15. ¿Cuál es la forma correcta de redirigir?
- 16. ¿Cuál es la forma correcta de ver idempotencia en términos de HTTP DELETE?
- 17. ¿Cuál es la codificación correcta de un valor booleano en un mensaje SOAP?
- 18. ¿Cuál es la codificación correcta para el tipo de SNMP Unsigned32?
- 19. Solicitud de obtención parametrizada en Ruby?
- 20. longitud máxima de la solicitud HTTP GET?
- 21. ¿Cómo se configuran los encabezados en la solicitud de obtención de http?
- 22. Por qué la solicitud de Http con Fiddler es increíble
- 23. ¿Cuál es la sintaxis correcta para las matrices en powershell?
- 24. ¿Cuál es exactamente la solicitud de Ajax? ¿Es diferente de la solicitud de servlet?
- 25. Obtención de atributos de solicitud en freemarker
- 26. ¿Cuál es la forma correcta de inicializar cadenas vacías en PHP?
- 27. Datos principales: entidad abstracta en la solicitud de obtención
- 28. ¿Cuál es la forma correcta de declarar un Doctype HTML5?
- 29. ¿Cuál es la codificación predeterminada para System.IO.File.ReadAllText
- 30. ¿Cómo detectar la codificación correcta para read.csv?
¿Dónde descubrió que el navegador envía datos en la codificación en la que recibió el formulario? Mi Firefox y Chrome realmente parecen funcionar de esa manera cuando cambio la información del juego de caracteres. – JtR
Es solo uno de esos comportamientos que siempre se han seguido, incluso en los comienzos de Netscape. De acuerdo con las especificaciones, la codificación de envío debe ser controlada por 'accept-charset' y comunicada al servidor en sub-encabezados de datos de formulario multiparte, pero en la práctica IE obtiene' accept-charset' peligrosamente erróneo y ningún navegador envía sub formulario-datos -headers, por lo que estamos atascados con esta situación de depender de la codificación del formulario. Bueno, algún día todos usarán UTF-8 y todo funcionará. Un siglo ... – bobince