Context Broker预检选项请求

时间:2019-08-14 08:55:59

标签: fetch fiware fiware-orion preflight context-broker

我正在尝试从浏览器向Context Broker实例发出GET请求。

启动应用程序时,我已经使用-corsOrigin __ALL标志在CB上启用了CORS,并且可以通过在POSTMAN中发出请求并在响应中看到此标头来看到它已起作用:{{1} }。

我需要在GET请求中指定Fiware-Service标头,以获取正确的实体,我认为该实体发出的请求不是simple,而是触发了OPTIONS HTTP请求。

Chrome检查外发请求,报告已发送以下标头:

access-control-allow-origin →*

我从上下文代理获得的响应是​​:

Access-Control-Request-Headers: fiware-service
Access-Control-Request-Method: GET

一个previous answer by McMutton,针对类似的问题:

  

”对您的js代码进行必要的更改,以确保您的请求   属于简单请求的范围。”

直接从请求中删除非标准标头。但是,对我来说,我看不到任何非标准头发送。

读取Fiware documentation on Access-Control-Allow-Headers时,有一个指向the source code的链接,其中指定了允许的标头。在那里,我可以看到定义了Fiware-Service标头,但它与从浏览器发送的标头不区分大小写(浏览器已将我的标头转换为所有小写字母)。


有人知道上下文代理中的“标头检查”是否区分大小写吗?

如果不是,那还有什么问题?


编辑:此问题似乎已在此处报告: https://github.com/telefonicaid/fiware-orion/issues/3453

2 个答案:

答案 0 :(得分:1)

基于the discussion on the associated github issue,似乎该问题是由于Context Broker相当老(版本1.7.0)引起的,并且该功能尚未在该版本中开发。

解决方案是将Context Broker更新到最新版本(目前为2.2.0)。

答案 1 :(得分:0)

感谢@fgalan,是的,该功能包含在最新的Context Broker版本中。但是,我们的系统目前非常脆弱,因此在我们放心地重建并迁移到较新版本之前,我将使用NGINX模拟选项请求的HTTP响应。

此配置在到Context Broker的其他端口上侦听请求,并在OPTIONS HTTP请求到达时发送成功响应。

如果不是OPTIONS HTTP请求,NGINX会将请求转发到Context Broker实例。

server {
    listen 1885;
    listen [::]:1885;

    location / {
        if ($request_method = OPTIONS ) {
            add_header Content-Length 0;
            add_header Content-Type text/plain;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Fiware-Service';
            return 204;
        }
        proxy_pass http://xxx.xxx.xxx.xxx:1026;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}