首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP可以读取第三方URL,而Javascript不能。为什么?

PHP可以读取第三方URL,而Javascript不能。为什么?
EN

Stack Overflow用户
提问于 2018-07-26 07:46:34
回答 1查看 32关注 0票数 -1

在尝试将第三方页面检索从PHP (使用cURL)迁移到Javascript时,我遇到了一个奇怪的问题。

使用PHP,我可以毫无问题地检索页面,但使用Javascript时,我总是收到以下错误:

否请求的资源上存在'Access-Control-Allow-Origin‘标头。因此,不允许访问源。

我已经搜索了很多,我能找到的都是答案,解释说必须在服务器端设置Access-Control-Allow-Origin头,如果不是,那么基本上就没有办法检索页面。

但在这种情况下,我知道服务器愿意放弃战利品,因为PHP函数成功地检索到了页面。只有当我在Javascript函数中请求它时,它才会抛出该错误。

下面是(有效的) PHP函数:

代码语言:javascript
复制
$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函数:

代码语言: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);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 08:02:18

浏览器具有内置的安全机制,除非在服务器上设置了特定的标头,否则不允许进行跨站点请求。这不是服务器不愿意返回数据,而是浏览器想要保护你的个人信息。您可以在this post.中找到更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51529149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档