Во-первых, это request заголовки, которые вы показываете, а не response заголовки, которые, как вам кажется, и есть.
Здесь вы видите заголовки запроса CORS preflight , а не фактический запрос. Предварительный запрос - это запрос, который браузер выполняет перед фактическим запросом, проверяя на сервере, что запрос разрешен. Если предпечатная проверка одобрена, то будет сделан реальный запрос. В предварительном просмотре браузер спрашивает сервер, разрешит ли он перечисленные заголовки. Это в заголовке запроса access-control-request-headers
. Точно так же он использует access-control-request-method
, чтобы спросить сервер, разрешит ли он GET
вызов метода.
В ответ на запрос предварительной проверки CORS сервер должен ответить заголовками, чтобы те подтвердили, что запрос является приемлемым. Ответ должен включать следующие заголовки
Access-Control-Allow-Origin
- это ответ на заголовок запроса предварительной проверки Origin
. Значение должно включать значение источника или *
, чтобы разрешить все источники. Это говорит браузеру, что происхождение разрешено.
Access-Control-Allow-Headers
- это ответ на заголовок запроса предварительной проверки access-control-request-headers
. Значение должно быть разделенным запятыми списком как минимум всех заголовков, запрошенных браузером. Если какой-либо из них отсутствует, предварительный запрос не будет выполнен.
Access-Control-Allow-Methods
- это ответ на заголовок запроса предварительной проверки access-control-request-method
. Значение должно быть, по крайней мере, запрошенным методом или обычно разрешенным списком методов.
Если вы посмотрите на этот пост , вы увидите, что ContainerResponseFilter
используется для обработки возврата этого предварительного запроса путем добавления всех необходимых заголовков для прохождения предварительной проверки.
@Provider
public class CORSFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext request,
ContainerResponseContext response) throws IOException {
response.getHeaders().add("Access-Control-Allow-Origin", "*");
response.getHeaders().add("Access-Control-Allow-Headers",
"origin, content-type, accept, authorization");
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
response.getHeaders().add("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD");
}
}
В вашем случае вы хотели бы добавить заголовки x-api-key,x-api-secret,x-request-id
в список в Access-Control-Allow-Headers
. Эти значения сообщают браузеру, что отправка этих заголовков в порядке.
После успешного предварительного запроса браузер отправит фактический запрос. Если предварительная проверка не удалась, то обычно браузер подсказывает вам, какие проверки не пройдены.