Как починить на сервере No 'Access-Control-Allow-Origin' header is present on the requested resource?

153
27 мая 2019, 04:40

код клиента

 send() {
            if (!!this.claim.fio && !!this.claim.place && !!this.claim.phone && 
    !!this.claim.email && !!this.claim.numbers &&
              !!this.claim.cords) {
              Axios.post(`http://skarga.gopua.loc/claim/create`, this.claim,{ 
                        headers: { 
                        'Content-Type': 'multipart/form-data' 
                        } 
                    } )
            .then(({
              data: {
                token
              }
            }) => {
              // if (redirect) router.push(redirect)
            }).catch(({
              response: {`введите сюда код
                data
              }
            }) => {
              this.snackbar = true
              this.message = data.message
            })
        } else {
          this.snackbar = true
          this.message = 'Заполните все поля'
        }
      },

код сервера

 public static function create()
{
    // required headers
//        header("Access-Control-Allow-Origin", "*");
//        header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE");
//        header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
//        header("Access-Control-Allow-Origin: http://localhost:8080");
//        header("Content-Type: multipart/form-data");
    header("Content-Type: application/json; charset=UTF-8");
    header("Access-Control-Allow-Methods: POST");
    header("Access-Control-Max-Age: 3600");
    header("Access-Control-Allow-Headers: Origin, Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    // get posted data
    $data = json_decode(file_get_contents("php://input"));
    $claim = new ClaimModel();
    // set product property values
    $claim->fio= $data->fio;
    $claim->registration = $data->place;
    $claim->number = $data->phone;
    $claim->email = $data->email;
    $claim->numbers = $data->numbers;
    $claim->created = date('Y-m-d H:i:s');
    $claim->data = $data->upFiles;
    // create the product
    if ($claim->create()) {
        // set response code - 201 created
        http_response_code(201);
        // tell the user
        echo json_encode(array("message" => "Product was created."));
    } // if unable to create the product, tell the user
    else {
        // set response code - 503 service unavailable
        http_response_code(503);
        // tell the user
        echo json_encode(array("message" => "Unable to create product."));
    }
} 

суть в том, что такую ошибку мне выдает vuejs Failed to load http://skarga.gopua.loc/claim/create: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

Гуглил, не смог найти ответ. Знакомых знатаков php нет по этому пишу сюда.

Answer 1

Данная ошибка возникает, когда ваше spa делает запрос на сторонний сервер. Тут есть несколько вариантов.

  1. Если файл ваш и находится на вашем сайте то просто изменить линк на относительную ссылку к примеру /claim/create

  2. Если файл не ваш и вы обращаетесь к стороннему api, нужно чтобы ваше spa обращалось к вашему серверу к php файлу, который выполнит запрос и вернет данные.

  3. Если проблема только на локальной машине и нужно устранить временно, то установите для хрома расширение которое позволит выполнить с локальной машины запросы на сторонние серверы. Хочу предупредить что при включении данного расширения перестают нормально работать youtube tweeter fb и другие сайты, поэтому не стоит держать постоянно его включенным, точнее нужно включать только по надобности.

Answer 2

Проблема оказалась не в коде. Локально как починить не знал, а на своем серве смог. Строка add_header помогла ]1

Позже я и локально починил эту проблему добавив эти строки в свой .htaccess файл

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "*"
READ ALSO
Подсветка неправильного синтаксиса в notepadd++ при редактировании php

Подсветка неправильного синтаксиса в notepadd++ при редактировании php

Работаю в notepad++Он не подсказывает мне ошибки в моем коде так, как это делает к примеру php sandbox

99
Как вывести url изображения из sqlite базы?

Как вывести url изображения из sqlite базы?

Получаю данные о товаре из базы sqlite с помощью следующего кода:

121
Как хранить историю наличия и приходов/расходов в mysql?

Как хранить историю наличия и приходов/расходов в mysql?

Нужно организовать создание и хранение данных на сайте php+mysql: - актуальное наличие, которое можно менять вручную (модель, размер, цвет, количество)...

148
Формирование PDF (DomPDF) с помощью ajax

Формирование PDF (DomPDF) с помощью ajax

В чем проблема при формирования PDF-файла? Запрос отправляется с помощью AJAX

133