我仅在axios上遇到CORS问题。
在此html页面中,我使用的是传统形式将域A发布到域B。
表单提交工作正常。 ajax发布请求可以正常工作。 axios帖子使我回到了CORS中。
从原点“ https://domainB/post.php A.com访问“ http://domain”处XMLHttpRequest的操作已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'访问控制-Allow-Origin标头出现在请求的资源上
<html>
<head>
<title>Registration Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script src="https://npmcdn.com/axios/dist/axios.min.js"></script>
<body>
<h2>Registration Form</h2>
<form action="https://domainB.com/post.php" method="POST">
Last name:
<input type="text" name="username">
<input type="hidden" name="form_submitted" value="1" />
<input type="submit" value="Submit">
</form>
<script>
$(document).ready(function(){
$.post("https://domainB.com/post.php",
{
username: "Donald Duck",
city: "Duckburg"
},
function(data,status){
alert("Data: " + data + "\nStatus: " + status);
});
});
</script>
<script>
(function() {
axios.post('https://domainB.com/post.php', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
})();
</script>
</body>
</html>
我的post.php
<?php
echo 'post working';
var_dump( $_POST);
$_POST['username'];
?>
答案 0 :(得分:0)
CORS由后端控制。
浏览器阻止您的代码访问响应,因为浏览器无法看到Access-Control-Allow-Origin
的响应。
使用CORS会向服务器发出预检请求,以查看是否允许该请求。您需要通过设置标头OPTIONS
来允许服务器响应来自Acces-Control-Allow-Origin: *
作为请求方法的请求,该标头将允许来自任何来源的请求。另外,您可以只允许某些来源Acces-Control-Allow-Origin: http://example.com.
通过代理发出请求,事情仍然可以解决,代理可以代表您的请求发送适当的CORS标头。
const proxy = "https://cors-anywhere.herokuapp.com/";
const url = "https://domainB.com/post.php";
fetch(proxy + url)
.then(response => response.text())
.then(contents => console.log(contents))
.catch(() => console.log("CORS Error" + url ))
通过代理发出请求将以这种方式工作
https://domainB.com/post.php
https://domainB.com/post.php
标头的Access-Control-Allow-Origin
的返回响应。Access-Control-Allow-Origin
个标题。有关更多详细说明,您可以查看
答案 1 :(得分:0)
服务器已配置。我没有做任何事情,并坚持与托管公司合作。他们能够修复它。