在将第3方网页检索从PHP(使用cURL)迁移到Javascript时遇到一个奇怪的问题。
使用PHP可以毫无问题地检索页面,但是使用Javascript时,我会不断遇到以下错误:
请求的请求上没有'Access-Control-Allow-Origin'标头 资源。因此,不允许访问原点。
我已经搜索了相当多的内容,所有我能找到的答案就是解释,必须在服务器端设置Access-Control-Allow-Origin标头,如果不是,则基本上没有办法检索页面。
但是在这种情况下,我知道服务器愿意放弃战利品,因为PHP函数成功检索了页面。只有当我在Javascript函数中请求它时,它才会引发该错误。
这是(有效的)PHP函数:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_URL => <3rd party URL>,
));
$resp = curl_exec($curl);
curl_close($curl);
...这是(无效的)Javascript函数:
var getHTML = function ( url, callback ) {
// Feature detection
if ( !window.XMLHttpRequest ) return;
// Create new request
var xhr = new XMLHttpRequest();
// Setup callback
xhr.onload = function() {
if ( callback && typeof( callback ) === 'function' ) {
callback( this.responseXML );
}
}
// Get the HTML
xhr.open( 'GET', url );
xhr.responseType = 'document';
xhr.send();
};
getHTML( <3rd party URL>, function (resp) {
console.log(resp);
});
答案 0 :(得分:1)
浏览器具有内置的安全机制,除非在服务器上设置了特定的标头,否则不允许您进行跨站点请求。不是服务器不愿意返回数据,而是要保护您的个人信息的浏览器。您可以在this post.
中找到更多信息。