Ошибка микропрограммы: Access-Control-Allow-Origin

Я звоню в contextBroker, и он дает мне эту ошибку.

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 405.

От почтальона или от надводного борта я ничего этого не получаю.

  getContextBroker(){
    console.log("Consumimos el servicio getContextBroker");
    let headers = new Headers ({'Accept': 'application/json', 'Fiware-Service': 'x', 'Fiware-ServicePath': '/x', 'Access-Control-Allow-Origin': '*'});
    let options = new RequestOptions ({headers : headers});
    return this._http.get(this.urlcontextBrokers, {headers : headers}).map(res => res.json());
  }

}

как я могу решить это?

Я попытался добавить: 'Access-Control-Allow-Origin': '*'

Но это все равно не работает

РЕДАКТИРОВАТЬ:

пс топор | grep contextBroker:

 862 pts/4    S+     0:00 grep contextBroker
 3792 ?        Ssl   27:35 /usr/bin/contextBroker -port 1026 -logDir /var/log/contextBroker -pidpath /var/run/contextBroker/contextBroker.pid -dbhost localhost -db orion -multiservice -logAppend

версия:

{
    "orion": {
        "version": "1.7.0",
        "uptime": "12 d, 18 h, 24 m, 20 s",
        "git_hash": "e544780eb64a4a2557c1f51dde070b8d82b86c49",
        "compile_time": "Wed Feb 8 13:30:24 CET 2017",
        "compiled_by": "fermin",
        "compiled_in": "centollo"
    }
}

EDIT02

Здравствуйте, как я уже сказал, я не хочу использовать Cors, я удалил это из заголовка таким образом:

   getContextBroker () {
     console.log ("We consume the getContextBroker service");
     let headers = new Headers ({'Accept': 'application / json', 'Fiware-Service': 'IoFAlmeria', 'Fiware-ServicePath': '/ ARMpalmerillas'});
     let options = new RequestOptions ({headers: headers});
     return this._http.get (this.urlcontextBrokers, {headers: headers}). map (res => res.json ());
   }

}

и я продолжаю давать ту же ошибку:

OPTIONS http: // XXX: 1026 / v2 / entities / 405 (Method Not Allowed)
Failed to load http: // XXX: 1026 / v2 / entities /: Response to preflight request does not pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http: // localhost: 4200' is therefore not allowed access. The response had HTTP status code 405.

это должно быть проблемой API fiware, так как я разработал его с помощью nodejs, и у меня нет проблем с изменением URL

Обновить:

Limpiando repositorios:base epel extras fiware mongodb-org-3.2
                     : mysql-connectors-community mysql-tools-community
                     : mysql57-community nodesource updates
Limpiando todo
Cleaning up list of fastest mirrors
[root@UAL-IoF2020 ~]# yum install contextBroker
Complementos cargados:fastestmirror, refresh-packagekit, security
Configurando el proceso de instalación
Determining fastest mirrors
epel/metalink                                            |  25 kB     00:00     
 * base: ftp.uma.es
 * epel: ftp.uma.es
 * extras: ftp.uma.es
 * updates: ftp.uma.es
base                                                     | 3.7 kB     00:00     
base/primary_db                                          | 4.7 MB     00:00     
epel                                                     | 4.7 kB     00:00     
epel/primary_db                                          | 6.0 MB     00:00     
extras                                                   | 3.4 kB     00:00     
extras/primary_db                                        |  29 kB     00:00     
fiware                                                   |  951 B     00:00     
fiware/primary                                           |  45 kB     00:00     
mongodb-org-3.2                                          | 2.5 kB     00:00     
mongodb-org-3.2/primary_db                               |  78 kB     00:00     
mysql-connectors-community                               | 2.5 kB     00:00     
mysql-connectors-community/primary_db                    |  18 kB     00:00     
mysql-tools-community                                    | 2.5 kB     00:00     
mysql-tools-community/primary_db                         |  38 kB     00:00     
mysql57-community                                        | 2.5 kB     00:00     
mysql57-community/primary_db                             | 139 kB     00:00     
nodesource                                               | 2.5 kB     00:00     
nodesource/primary_db                                    |  51 kB     00:00     
updates                                                  | 3.4 kB     00:00     
updates/primary_db                                       | 6.4 MB     00:00     
El paquete contextBroker-1.7.0-1.x86_64 ya se encuentra instalado con su versión más reciente
Nada para hacer

2 ответа

Решение

CORS-запросы поддерживаются только Orion Context Broker версии 1.10 и выше.

Как отметил @JoseManuelCantera, вам не нужно добавлять какие-либо специальные заголовки CORS к вашему запросу, они обрабатываются вашим клиентом (браузером, почтальоном и т. Д.)

Вам нужно:

  1. Обновите свою версию до 1.10
  2. Запустите Orion в режиме CORS

Вы можете запустить Orion в режиме CORS для любого источника (Orion будет принимать запросы CORS из любого источника), как показано ниже:

contextBroker -corsOrigin __ALL

Пожалуйста, ознакомьтесь с документацией CORS для Orion для получения дополнительной информации.

ОБНОВИТЬ

Пожалуйста, позвольте мне кратко объяснить логику предполетной подготовки CORS. Если ваш запрос не является простым запросом, ваш браузер выполнит запрос перед полетом перед вашим запросом с помощью метода OPTIONS. Если Orion не запущен в режиме CORS, вы всегда получите метод, запрещенный как ответ на ваши непростые запросы.

Так в чем же проблема, почему вы получаете разные результаты с разными клиентами? Почтальон (curl и т. Д.) Делает именно то, что вы хотите, и отправляет запросы, как вы настроили. Он не проверяет, должен ли отправляемый вами запрос предварительно проверяться или нет.

С другой стороны, ваш браузер проверяет ваш запрос и при необходимости выполняет предполётный полет. Вы не можете контролировать это, кроме как изменить ваш запрос.

Фреймворк Javascript, с которым вы работаете, возможно, добавляет заголовок к запросу, делая его "непростым" запросом. Например: X-Requested-With, Пожалуйста, посмотрите этот вопрос.

Мое предложение состоит в том, чтобы взглянуть на детали запроса, который отправляет ваш браузер (заголовки, методы и т. Д.), И посмотреть, что делает этот запрос непростым. Затем внесите необходимые изменения в свой js-код, чтобы убедиться, что ваш запрос попадает в область простых запросов.

Тем не менее, вам в конечном итоге потребуется обновить версию Orion, поскольку, например, запрос DELETE никогда не будет рассматриваться как простой запрос при отправке через браузер.

Я думаю, что вам нужно обновить до версии 1.10, чтобы вы могли использовать CORS.

Вам не нужно добавлять какие-либо заголовки;) и фактически заголовок Access-Control-Allow-Origing отправляется в ответе сервера, а не по запросу клиента

Другие вопросы по тегам