访问控制允许来源错误
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
。
我已经被难住了两天了,有人能帮帮我吗?
谢谢
【问题讨论】:
注意:contentType
是 sent 到 request 中的服务器的 Content-type
标头!它不是响应的Content-type
。这里不正确。
这是另一个解决方案; ***.com/questions/7564832/…
【参考方案1】:
问题是您正在尝试进行跨域调用(从http://localhost:8080
到http://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 的响应”的链接?以上是关于访问控制允许来源错误的主要内容,如果未能解决你的问题,请参考以下文章
Sphere Engine 问题 API - 错误:对预检请求的响应未通过访问控制检查:不存在访问控制允许来源
Django Angular cors错误:不允许访问控制允许来源