我正在使用ktor和使用的cors构建一个简单的REST API,但是当我发送一个没有标头数据的简单get请求时,服务器可以正常工作,但是如果我希望客户端说出key: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.
这是我的ktor代码
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);
})
请帮助我
答案 0 :(得分:1)
您需要将标头列入白名单:
install(CORS) {
header("key")
}
这需要使用您打算使用的每个自定义HTTP标头完成。
答案 1 :(得分:0)
install(CORS) {
exposeHeader("key")
}
header
和exposeHeader
之间的差异-首先允许使用此标头进行呼叫,但第二允许在客户端使用它