Запрос Context Broker Preflight OPTIONS

Я пытаюсь сделать запрос GET к экземпляру Context Broker из браузера.

Я включил CORS на CB, используя флаг -corsOrigin __ALL при запуске приложения, и я вижу, что это сработало, сделав запрос в POSTMAN и увидев этот заголовок в ответе: access-control-allow-origin →*.

Мне нужно указать заголовок Fiware-Service в моем запросе GET, чтобы получить правильные объекты, что, как я полагаю, делает запрос не простой, инициирующий HTTP-запрос OPTIONS.

Проверяя исходящий запрос, Chrome сообщает, что эти заголовки отправлены:

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

Ответ, который я получаю от Context Broker:

Request URL: http://xxx.xxx.xxx.xxx:1026/v2/entities/
Request Method: OPTIONS
Status Code: 405 Method Not Allowed

предыдущий ответ McMutton на аналогичный вопрос:

«внесите необходимые изменения в свой код js, чтобы убедиться, что ваш запрос попадает в рамки простых запросов».

Который был направлен на удаление нестандартных заголовков из запроса. Однако для меня я не вижу отправляемых нестандартных заголовков.

Чтение документации по программному обеспечению Access -Control-Allow-Headers, есть ссылка на исходный код, в котором указаны разрешенные заголовки. Там я вижу определенный заголовок Fiware-Service, но он не соответствует регистру заголовков, отправляемых из браузера (браузер преобразовал мои заголовки во все строчные буквы).


Кто-нибудь знает, чувствительна ли «проверка заголовков» в Context Broker к регистру?

Если нет, то в чем еще может быть дело?


Изменить: похоже, об этой проблеме сообщалось здесь: https://github.com/telefonicaid/fiware-orion/issues/3453


person Charlie    schedule 14.08.2019    source источник


Ответы (2)


Основываясь на обсуждении соответствующей проблемы с github, кажется, проблема связана с тем, что Context Broker довольно старый (версия 1.7.0), и эта функция еще не была разработана в этой версии.

Решение состоит в том, чтобы обновить Context Broker до самой последней версии (на данный момент 2.2.0).

person fgalan    schedule 15.08.2019

Спасибо @fgalan, да, эта функция включена в последнюю версию Context Broker. Однако наша система в настоящее время довольно хрупкая, поэтому, пока мы не сможем уверенно перестроить и перейти на более новую версию, я буду имитировать ответ HTTP на запрос параметров с помощью NGINX.

Эта конфигурация прослушивает запросы на другом порту для Context Broker и отправляет ответ об успешном завершении, когда поступают HTTP-запросы OPTIONS.

Если это не HTTP-запрос OPTIONS, 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;
    }
}
person Charlie    schedule 21.08.2019