Alamofire: Los encabezados de Accept-Language son incorrectos para alguna combinación de idioma / región

Creado en 7 abr. 2017  ·  3Comentarios  ·  Fuente: Alamofire/Alamofire

Alamofire genera Accept-Language encabezados usando la propiedad preferredLanguages de Locale , que es una combinación del idioma y la región.

Esto funciona bien para combinaciones estándar: en-US , fr-FR , fr-CA ...

Sin embargo, si el usuario elige un idioma que no coincide con la región, obtenemos una combinación que no se puede usar como Accept-Language .

Por ejemplo, tome un dispositivo configurado con la siguiente combinación:

  • Idioma: francés
  • Región: Estados Unidos

El primer preferredLanguages es luego fr-US , que no representa un idioma real (no existe una versión específica del idioma francés utilizado en los EE. UU.).

Por lo tanto, el Accept-Language generado contiene un valor que no se reconocerá en muchos casos. Aquí hay una lista de códigos válidos .

En un dispositivo francés / estadounidense, Alamofire genera los siguientes Accept-Language : fr-US;q=1.0, en-US;q=0.9
Esta función PHP no lo reconoce correctamente, que intenta encontrar la mejor configuración regional disponible. Devolverá en lugar de fr .

Por el contrario, Safari iOS se asegura de enviar un Accept-Language válido:

En un dispositivo francés / estadounidense, el Accept-Language enviado es fr-fr . (Aquí hay una forma rápida de conocer los encabezados HTTP enviados por un navegador).

Idealmente, Alamofire debería generar los mismos Accept-Language que Safari.

  • Versión de Xcode: 8.2.1
  • Versión de iOS: iOS 10
http headers question

Comentario más útil

Hola @simonliotier ,

Gracias por su informe detallado aquí ... muy apreciado. Lo que todos debemos tener en cuenta es que, si bien su caso de uso no desea recibir fr-US , otros sí pueden hacerlo. Siempre puede convertir fr-US a fr-FR en el lado del servidor para hacer un mapeo adecuado, pero nunca sabría cómo revertir fr-FR a lo que el usuario realmente tiene en su configuración regional establecido en el que es fr-US .

Alamofire solo establece el Accept-Language de forma predeterminada, pero puede anularlo para su caso de uso particular. No creo que sea correcto que intentemos hacer que la configuración regional del usuario sea más genérica.

Salud. 🍻

Todos 3 comentarios

¡Gracias por el informe! Sin embargo, no puedo encontrar documentación en RFC 7231 que

Tampoco puedo encontrar una lista oficial. Supongo que Safari tiene su propia lista de combinaciones aceptables. 😕

Hola @simonliotier ,

Gracias por su informe detallado aquí ... muy apreciado. Lo que todos debemos tener en cuenta es que, si bien su caso de uso no desea recibir fr-US , otros sí pueden hacerlo. Siempre puede convertir fr-US a fr-FR en el lado del servidor para hacer un mapeo adecuado, pero nunca sabría cómo revertir fr-FR a lo que el usuario realmente tiene en su configuración regional establecido en el que es fr-US .

Alamofire solo establece el Accept-Language de forma predeterminada, pero puede anularlo para su caso de uso particular. No creo que sea correcto que intentemos hacer que la configuración regional del usuario sea más genérica.

Salud. 🍻

¿Fue útil esta página
0 / 5 - 0 calificaciones