固件错误: Access-Control-Allow-Origin

标签 fiware fiware-orion

我正在调用 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.

从 postman 或干舷我没有得到任何这些。

  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': '*'

但是还是不行

编辑:

ps 斧头 | 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,我已通过以下方式从 header 中消除了它:

   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的问题,因为我用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

最佳答案

CORS 请求仅受 Orion Context Broker 版本 1.10 及更高版本支持。

正如 @JoseManuelCantera 所指出的,您不需要在请求中添加任何 CORS 特定 header ,这些 header 由您的客户端(浏览器、Postman 等)处理

您需要:

  1. 将您的版本升级到 1.10
  2. 以 CORS 模式启动 Orion

您可以在任何来源的 CORS 模式下启动 Orion(Orion 将接受来自任何来源的 CORS 请求),如下所示:

contextBroker -corsOrigin __ALL

请查看 CORS documentation for Orion了解更多信息。

更新

请允许我简单解释一下 CORS 飞行前逻辑。如果您的请求不是simple request ,您的浏览器将执行 pre-flight request在你的 OPTIONS 方法之前。如果 Orion 未在 CORS 模式下启动,您将始终收到方法不允许作为对您的非简单请求的响应。

那么问题是什么,为什么不同的客户会得到不同的结果? Postman(curl 等)完全按照您希望的方式执行,并按照您的配置发送请求。它不会检查您发送的请求是否应该进行预检。

另一方面,您的浏览器会检查您的请求,并在必要时进行预检。除了修改您的请求之外,您对此无法控制

您正在使用的 Javascript 框架可能会向请求添加 header ,使其成为“非简单”请求。例如:X-Requested-With。请参阅this问题。

我的建议是查看浏览器发送的请求的详细信息( header 、方法等),看看是什么使它成为一个不简单的请求。然后对您的 js 代码进行必要的更改,以确保您的请求属于简单请求的范围。

话虽如此,您最终需要升级您的 Orion 版本,因为例如,通过浏览器发送时,DELETE 请求永远不会被视为简单请求。

关于固件错误: Access-Control-Allow-Origin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48523162/

相关文章:

fiware - 订阅 CB 有效但不可见

video-streaming - 如何在 kurento 媒体服务器中进行 rtmp 流式传输?

javascript - 在 Wirecloud 中使用 jQuery 给出 "Uncaught ReferenceError: jQuery is not defined"

docker - FIWARE Orion订阅创建失败

iot - 如何使用蓝牙设备和FIWARE IoT Agent

fiware - 在固件 MQTT JSON IoT 代理中禁用设备自动配置

audio - 将在RedHat中运行的Orion Context Broker连接到Raspberry Pi

fiware - 使用 dockerized fiware-orion 似乎无法进行订阅

fiware - 如何删除属于我不记得的服务路径的实体?

Fiware-Orion:订阅所有实体