Код: Выделить всё
Failed to fetch.
Possible Reasons:
CORS
Network Failure
URL scheme must be "http" or "https" for CORS request.
Используя Postman, я сравнил то, что возвращает этот запрос OPTIONS при его выполнении, со старым сервером Delphi (где работают POST-запросы Swagger) и новым сервером Java Spring Webflux (где они терпят неудачу). В результате новый сервер возвращает все заголовки, которые возвращает старый сервер (включая те, которые, согласно другим сообщениям, необходимы Swagger для принятия предполетной проверки), а также некоторые дополнительные. Вот сравнение:
Ключ
Старый прокси (работает)
Новый прокси (не работает)
Заголовки-Control-Access-Allow
Content- Тип, Авторизация, token_auth
Тип контента, Авторизация, token_auth
Доступ -Control-Allow-Methods
GET, POST, DELETE, PUT, PATCH, OPTIONS
GET, POST, DELETE, PUT, PATCH, OPTIONS
GET, POST, DELETE, PUT, PATCH, OPTIONS
Контроль доступа-Разрешить-Origin
**
Управление кэшем
нет кэша, нет хранилища, максимальный возраст=0, необходима повторная проверка
Длина контента
39
39
Тип контента
text/html; charset=utf-8
text/html; charset=utf-8
Дата
Пятница, 12 июля 2024 г. 10: 59:43 GMT
Пт, 12 июля 2024 г. 11:04:15 GMT
< td>Срок действия истекает
0
< td>Pragma
без кэша
Политика рефереров
нет рефереров
Строгая транспортная безопасность
max-age=16070400; includeSubDomains
max-age=16070400; includeSubDomains
Параметры X-Content-Type
nosniff
Параметры X-Frame
< /td>
ЗАПРЕТИТЬ
X-XSS-Защита
0
Я предполагаю, что причиной проблемы являются дополнительные заголовки, но на самом деле я не уверен. Я также понятия не имею, как я могу повлиять на множество заголовков, отправляемых Webflux, что подводит меня к моему вопросу:
Являются ли эти дополнительные заголовки причиной того, что запросы Swagger POST не работают? И если да, то как я могу изменить их в Spring Webflux, чтобы они возвращали то же самое, что и на нашем старом прокси?
ОБНОВЛЕНИЕ:
Теперь я проанализировал исходящий запрос OPTIONS от Swagger и обнаружил, что он содержит заголовок Origin: https://editor-next.swagger.io. Этот запрос OPTIONS возвращает ответ 403 FORBIDDEN, из-за чего Swagger отображает сообщение «Не удалось получить данные».
Мне удалось воспроизвести это в Postman, скопировав туда запрос. Там я также смог подтвердить, что если я опущу заголовок Origin, запрос вернется с ответом 200 OK.
Что странно, так это то, что на стороне Java Proxy запрос регистрируется как возвративший ответ 200 в обоих случаях, поэтому я не знаю, в какой момент он преобразуется в ответ 403:
Код: Выделить всё
RequestLoggingFilter: Incoming request: OPTIONS http://localhost:9410/endpoint/doSomething
RequestLoggingFilter: Outgoing Response: Status Code: 200 OK, Headers: {transfer-encoding=[chunked]}
Код: Выделить всё
@Component
@Log4j2
public class RequestLoggingFilter implements WebFilter {
@Override
public Mono filter(ServerWebExchange exchange, WebFilterChain chain) {
log.info(
"Incoming request: {} {}",
exchange.getRequest().getMethod(),
exchange.getRequest().getURI()
);
ServerHttpResponse response = exchange.getResponse();
HttpHeaders headers = response.getHeaders();
log.info(
"Outgoing Response: Status Code: {}, Headers: {}",
response.getStatusCode(),
headers
);
return chain.filter(exchange);
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... flux-proxy