Проблема Access-Control-Allow-Origin в заголовке ktor cors
Я создаю простой REST API с использованием ktor и используемых cors, но когда я отправляю простой запрос get без данных заголовков, сервер работает нормально, но если я хочу, чтобы клиент имел ключ say:1 сервер не отвечает мне правильно, он говорит, что проблема в
Failed to load http://127.0.0.1:8080/test: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403.
так вот мой код ктор
install(ContentNegotiation) {
gson {
}
}
install(ForwardedHeaderSupport)
install(DefaultHeaders)
install(CORS)
{
method(HttpMethod.Options)
method(HttpMethod.Get)
method(HttpMethod.Post)
method(HttpMethod.Put)
method(HttpMethod.Delete)
method(HttpMethod.Patch)
header(HttpHeaders.AccessControlAllowHeaders)
header(HttpHeaders.ContentType)
header(HttpHeaders.AccessControlAllowOrigin)
allowCredentials = true
anyHost()
maxAge = Duration.ofDays(1)
}
...
get("test"){
val a = call.request.headers["key"]
println(a)
call.respond(Product(name = a))
}
и мой код JavaScript выглядит следующим образом....
fetch('http://shop-ix.uz:8080/test', {
headers: {
"key": "1"
})
.then(response => response.json())
.then(json => {
console.log(json);
})
Помогите мне, пожалуйста
3 ответа
Вы должны внести в белый список свои заголовки, как это:
install(CORS) {
header("key")
}
Это нужно делать с каждым настраиваемым HTTP-заголовком, который вы намереваетесь использовать.
Убедитесь, что все заголовки и необходимые методы разрешены во время установки Ktor CORS. Я столкнулся с той же проблемой, потом понял, что не добавил
Заголовок моего запроса!
Axios({
method: 'GET',
url: 'http://127.0.0.1:8080/connect',
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
},
params: {
...
}
})
Разрешение CORS
install(CORS) {
allowMethod(HttpMethod.Options)
allowMethod(HttpMethod.Post)
allowMethod(HttpMethod.Get)
allowHeader(HttpHeaders.AccessControlAllowOrigin)
allowHeader(HttpHeaders.ContentType)
anyHost()
}
Убедитесь, что то, что требуется вашему заголовку запроса, разрешено на сервере во время CORS.
install(CORS) {
exposeHeader("key")
}
разница между
header
и
exposeHeader
- сначала разрешить вызов с этим заголовком, но второй разрешить использовать его на стороне клиента