Intereting Posts
'AND' vs '&&' как оператор PHP: доступ к Bluetooth GPS через последовательный порт (SPP) COM3 Как обнаружить входящий запрос (с помощью скрипта PHP) из поддомена CNAME? Отправка значения Button в контроллер, но не для публикации значения Печатать файлы, которые не доступны из www-root? Как получить значение специальных атрибутов / пользовательских атрибутов HTML с помощью PHP DOM Parser? Как получить значение checkbox в проверенном порядке в php Изменение информации заголовка http для скрытия информации сервера Сеансы Codeigniter по субдоменам Получить все дочерние, внуки и т. Д. Узлы под родителями, используя php с результатами запроса mysql Можно ли сохранить знаки плюса в PHP $ _GET без кодирования? PHP – конвертировать миллисекунды в часы: минуты: секунды. Попытка «вызвать» хранимые процедуры с помощью CodeIgniter Вызов неопределенной функции mcrypt_decrypt () – даже если установлен php5-mcrypt Конкатенация файлов RTF в PHP (REGEX)

CORS с заголовками php

У меня есть простой скрипт PHP, который я пытаюсь выполнить междоменный запрос CORS:

<?php header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Headers: *"); ... 

Но я все еще получаю ошибку:

Поле заголовка запроса X-Requested-With не разрешено в Access-Control-Allow-Headers

Что-нибудь мне не хватает?

    Access-Control-Allow-Headers не разрешает * как принятое значение, см. Здесь документацию Mozilla.

    Вместо звездочки вы должны отправить принятые заголовки (сначала X-Requested-With как говорит ошибка).

    Обращение с запросами CORS должным образом является более привлекательным. Вот функция, которая будет реагировать более полно (и правильно).

     /** * An example CORS-compliant method. It will allow any GET, POST, or OPTIONS requests from any * origin. * * In a production environment, you probably want to be more restrictive, but this gives you * the general idea of what is involved. For the nitty-gritty low-down, read: * * - https://developer.mozilla.org/en/HTTP_access_control * - http://www.w3.org/TR/cors/ * */ function cors() { // Allow from any origin if (isset($_SERVER['HTTP_ORIGIN'])) { // Decide if the origin in $_SERVER['HTTP_ORIGIN'] is one // you want to allow, and if so: header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) // may also be using PUT, PATCH, HEAD etc header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } echo "You have CORS!"; } 

    Я получил ту же ошибку и исправил ее со следующим PHP в моем внутреннем скрипте:

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

    header («Access-Control-Allow-Methods: GET, POST»);

    header («Access-Control-Allow-Headers: X-Requested-With»);

    Мне просто удалось получить dropzone и другой плагин для работы с этим исправлением (angularjs + php backend)

      header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Credentials: true"); header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token , Authorization'); 

    добавьте это в свой файл upload.php или куда вы отправите свой запрос (например, если у вас есть upload.html, и вам нужно прикрепить файлы к upload.php, а затем скопируйте и вставьте эти 4 строки). Кроме того, если вы используете плагины / дополнения CORS в chrome / mozilla, обязательно переключите их более одного раза, чтобы включить CORS

    Многие описания в Интернете не говорят о том, что указать Access-Control-Allow-Origin недостаточно. Вот полный пример, который работает для меня:

     <?php if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS'); header('Access-Control-Allow-Headers: token, Content-Type'); header('Access-Control-Max-Age: 1728000'); header('Content-Length: 0'); header('Content-Type: text/plain'); die(); } header('Access-Control-Allow-Origin: *'); header('Content-Type: application/json'); $ret = [ 'result' => 'OK', ]; print json_encode($ret); 

    Если вы хотите создать службу CORS из PHP, вы можете использовать этот код в качестве первого шага в вашем файле, который обрабатывает запросы:

     // Allow from any origin if(isset($_SERVER["HTTP_ORIGIN"])) { // You can decide if the origin in $_SERVER['HTTP_ORIGIN'] is something you want to allow, or as we do here, just allow all header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); } else { //No HTTP_ORIGIN set, so we allow any. You can disallow if needed here header("Access-Control-Allow-Origin: *"); } header("Access-Control-Allow-Credentials: true"); header("Access-Control-Max-Age: 600"); // cache for 10 minutes if($_SERVER["REQUEST_METHOD"] == "OPTIONS") { if (isset($_SERVER["HTTP_ACCESS_CONTROL_REQUEST_METHOD"])) header("Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT"); //Make sure you remove those you do not want to support if (isset($_SERVER["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); //Just exit with 200 OK with the above headers for OPTIONS method exit(0); } //From here, handle the request as it is ok 

    CORS может стать головной болью, если мы не будем правильно понимать ее функционирование. Я использую их в PHP, и они работают без проблем. ссылка здесь

     header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Credentials: true"); header("Access-Control-Max-Age: 1000"); header("Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding"); header("Access-Control-Allow-Methods: PUT, POST, GET, OPTIONS, DELETE"); 

    Этот код работает для меня при использовании углового 4 в качестве клиентской стороны и PHP в качестве серверной части.

    header («Access-Control-Allow-Origin: *»);