Настройка CORS на IP входящего запроса

#browser #ibmhttpserver

#браузер #ibmhttpserver

Вопрос:

Я использую IBM HTTP Server 9.0.0.7. Планируется интеграция, при которой пользователь задает запрос через Chrome. httpd.conf содержит следующее

 <VirtualHost *:443>
 SSLEnable
 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
 Header set Access-Control-Allow-Origin "*"
 Header set Access-Control-Allow-Methods "GET,PUT,POST,DELETE,PATCH,OPTIONS"
 Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, 
 Access-Control-Request-Method, Access-Control-Request-Headers, Credentials"
 Header set Access-Control-Allow-Credentials "true"
</VirtualHost>
  

Браузер разрешает первоначальный запрос на вход, но при последующих запросах ajax блокируется CORS
Выдается ошибка

 Access to XMLHttpRequest at 'https://someip/api?select=category,description' from origin 'http://localhost:38359' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: 
The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. 
The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
  

Поскольку интеграция основана на браузере. т. е. пользователь будет получать доступ к API через браузер. Я думаю, что решение состоит в том, чтобы установить Header set Access-Control-Allow-Origin для IP-адреса входящего запроса.

Есть идеи, как это можно сделать. кстати, у меня нет никакого контроля над этой интеграцией, кроме того, что я могу изменить настройки HTTP-сервера.

Ответ №1:

Он хочет, чтобы источник инициировал запрос XHR, который находится в сообщении об ошибке: http://localhost:38359

Если вам необходимо поддерживать несколько источников без * (из-за использования учетных данных), вам нужно будет обусловить это вводом заголовка Origin: в качестве входных данных.

Например:

 SetEnvIf Origin "http(s)?://(localhost:38359)$" ACAO=$0
SetEnvIf Origin "http(s)?://(some-other-origin-allowed)$" ACAO=$0
Header always set Access-Control-Allow-Origin %{ACAO}e env=ACAO