在尝试将第三方页面检索从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);
...and下面是(不起作用的) 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);
});
发布于 2018-07-26 08:02:18
浏览器具有内置的安全机制,除非在服务器上设置了特定的标头,否则不允许进行跨站点请求。这不是服务器不愿意返回数据,而是浏览器想要保护你的个人信息。您可以在this post.中找到更多信息
https://stackoverflow.com/questions/51529149
复制相似问题