服务器端的access-control-allow-origin问题?

时间:2018-04-16 00:32:05

标签: javascript jquery ajax http cross-domain

我需要向客户端的公司内部网站发送获取请求。这是我的代码:

<head>
<script src="https://code.jquery.com/jquery-1.12.4.js" integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU=" crossorigin="anonymous"></script>
<script type='text/javascript'>
$(document).ready(function () {
    var url = 'https://jsonplaceholder.typicode.com/photos'; //working
    //var url = 'xxxxxxx'; //internal url (returns json), not working
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true)
    xhr.onload = function () {
        if (xhr.readyState === xhr.DONE) {
            console.log(xhr.response)
            console.log(xhr.responseText)
        }
    }
    xhr.send()
})
</script>
</head>

这适用于我放入的测试网址(当然,其域名与我的服务器不同),这意味着它可以正常使用CORS请求。

但是,它不适用于公司内部网址。我得到的错误是“请求资源上没有'Access-Control-Allow-Origin'标头。因此不允许Origin'abc'(我的服务器)访问。“

我的问题:导致错误的原因是什么?为什么我的CORS请求适用于一个网站但不适用于另一个网站?我公司的内部网站是否有一些限制,例如我的服务器在其“原始防火墙”上没有列入白名单?

有趣的是,如果我使用ajax并将dataType设置为jsonp,它可以工作(即我能够获得json响应)。但是当然,因为返回的数据是json而不是jsonp,我得到了一个不同的错误,说“意外令牌:”。这让我怀疑自己。如果它是由内部网站放置的东西,为什么ajax / jsonp技巧有效?

下面的ajax代码有效 - 它获得了有效的json响应。但是,因为返回的数据是json而不是jsonp,所以我得到了一个不同的错误(正如我所说的那样)。

$.ajax({
    url: 'xxxxxxx', //internal url (returns json)
    dataType: 'jsonp',
    success: function( response ) {
        console.log( response ); // server response
    }
});

0 个答案:

没有答案