Ответ на запрос предполетной проверки не проходит проверку контроля доступа: Нет «Access-Control-Allow-Origin [duplicate]

Чтобы скрыть эти подсказки, вы можете просто добавить "editor.parameterHints": false к своему settings.json. Найден ответ здесь .

260
задан Samuel Liew 10 May 2017 в 03:06
поделиться

19 ответов

Вы сталкиваетесь с проблемами CORS.

Есть несколько способов исправить это.

  1. Отключить CORS. Например: как отключить cors в chrome
  2. Использовать плагин для вашего браузера
  3. Использовать прокси-сервер, такой как nginx , пример настройки

Более того, вы пытаетесь получить доступ к api.serverurl.com из localhost. Это точное определение запроса на перекрестный домен.

. Отвернув его, просто для того, чтобы выполнить вашу работу (хорошо, приложите плохую защиту для вас, если вы посетите другие сайты и просто удалите банку по дороге) вы можете использовать прокси-сервер, который заставляет ваш браузер думать, что все запросы поступают с локального хоста, когда у вас есть локальный сервер, который затем вызывает удаленный сервер.

, поэтому api.serverurl.com может стать localhost: 8000 / api, и ваш локальный nginx или другой прокси отправит правильное место назначения.


Теперь, пользуясь популярностью, [ На 100% больше информации о CORS .... тот же отличный вкус!


И для downvoters .... в обход CORS это именно то, что показано для тех, кто просто изучает фронт конец. https://codecraft.tv/courses/angular/http/http-with-promises/

132
ответ дан E. Maggini 18 August 2018 в 07:42
поделиться
  • 1
    опустил очевидную реализацию CORS правильно – charlietfl 23 February 2016 в 22:46
  • 2
    Легко понизить голос. Менее легко взять на себя риск, мой друг. И все это работает именно в среде разработчиков. – E. Maggini 23 February 2016 в 22:49
  • 3
    Это действительно сработало. Я добавил флаг, чтобы отключить защиту Web. Для развития это хорошо. – Andre Mendes 24 February 2016 в 01:10
  • 4
    @charlietfl Как? – GreenAsJade 11 October 2016 в 08:51
  • 5
    как правильно настроить его – Xvegas 2 July 2018 в 22:38

В AspNetCore web api эта проблема исправлена ​​добавлением «Microsoft.AspNetCore.Cors» (версия 1.1.1) и добавлением ниже изменений в Startup.cs.

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddCors(options =>
    {
          options.AddPolicy("AllowAllHeaders",
                builder =>
            {
                    builder.AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod();
                });
    });
    .
    .
    .
}

и

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{


    // Shows UseCors with named policy.
    app.UseCors("AllowAllHeaders");
    .
    .
    .
}

и поместив [EnableCors("AllowAllHeaders")] на контроллер.

28
ответ дан ArieKanarie 18 August 2018 в 07:42
поделиться
  • 1
    Это прекрасный ответ, если вы хотите использовать уязвимости межсайтового скриптинга! Пожалуйста, никогда не делай этого! Укажите домены, к которым вы можете получить доступ, чтобы избежать проблем с безопасностью. CORS существует не просто так. – paqogomez 20 June 2017 в 21:29
  • 2
    – Francisco Tena 8 October 2018 в 10:10

В PHP вы можете добавить заголовки:

<?php
header ("Access-Control-Allow-Origin: *");
header ("Access-Control-Expose-Headers: Content-Length, X-JSON");
header ("Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS");
header ("Access-Control-Allow-Headers: *");
...
1
ответ дан atiruz 18 August 2018 в 07:42
поделиться

Если вы пишете chrome-extension

, вы должны добавить manifest.json разрешения для своего домена (ов).

"permissions": [
   "http://example.com/*",
   "https://example.com/*"
]
6
ответ дан freedev 18 August 2018 в 07:42
поделиться

В моем конфигурационном файле Apache VirtualHost я добавил следующие строки:

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
1
ответ дан hugsbrugs 18 August 2018 в 07:42
поделиться
  • 1
    Я не думаю, что это могло бы работать с этой строкой: Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization,$ – Pere 3 April 2017 в 10:27
  • 2
    Ага ! скопировать вставку короткую линию! исправленный ! – hugsbrugs 3 April 2017 в 13:54

Мой «API-сервер» - это приложение PHP, поэтому для решения этой проблемы я нашел, что работающее ниже решение работает:

Поместите строки в index.php

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
106
ответ дан hutchonoid 18 August 2018 в 07:42
поделиться
  • 1
    Я согласен, это лучше, чем принятый ответ, хотя будьте осторожны при копировании этих строк, не забудьте изменить методы и происхождение. – Amir Savand 15 April 2018 в 10:39
  • 2
    Где вы это положили? На конечной точке root? – CodyBugstein 8 June 2018 в 15:25
  • 3
    Куда поместить его в проект Angular 6? – whatthefish 7 July 2018 в 13:09
  • 4
    @CodyBugstein и whatthefish поставили перед любым выходом – Garet Claborn 30 July 2018 в 23:10

JavaScript XMLHttpRequest и Fetch следуют политике одного и того же происхождения. Таким образом, веб-приложение, использующее XMLHttpRequest или Fetch, могло только делать HTTP-запросы в своем собственном домене.

Источник: https://developer.mozilla.org/en-US/docs / Web / HTTP / Access_control_CORS

Вы должны отправить HTTP-заголовок Access-Control-Allow-Origin: * со своей стороны.

Если вы используете Apache как ваш HTTP-сервер, вы можете добавить его в свой конфигурационный файл Apache следующим образом:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Mod_headers включен по умолчанию в Apache, однако вы можете убедиться, что он включен при запуске:

 a2enmod headers
14
ответ дан JedatKinports 18 August 2018 в 07:42
поделиться
  • 1
    Где я могу найти свой конфигурационный файл Apache? – Shubham Arya 31 May 2018 в 07:42
  • 2
    @ShubhamArya на linux Debian по умолчанию: /etc/apache2/apache2.conf – JedatKinports 31 May 2018 в 11:09
  • 3
    где я могу найти его в окнах? – Shubham Arya 2 June 2018 в 08:08

Я столкнулся с этой проблемой, когда DNS-сервер был установлен в 8.8.8.8 (google). На самом деле проблема была в маршрутизаторе, мое приложение пыталось подключиться к серверу через Google, а не локально (для моего конкретного случая). Я удалил 8.8.8.8, и это решило проблему. Я знаю, что эти проблемы решаются с помощью настроек CORS, но, возможно, у кого-то будет такая же проблема, как у меня

0
ответ дан Kirill Gusyatin 18 August 2018 в 07:42
поделиться

Отдельные дистрибутивы GeoServer включают сервер приложений Jetty. Включить совместное использование ресурсов (CORS), чтобы позволить приложениям JavaScript за пределами вашего собственного домена использовать GeoServer.

Раскомментировать следующие <filter> и <filter-mapping> из webapps / geoserver / WEB-INF / web. xml:

<web-app>
  <filter>
      <filter-name>cross-origin</filter-name>
      <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>cross-origin</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
1
ответ дан Mr Lister 18 August 2018 в 07:42
поделиться
  • 1
    Это не добавило ответа на заголовок ответа, поэтому он не сработал – JollyRoger 22 April 2018 в 04:14
  • 2
    не используя GeoServer, но этот клип помог мне узнать настройки, которые я должен использовать в приложении, получающем вызов. – Matt Felzani 28 April 2018 в 04:53

Отключить chrome security.Create chrome shortcut right click -> properties -> target, вставить этот «C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user-данных DIR = "C: / chromedev"

-5
ответ дан Nithin 18 August 2018 в 07:42
поделиться

Я думаю, что отключение CORS от Chrome не является хорошим способом, потому что если вы используете его в ионном режиме, то в Mobile Build проблема снова будет повышаться.

Так лучше исправить в вашем бэкэнд.

Прежде всего, в заголовке заголовка необходимо установить -

  • заголовок («Access-Control-Allow-Origin: *»);
  • header ( 'Header set Access-Control-Allow-Headers: «Origin, X-Requested-With, Content-Type, Accept»');

И если API ведет себя как GET и POST как тогда также установите в свой заголовок -

, если ($ _SERVER ['REQUEST_METHOD'] == 'OPTIONS') {if (isset ($ _ SERVER ['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header ("Доступ -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'}}"); Выход (0); }

1
ответ дан Shubham Pandey 18 August 2018 в 07:42
поделиться

Если вы случайно используете сервер IIS. вы можете установить ниже заголовков в опции заголовков HTTP-запросов.

Access-Control-Allow-Origin:*
Access-Control-Allow-Methods: 'HEAD, GET, POST, PUT, PATCH, DELETE'
Access-Control-Allow-Headers: 'Origin, Content-Type, X-Auth-Token';

с этим всем сообщением, get и т. д. будет работать нормально.

4
ответ дан Sunil Kumar 18 August 2018 в 07:42
поделиться

Для сервера флагов python вы можете использовать плагин flask-cors для разрешения запросов на междоменные запросы.

См. https://flask-cors.readthedocs.io/en/latest/

4
ответ дан Teriblus 18 August 2018 в 07:42
поделиться

Что-то, что очень легко пропустить ...

В проводнике решений, щелкните правой кнопкой мыши api-project. В окне свойств установите «Анонимная аутентификация» на «Включено».

0
ответ дан Wes 18 August 2018 в 07:42
поделиться

Для тех, кто использует Lambda Integrated Proxy с API Gateway . Вам необходимо настроить свою лямбда-функцию, как если бы вы отправляли свои запросы непосредственно, то есть функция должна правильно настроить заголовки ответов. (Если вы используете пользовательские лямбда-функции, это будет обрабатываться шлюзом API.)

//In your lambda's index.handler():
exports.handler = (event, context, callback) => {
     //on success:
     callback(null, {
           statusCode: 200,
           headers: {
                "Access-Control-Allow-Origin" : "*"
           }
     }
}
2
ответ дан Xu Chen 18 August 2018 в 07:42
поделиться
  • 1
    Я хочу также перезвонить и упомянуть одну большую игру, которую я не считаю документами AWS. Предположим, вы используете шлюз API для проксирования вашей лямбда-функции, и вы используете какой-либо API в этой лямбда-функции. Если этот API возвращает код успеха успеха не-200, и вы не добавили код успеха не 200 в ответ метода в шлюзе API, тогда вы получите сообщение об ошибке и не увидите ваш успешный ответ . Примеры для этого: Sendgrid и Twilio имеют коды успеха, отличные от 200. – Stephen Tetreault 1 August 2018 в 20:29
1
ответ дан Christian Nwafor 30 October 2018 в 02:22
поделиться
0
ответ дан davyCode 30 October 2018 в 02:22
поделиться
0
ответ дан rohit parte 30 October 2018 в 02:22
поделиться
1
ответ дан Sasa Blagojevic 30 October 2018 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: