Fiware error: Access-Control-Allow-Origin
Fiware error: 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.
无论是从邮递员还是从 freeboard 我都没有得到这些。
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
我认为您需要升级到 1.10 版才能使用 CORS。
您不需要添加任何 header ;) 实际上 Access-Control-Allow-Origing header 是在服务器响应中发送的,而不是由客户端请求发送的
CORS 请求仅受 Orion Context Broker 1.10 及更高版本支持。
正如@JoseManuelCantera 指出的那样,您不需要在请求中添加任何特定于 CORS 的 header,这些由您的客户端(浏览器、Postman 等)处理
您需要:
- 将您的版本升级到 1.10
- 以 CORS 模式启动 Orion
您可以在任何来源的 CORS 模式下启动 Orion(Orion 将接受来自任何来源的 CORS 请求),如下所示:
contextBroker -corsOrigin __ALL
请查看 CORS documentation for Orion 了解更多信息。
更新
请允许我简要解释一下 CORS pre-flight 逻辑。如果您的请求不是您使用 OPTIONS 方法之前的 simple request, your browser will do a pre-flight request。如果 Orion 未在 CORS 模式下启动,您将始终收到 method not allowed 作为对您的 non-simple 请求的响应。
那么问题是什么,为什么不同的客户会得到不同的结果? Postman(curl 等)完全按照您的要求执行,并按照您的配置发送请求。它不会检查您发送的请求是否应该 pre-flighted。
另一方面,您的浏览器会检查您的请求并在必要时执行 pre-flight。除了修改您的请求外,您无法控制。
您正在使用的 Javascript 框架可能正在向请求添加一个 header 使其呈现为 "non-simple" 请求。例如:X-Requested-With
。请参阅 this 问题。
我的建议是查看您的浏览器发送的请求的详细信息(headers、方法等),看看是什么使其成为 non-simple 请求。然后对您的js代码进行必要的更改,以确保您的请求属于简单请求的范围。
话虽如此,您最终还是需要升级 Orion 版本,因为例如,DELETE 请求 永远不会 在通过浏览器发送时将被视为简单请求.
我正在调用 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.
无论是从邮递员还是从 freeboard 我都没有得到这些。
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
我认为您需要升级到 1.10 版才能使用 CORS。
您不需要添加任何 header ;) 实际上 Access-Control-Allow-Origing header 是在服务器响应中发送的,而不是由客户端请求发送的
CORS 请求仅受 Orion Context Broker 1.10 及更高版本支持。
正如@JoseManuelCantera 指出的那样,您不需要在请求中添加任何特定于 CORS 的 header,这些由您的客户端(浏览器、Postman 等)处理
您需要:
- 将您的版本升级到 1.10
- 以 CORS 模式启动 Orion
您可以在任何来源的 CORS 模式下启动 Orion(Orion 将接受来自任何来源的 CORS 请求),如下所示:
contextBroker -corsOrigin __ALL
请查看 CORS documentation for Orion 了解更多信息。
更新
请允许我简要解释一下 CORS pre-flight 逻辑。如果您的请求不是您使用 OPTIONS 方法之前的 simple request, your browser will do a pre-flight request。如果 Orion 未在 CORS 模式下启动,您将始终收到 method not allowed 作为对您的 non-simple 请求的响应。
那么问题是什么,为什么不同的客户会得到不同的结果? Postman(curl 等)完全按照您的要求执行,并按照您的配置发送请求。它不会检查您发送的请求是否应该 pre-flighted。
另一方面,您的浏览器会检查您的请求并在必要时执行 pre-flight。除了修改您的请求外,您无法控制。
您正在使用的 Javascript 框架可能正在向请求添加一个 header 使其呈现为 "non-simple" 请求。例如:X-Requested-With
。请参阅 this 问题。
我的建议是查看您的浏览器发送的请求的详细信息(headers、方法等),看看是什么使其成为 non-simple 请求。然后对您的js代码进行必要的更改,以确保您的请求属于简单请求的范围。
话虽如此,您最终还是需要升级 Orion 版本,因为例如,DELETE 请求 永远不会 在通过浏览器发送时将被视为简单请求.