【问题标题】:AngularJS ignoring some headersAngularJS忽略了一些标题
【发布时间】:2013-08-10 01:47:51
【问题描述】:

我在玩一些 Angular 游戏,但遇到了一个小问题。

我正在尝试为 http 响应设置一个自定义标头,然后在 angular 端读取它的值。 标头已设置,我确信这一点,因为 chrome 的调试工具确认:

这意味着服务器端很好。到目前为止,一切都很好。

当我尝试通过 Angular 的 http 响应拦截器访问标头并在控制台中显示它们时,就会出现问题。这是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')

我得到了输出:

我真的不明白为什么 Angular 会剥离所有这些标题。谁能给我解释一下?有什么方法可以访问我的自定义标头的值?

提前谢谢你。

【问题讨论】:

  • 我不这么认为,它只是没有在调试控制台中显示列表。
  • 它也不响应 .headers('Custom-Header') 。返回未定义。

标签: angularjs coffeescript http-headers cors


【解决方案1】:

我找到了自己问题的答案。这不是 Angular 的错。问题是我正在使用 CORS。

我在 CORS 文档中找到了这样的信息:

用户代理必须过滤掉所有响应头,除了那些是简单响应头或字段名称与 Access-Control-Expose-Headers 头的值之一匹配的不区分大小写的 ASCII 头(如果any),在将响应标头暴露给 CORS API 规范中定义的 API 之前。

XMLHttpRequest 的 getResponseHeader() 方法因此不会暴露任何上面未指明的标头。

这意味着我必须简单地添加一个标题Access-Control-Expose-Headers: custom-header

【讨论】:

  • 感谢您的回复!我一直在努力解决这个问题!