访问控制允许来源错误

Posted

技术标签:

【中文标题】访问控制允许来源错误【英文标题】:Access-Control-Allow-Origin error 【发布时间】:2013-03-02 23:26:00 【问题描述】:

我正在使用以下脚本 -

<!DOCTYPE html>
<html>
<head>
<script src="jquery-1.9.1.min.js"></script>
<script>
function postForm() 

    $.ajax(
            type: 'POST',
            url: 'http://10.0.0.8:9000/demo',
            data: "name" : "test",
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
        )
    

</script>
</head>
<body>
    <form id="ajaxForm" onsubmit="postForm(); return false; "  method="post"> 
        <input id="test" type="text" name="name" value="Hello JSON" /> 
        <input type="submit" value="Submit JSON" /> 
    </form>

</body>
</html>

我尝试访问的计算机正在运行播放框架。我收到以下错误:

选项http://10.0.0.8:9000/demo 404(未找到)jquery-1.9.1.min.js:5 XMLHttpRequest 无法加载 http://10.0.0.8:9000/demo。 Access-Control-Allow-Origin 不允许来源http://localhost:8080

我已经被难住了两天了,有人能帮帮我吗?

谢谢

【问题讨论】:

注意:contentTypesentrequest 中的服务器的 Content-type 标头!它不是响应的Content-type。这里不正确。 这是另一个解决方案; ***.com/questions/7564832/… 【参考方案1】:

问题是您正在尝试进行跨域调用(从http://localhost:8080http://localhost:9000)。 Same Origin Policy 不允许这样做,因此浏览器尝试使用 Cross-Origin Resource Sharing 询问服务器是否可以允许跨域调用。 (这就是您看到的OPTIONS HTTP 请求。)由于服务器没有回复带有允许调用的标头的OPTIONS 请求,因此出于安全原因,它被浏览器拒绝。

SOP 适用于所有真正的“ajax”调用(例如,通过XMLHttpRequest 调用)。您可以:

    更新服务器以实现对OPTIONS 请求的响应,将标头传回以允许调用(这将使其在most modern browsers 上工作),或者

    向同一个端口发出请求(我猜你不这样做是有原因的),所以请求来自同一个来源并且 SOP 不适用,或者

    切换到使用JSON-P。但是JSON-P 不适用于表单提交,因为它是GET,而GET 操作应该是idempotent,而大多数表单提交不是。因此,除非这恰好是一个幂等的表单提交(例如,搜索),否则使用 JSON-P 充其量只是一个 hack。

【讨论】:

如果您使用 apache 作为本地主机,您是否有关于如何“更新服务器以实现对 OPTIONS 的响应”的链接?

以上是关于访问控制允许来源错误的主要内容,如果未能解决你的问题,请参考以下文章

访问控制允许来源错误

Chrome 中的访问控制允许来源错误

Sphere Engine 问题 API - 错误:对预检请求的响应未通过访问控制检查:不存在访问控制允许来源

Django Angular cors错误:不允许访问控制允许来源

如何修复错误“加载资源失败:访问控制允许来源不能包含多个来源”

重复的访问控制允许来源:* 导致 COR 错误?