Angularjs ignorando algunos encabezados -- angularjs campo con coffeescript campo con http-headers campo con cors camp Relacionados El problema

AngularJS ignoring some headers


3
vote

problema

Español

Estoy jugando un poco con angular y me encontré con un pequeño problema.

Estoy tratando de establecer un encabezado personalizado para la respuesta HTTP y, posteriormente, leí su valor en el lado de Angular. El encabezado se establece y estoy seguro de eso porque la herramienta de depuración de Chrome confirma que:

encabezados de respuesta

Eso significa lado del servidor está bien. Hasta aquí todo bien.

Los problemas ocurren cuando intento acceder a los encabezados a través de un interceptor de respuesta HTTP en angular y mostrarlos en la consola. Aquí está el código en Coffeescript:

  angular.module('app').factory 'httpInterceptor', function($q) ->   (promise) ->     success = (response) ->       console.log response.headers()       response     error = (response) ->       $q.reject(response)      promise.then success, error  angular.module('app').config ($httpProvider) ->   $httpProvider.responseInterceptors.push('httpInterceptor')   

y obtengo la salida:

salida de la consola

Realmente no entiendo por qué la tira angular de todos esos encabezados. ¿Alguien podría explicarme? ¿Hay alguna forma de acceder al valor de mi encabezado personalizado?

Gracias de antemano.

Original en ingles

I am playing a bit with angular and i came across a little problem.

I am trying to set a custom header for http response and later read its value on angular's side. The header is set and I am sure of that because chrome's debug tool confirms that:

Response headers

That means server side is fine. So far so good.

The problems occurs when I try to access headers via http response interceptor in angular and display them in console. Here's the code in coffeescript:

angular.module('app').factory 'httpInterceptor', function($q) ->   (promise) ->     success = (response) ->       console.log response.headers()       response     error = (response) ->       $q.reject(response)      promise.then success, error  angular.module('app').config ($httpProvider) ->   $httpProvider.responseInterceptors.push('httpInterceptor') 

And i get the output:

Console output

I really don't understand why does angular strip all those headers. Could anyone explain it to me? Is there any way to access my custom header's value?

Thank you in advance.

           
   
   

Lista de respuestas

12
 
vote
vote
La mejor respuesta
 

He encontrado una respuesta a mi propia pregunta. No es culpa angular. La cosa es que estoy usando cors.

He encontrado dicha información en la documentación de CORS:

Los agentes de usuario deben filtrar todos los encabezados de respuesta que no sean aquellos que son un encabezado de respuesta simple o, de los cuales el nombre del campo es una coincidencia ASCII, una coincidencia insensible a la caja ASCII para uno de los valores de los encabezados de encabezados de exposición de control de acceso (si cualquiera), antes de exponer los encabezados de respuesta a las API definidas en las especificaciones de API de CORS.

El método GetResponseHeader () de XMLHTTPRequest, por lo tanto, no expondrá ningún encabezado que no se indique anteriormente.

Significa que solo tengo que agregar un encabezado Access-Control-Expose-Headers: custom-header .

 

I have found an answer to my own question. It's not Angular's fault. The thing is I am using CORS.

I have found such information in CORS documentation:

User agents must filter out all response headers other than those that are a simple response header or of which the field name is an ASCII case-insensitive match for one of the values of the Access-Control-Expose-Headers headers (if any), before exposing response headers to APIs defined in CORS API specifications.

The getResponseHeader() method of XMLHttpRequest will therefore not expose any header not indicated above.

It means that I have to simply add a header Access-Control-Expose-Headers: custom-header.

 
 
 
 

Relacionados problema

3  OAUTH2 - Estado 401 en la solicitud de opciones al recuperar el token  ( Oauth2 status 401 on options request while retrieving token ) 
Nuestra pila utiliza la columna vertebral como la aplicación del lado del cliente y la bota de primavera como una API RESTFULT. Estamos tratando de hacer la...

15  Haciendo un trabajo de API de búsqueda con cors después de la respuesta de las opciones  ( Making fetch api work with cors after options response ) 
Estoy tratando de buscar datos de nuestra API. La API ha habilitado el soporte de CORS y devuelve la respuesta a continuación a la solicitud de opciones: A...

4  ¿Los eventos enviados por servidor funcionan con CORS?  ( Do server sent events work with cors ) 
Según mdn : Nota: Aunque aún no es parte de la norma, EventCource admite CORS en Firefox 11 y posteriormente. Se espera que esto se vuelva estándar pronto...

1  ¿Por qué estoy obteniendo un error 404 para las opciones para solo mis llamadas de API de diseño personalizado?  ( Why am i getting a 404 error for options for only my custom devise api calls ) 
He estado luchando tratando de que mi API trabaje con CORS. Seguí las instrucciones de: http://kellishaver.tumblr.com/post/40758797489/cors-ads-aders -convis...

25  Spring Standal Spring OAuth2 JWT Autorization Server + Cors  ( Standalone spring oauth2 jwt authorization server cors ) 
Entonces, tengo el siguiente servidor de autorización condensado de este ejemplo de Dave Syer @SpringBootApplication public class AuthserverApplication {...

2  Enviando la solicitud posterior a través de observable desde angular a nodejs  ( Sending post request via observable from angular to nodejs ) 
Tengo una aplicación angular 5 que se ejecuta y he configurado expressjs como el backend, estoy con un problema al tratar de suscribirme a un observable en an...

13  Cross Dominio Post Query utilizando el intercambio de recursos de origen cruzado No recuperará datos  ( Cross domain post query using cross origin resource sharing getting no data back ) 
Estoy enviando Data Cross Dominio a través de una solicitud de publicación, pero la respuesta no funciona, específicamente, el controlador de éxito de Jquery ...

1  Cors Solución alternativa en Angular.js $ http post?  ( Cors workaround in angular js http post ) 
¿Hay una solución para enviar el dominio cruzado de la solicitud postal a través de angular, además de usar un proxy? A continuación se rechaza la solicitud, ...

0  'Bloqueado por la política de CORS', pero el encabezado está presente  ( Blocked by cors policy but header is present ) 
He creado una API de descanso usando IR y <li>0 y una frontend usando VUE. Cada vez que hago una solicitud de API, recibo el error <li>111 en la consola d...

10  Los encabezados de CORS se alteran en el navegador, lo que resulta en el contenido bloqueado  ( Cors headers are altered in the browser resulting in content becoming blocked ) 
actualización 2 (un conjunto completo de registros) desde la perspectiva del cliente Encabezados de solicitud: post /dev/micro_server.php http / 1.1 ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos