отсутствует токен «access-control-allow-origin» в заголовке CORS «Access-Control-Allow-Headers» из канала предварительной проверки CORS - реагирует js - PullRequest
0 голосов
/ 26 апреля 2018

Мое приложениеactjs работает с API.

Мой API написан на языке php и в среде CodeIgniter.

https://github.com/chriskacerguis/codeigniter-restserver

это мой API:

`<?php
defined('BASEPATH') OR exit('No direct script access allowed');
require APPPATH . '/libraries/REST_Controller.php';
 class Api extends REST_Controller {
    public function __construct($config = 'rest')
    {

        parent::__construct($config);

        $this->load->model('m_user');
        $this->load->model('m_cart');

        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");

    }

это мой код реагирования:

function getAll(city) {

    const formData = {};
    formData['city'] = city;


    const requestOptions = {
        method: 'POST',
        headers: { 'Content-Type': 'multipart/form-data',
                   'Access-Control-Allow-Origin': '*'},
        body: JSON.stringify(formData)
    };


    return fetch(BASE_URL+serverConstants.COUPONS_POST_REQUEST, requestOptions)
        .then(response => {
          console.log("======");
          console.log(response);
            if (!response.ok) {
                return Promise.reject(response.statusText);
            }

            return response.json();
        })

Я загрузил свой сайт на поддомен:

test.shadyab.com

my api write на домене shadyab.com.

Вот мой файл htaccess:

AddType application/x-httpd-php56 php56 php

php_flag  log_errors on
php_flag  display_errors on
#php_value error_reporting 8
php_value error_reporting E_ALL
php_value error_log  /home/shadyabc/public_html/error_log2

<IfModule mod_rewrite.c>

RewriteEngine on
RewriteCond %{HTTP_HOST} ^shadyab.com$ [NC]
RewriteRule ^(.*)$ http://www.shadyab.com/$1 [R=301,L]

RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]



</IfModule>

order allow,deny
allow from all

RewriteCond %{HTTP_HOST} ^shadyab\.ir$ [OR]
RewriteCond %{HTTP_HOST} ^www\.shadyab\.ir$
RewriteRule ^/?$ "http\:\/\/www\.shadyab\.com" [R=301,L]


<Files 403.shtml>
order allow,deny
allow from all
</Files>

deny from 72.52.124.58

Может кто-нибудь, пожалуйста, помогите мне

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Чтобы разрешить запросы CORS, заголовок Access-Control-Allow-Origin уже задан вашим кодом API.

Вы не должны отправлять заголовок Access-Control-Allow-Origin в вашем вызове ajax. Это заголовок ответа

Кроме того, в вашем коде API я бы рекомендовал занести в белый список ваш домен, а не разрешать доступ ко всем доменам следующим образом:

header('Access-Control-Allow-Origin': '*.shadyab.com');

В вашем коде реакции есть несколько вещей, которые необходимо изменить:

function getAll(city) {
// Create a new FormData object and append the data to it
const formData = new FormData();
formData.append('city', city);

const requestOptions = {
    method: 'POST',
    // If your using FormData, it automatically sets the content-type 
    // as multipart/form-data. So, you do not need to send the header.
    body: formData
};
// rest of your code
}

Для получения дополнительной информации о том, как использовать FormData, обратитесь к this

0 голосов
/ 26 апреля 2018

Вы можете использовать файл .htaccess для установки правила междоменного происхождения. Смотрите ниже код

# Cross domain access
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
0 голосов
/ 26 апреля 2018
headers: { 'Content-Type': 'multipart/form-data',
              'Access-Control-Allow-Origin': '*'},

Access-Control-Allow-Origin - это не заголовок, который вам разрешено отправлять в Ajax-запросе с несколькими источниками по умолчанию.

Чтобы отправить его, вам необходимо получить явное разрешение от сервера.

Вот что говорит вам сообщение об ошибке.

Однако: Access-Control-Allow-Origin - это заголовок response . Ему не место в вашем запросе в первом случае.

Удалите его из кода на стороне клиента.

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