Php 缺少令牌‘;访问控制允许原点’;在CORS标题中‘;访问控制允许标头’;来自CORS飞行前频道-react js

Php 缺少令牌‘;访问控制允许原点’;在CORS标题中‘;访问控制允许标头’;来自CORS飞行前频道-react js,php,reactjs,codeigniter,Php,Reactjs,Codeigniter,我的reactjs应用程序使用api 我的api是用php语言和CodeIgniter框架编写的 这是我的api: `<?php defined('BASEPATH') OR exit('No direct script access allowed'); require APPPATH . '/libraries/REST_Controller.php'; class Api extends REST_Controller { public function __constr

我的reactjs应用程序使用api

我的api是用php语言和CodeIgniter框架编写的

这是我的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");

    }
我在子域上上载了我的站点:

test.shadyab.com
我的api写在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
AddType应用程序/x-httpd-php56 php56 php
上的php_标志日志_错误
php_标志显示上的错误
#php_值错误_报告8
php_值错误_报告E_所有
php_值错误_log/home/shadyabc/public_html/error_log2
重新启动发动机
RewriteCond%{HTTP_HOST}^shadyab.com$[NC]
重写规则^(.*)$http://www.shadyab.com/$1[R=301,L]
1美元^(索引\.php | resources | robots\.txt)
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php/$1[L,QSA]
RewriteCond%{REQUEST_METHOD}选项RewriteRule^(.*)$$1[R=200,L]
命令允许,拒绝
通融
RewriteCond%{HTTP_HOST}^shadyab\.ir$[或]
重写cond%{HTTP_HOST}^www\.shadyab\.ir$
重写规则^/?$“http\:\/\/www\.shadyab\.com”[R=301,L]
命令允许,拒绝
通融
从72.52.124.58开始拒绝
谁能帮帮我吗

Access Control Allow Origin
不是默认情况下允许在跨源Ajax请求中发送的头

您需要从服务器获得显式权限才能发送它

这就是错误消息告诉您的

但是:
Access Control Allow Origin
是一个响应标题。在第一种情况下,它在您的请求中没有位置

从客户端代码中删除它

Access Control Allow Origin
不是默认情况下允许在跨源Ajax请求中发送的头

您需要从服务器获得显式权限才能发送它

这就是错误消息告诉您的

但是:
Access Control Allow Origin
是一个响应标题。在第一种情况下,它在您的请求中没有位置


将其从客户端代码中删除。

要允许CORS请求,api代码已经设置了访问控制允许原始标头

您不应该在ajax调用中发送Access Control Allow Origin头。它是一个响应头

此外,在您的api代码中,我建议将您的域列为白名单,而不是允许所有域像这样访问它:

header('Access-Control-Allow-Origin': '*.shadyab.com');
react代码中需要更改的内容很少:

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的更多信息,请参阅

要允许CORS请求,api代码已经设置了访问控制允许原始标头

您不应该在ajax调用中发送Access Control Allow Origin头。它是一个响应头

此外,在您的api代码中,我建议将您的域列为白名单,而不是允许所有域像这样访问它:

header('Access-Control-Allow-Origin': '*.shadyab.com');
react代码中需要更改的内容很少:

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的更多信息,请参阅。您可以使用.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"

您可以使用.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"

这与反应无关。您需要在服务器
JSON中启用CORS(跨源资源共享)。stringify(formData)
将为您提供JSON。您声称您正在发送
“内容类型”:“多部分/表单数据”
。不要撒谎。JSON的内容类型是
application/JSON
@MartinReiche-他们在服务器上启用了CORS。这与react无关。您需要在服务器
JSON中启用CORS(跨源资源共享)。stringify(formData)
将为您提供JSON。您声称您正在发送
“内容类型”:“多部分/表单数据”
。不要撒谎。JSON的内容类型是
application/JSON
@MartinReiche-他们已经在服务器上启用了CORS。虽然他们可以这样做,(a)它不会解决问题,(b)他们已经在PHP中这样做了,但他们可以这样做(a)它不会解决问题,(b)他们已经在PHP中这样做了,他们也会在本地上工作。否则,它必须上传到实时服务器。?也将在本地工作。否则必须将其上载到live server。?