【问题标题】:AngularJS performs an OPTIONS HTTP request for a cross-origin resource => error 401AngularJS 对跨域资源执行 OPTIONS HTTP 请求 => 错误 401
【发布时间】:2015-02-14 13:15:37
【问题描述】:

我正在尝试使用 $resource 从 REST Web 服务获取数据。

这是我的代码:

    return $resource('http://serverURL', {}, {

                getQuartiers: {
                    method: 'GET',
                    headers:  {
                             'Authorization': 'Basic base64login:pseudostring',
                     },

                },


          });

问题在于,对于这样的标头,它是一个发送的选项请求,我收到错误 401 Unauthorized。 如果我删除标题,这是一个 GET 请求。 但我需要标题来发送我的授权字符串!

否则 web 服务是好的,或者通过 chrome 直接进入 url => 带有 login/pwd 的弹出窗口 => json 格式的正确数据 或使用邮递员 chrome 扩展,它发送一个 GET 请求。

怎么了?

【问题讨论】:

  • 您的标头请求似乎没问题,我在我的 web api 项目中使用了类似的东西。我的问题在于您的 Web 服务器,而不是您的 JS 代码。检查您的后端代码。
  • 去看看 Cors。 w3.org/TR/cors。那是你的问题atm。它是获得 401 的预检。
  • 由于使用带有 OPTION 请求的邮递员工作正常,我认为这不是服务器配置问题!?

标签: javascript angularjs web-services rest cors


【解决方案1】:

您似乎没有处理预检Options请求

您的 Web API 需要响应 Options 请求,以确认它确实配置为支持 CORS

要处理这个问题,您需要做的就是发回一个空响应

添加了这项额外检查以确保不会利用设计为仅接受 GETPOST 请求的旧 APIs。想象一下,当这个 verb 不存在时,向 API 发送一个 DELETE 请求。结果是不可预测的,结果可能是危险的

【讨论】:

  • 我不确定...你在谈论服务器配置,不是吗?实际上服务器发送响应: Access-Control-Allow-Headers:Authorization Access-Control-Allow-Methods:GET Access-Control-Allow-Origin:* etc 但似乎我的标头未正确发送:
  • 是的,那是在服务器端,API 配置。
  • 使用邮递员,OPTION 请求标头有这一行: Authorization:Basic mystring 使用我的代码,而是:Access-Control-Request-Headers:accept, authorization 所以我认为我的标头没有正确发送!?
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多