【发布时间】:2015-07-21 23:15:57
【问题描述】:
我正在编写一个指令,它将获取一个链接,发出 HEAD 请求以检查链接是否返回 200 代码,如果返回,则将该链接粘贴到 iframe src 中。
但是,我发现 $http 给了我错误,尽管我的 chrome 和 firefox 调试器的网络选项卡显示服务器响应状态码为 200。
Plnkr 在这里演示: http://plnkr.co/edit/dgn5E8u3WYijd73kKtAz?p=preview
angular.module('testHead', [])
.controller('testHeadController', function($http) {
var vm = this;
vm.results = "waiting";
vm.getHead = function() {
$http.head('http://www.apple.com/')
.then(
function(response) {
console.log("response", response)
},
function(error) {
console.log("error", error)
}
)
}
});
在控制台打开的情况下全屏打开预览,您将能够明白我的意思...
有人知道为什么会这样吗?它是 AngularJS 中的错误吗?为什么 AngularJS 不显示浏览器正在接收的状态码? 谢谢!
【问题讨论】:
-
浏览器成功获取文档。检查 CORS 访问并决定阻止请求。浏览器向应用程序发送“失败”响应而不是实际文档作为安全功能。这就是为什么您在浏览器中看到 200 而在 Angular.js 中看到 0。
-
对我来说具有讽刺意味的是,这是一个 HEAD 请求。这意味着我对内容不感兴趣,只对标题感兴趣。我可以看到我已经有了这些,我只是不知道如何在 AngularJS 中找到它们。是的,如果我使用一个我希望从中获得 404 的 url,我会看到 net 选项卡给了我 404 状态代码,但在 AngularJS 中我仍然得到 0。
-
只要服务器没有明确允许使用 CORS 标头,您就无法访问 JavaScript 中响应的任何部分,包括标头甚至状态。这是设计使然。如果服务器是您的,您可以添加 CORS 标头以允许请求。
-
所以我可以在 firebug net 选项卡中看到标题和响应代码,但我无法通过 JavaScript 访问它。是时候尝试不同的东西了……谢谢!
标签: angularjs