Я пытаюсь сделать междоменный HTTP-запрос к службе WCF (которая принадлежит мне). Я прочитал несколько методов работы с ограничениями междоменного сценария. Поскольку моя служба должна обрабатывать запросы GET и POST, я не могу реализовать какой-либо тег динамического сценария, src которого является URL-адресом запроса GET. Поскольку я могу вносить изменения на сервере, я начал пытаться реализовать обходной путь, который включает в себя настройку ответов сервера для включения заголовка «Access-Control-Allow-Origin» и запросов предварительной проверки с запросом OPTIONS. Я получил идею из этого сообщения: Как заставить работать CORS
На стороне сервера мой веб-метод добавляет в HTTP-ответ «Access-Control-Allow-Origin: *». Я вижу, что ответы теперь включают этот заголовок. Мой вопрос: как выполнить предварительную проверку запроса (ВАРИАНТЫ)? Я использую jQuery.getJSON для выполнения запроса GET, но браузер сразу же отменяет запрос с печально известной:
Источник http: // localhost не разрешен Access-Control-Allow-Origin
Кто-нибудь знаком с этой техникой CORS? Какие изменения необходимо внести в клиенте для предварительной обработки моего запроса?
Благодарность!
источник
Access-Control-Allow-Origin: *
//cors and preflight filtering app.all('*', function(req, res, next){.. //preflight needs to return exact request-header res.set('Access-Control-Allow-Headers', req.headers['access-control-request-headers']); if ('OPTIONS' == req.method) return res.send(204);next(); });
Хотя эта цепочка восходит к 2014 году, проблема может быть актуальной для многих из нас. Вот как я справился с этим в контексте jQuery 1.12 / PHP 5.6:
Пример кода PHP:
if (!empty($_SERVER['HTTP_ORIGIN'])) { // Uh oh, this XHR comes from outer space... // Use this opportunity to filter out referers that shouldn't be allowed to see this request if (!preg_match('@\.partner\.domain\.net$@')) die("End of the road if you're not my business partner."); // otherwise oblige header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']); } else { // local request, no need to send a specific header for CORS }
В частности, не добавляйте,
exit;
поскольку предварительная проверка не требуется.источник