CORS выдает сообщение от домена A до домена B - PullRequest
0 голосов
/ 18 мая 2019

Я получаю проблему с CORS только на axios.

На этой html-странице я использую традиционную форму для публикации из домена A в домен B.

Форма отправки работает правильно.Почтовый запрос ajax работает правильно.Сообщение axios возвращает меня к CORS.

Доступ к XMLHttpRequest по адресу https://domainB/post.php' от источника 'http://domain A.com' заблокирован политикой CORS: Ответ на запрос предполетной проверкине проходит проверку контроля доступа: на запрашиваемом ресурсе отсутствует заголовок «Access-Control-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>

my post.php

<?php
echo 'post working';
var_dump( $_POST);
 $_POST['username'];
?>

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Произошла конфигурация с сервером. Я ничего не делал на своей стороне и настоял на хостинге. Они смогли это исправить.

0 голосов
/ 18 мая 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...