Tengo una API WEB que estoy consumiendo de POSTMAN y funciona perfectamente bien:
Encabezados:
Tipo de contenido: aplicación/json X-Id. de desarrollador: asdasdas X-Api-Key: asdasdas Autorización: Portador sasdasdsa Zona horaria: Hora estándar de Marruecos
Cuando hago una solicitud GET en POSTMAN, funciona bien, sin embargo, desde angular 2 (Ionic 2) aparece el siguiente error:
Request header field Time-Zone is not allowed by Access-Control-Allow-Headers in preflight response. let params: URLSearchParams = new URLSearchParams(); params.set('date', date); //Header let headers = new Headers({ 'Content-Type': AppSettings.ContentType, 'X-Developer-Id': AppSettings.XDeveloperId, 'X-Api-Key': AppSettings.XApiKey, 'Time-Zone': AppSettings.time_zone, 'Authorization': AppSettings.Authorization + localStorage.getItem("AccessToken") }); var RequestOptions: RequestOptionsArgs = { url: AppSettings.UrlAvailability + userId, method: 'GET', search: params, headers: headers, body: null }; return this.http.get((AppSettings.UrlAvailability + userId), RequestOptions) .map(res => res.json()) .do(data => { data }, err => console.log('error: ' + err));Primero, creo que los desarrolladores de API tienen que hacer algo en el lado del servidor, como habilitar ese encabezado de zona horaria en CORS, sin embargo, si ese fuera el caso, obtendríamos el mismo error en POSTMAN, pero funciona bien allí.
¿Que me estoy perdiendo aqui?
Esto es algo que necesita configurar en el servidor. Primero debe asegurarse de tener soporte CORS. No uso ASP.NET, así que no sé cómo hacerlo. Estoy bastante seguro de que una búsqueda rápida en Google encontrará la respuesta. Luego, debe asegurarse de que en la configuración de CORS del servidor, los encabezados especiales que desea que el cliente pueda enviar se agreguen a los encabezados permitidos de CORS. Eso es lo que dice el error: que los encabezados no están incluidos en el encabezado de respuesta Access-Control-Allow-Headers . El encabezado de respuesta se vería así
Access-Control-Allow-Headers: X-Developer-Id, X-Api-Key, Time-Zone, AuthorizationPara obtener más información sobre CORS, consulte el MDN
Primero, creo que los desarrolladores de API tienen que hacer algo en el lado del servidor, como habilitar ese encabezado de zona horaria en CORS; sin embargo, si ese fuera el caso, obtendríamos el mismo error en POSTMAN, pero funciona bien allí.
No, Postman no tiene las mismas restricciones. Es una aplicación de escritorio nativa. Dato curioso: el 99% de las personas que publican preguntas en SO que tienen un problema de CORS, tienen en algún lugar de su publicación "... ¡pero funciona con Postman!". Así que no te sientas mal :-)
Creo que debería eliminar algunos de sus encabezados y verificar su tipo de contenido para que su solicitud pueda considerarse como una "solicitud simple" y luego no active una verificación previa de CORS como se explica en el documento.
fuente: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#examples_of_access_control_scenarios
Además de los encabezados establecidos automáticamente por el agente de usuario (por ejemplo, Conexión, Agente de usuario u otros encabezados definidos en la especificación de recuperación como un nombre de encabezado prohibido), los únicos encabezados que se pueden configurar manualmente son aquellos que el Fetch spec se define como un encabezado de solicitud incluido en la lista segura de CORS, que son:
- Aceptar
- Aceptar-Idioma
- Contenido-Idioma
- Tipo de contenido (tenga en cuenta los requisitos adicionales a continuación)