CORS发布域A到域B

时间:2019-05-18 03:50:53

标签: php jquery ajax axios

我仅在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'];
?>

2 个答案:

答案 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 ))

通过代理发出请求将以这种方式工作

  1. CORS代理会将您的请求转发到https://domainB.com/post.php
  2. 带有https://domainB.com/post.php标头的Access-Control-Allow-Origin的返回响应。
  3. 现在您的浏览器可以看到响应标题中存在Access-Control-Allow-Origin个标题。

有关更多详细说明,您可以查看

https://stackoverflow.com/a/43881141/2850383

答案 1 :(得分:0)

服务器已配置。我没有做任何事情,并坚持与托管公司合作。他们能够修复它。