AngularJS 对跨域资源执行 OPTIONS HTTP 请求 => 错误 401
Posted
技术标签:
【中文标题】AngularJS 对跨域资源执行 OPTIONS HTTP 请求 => 错误 401【英文标题】:AngularJS performs an OPTIONS HTTP request for a cross-origin resource => error 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 请求的邮递员工作正常,我认为这不是服务器配置问题!? 【参考方案1】:您似乎没有处理预检Options
请求。
您的 Web API 需要响应 Options
请求,以确认它确实配置为支持 CORS
。
要处理这个问题,您需要做的就是发回一个空响应。
添加了这项额外检查以确保不会利用设计为仅接受 GET
和 POST
请求的旧 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 所以我认为我的标头没有正确发送!?以上是关于AngularJS 对跨域资源执行 OPTIONS HTTP 请求 => 错误 401的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS 对跨域资源执行 OPTIONS HTTP 请求 => 错误 401