【发布时间】:2022-08-16 07:04:08
【问题描述】:
每次通过 KrakenD API 网关向我的 REST 服务发出 OPTIONS 请求时,我都会收到 HTTP 405 Method Not Allowed 错误。每当我尝试请求 REST 服务的 /apexadapter/version 端点时,都会发生这种情况。当我直接从 API 服务器请求相同的资源时(即当我绕过 KrakenD API 网关时),我没有收到相同的错误。我不明白我为什么会得到这个,我希望你能帮助我理解 Kraken 在做什么,这样我的请求就会引发错误。
根据我阅读的一篇题为Enabling Cross Origin Resource Sharing (CORS) 的文章,我将security/cors 添加到全局extra_config 中。
这是模拟我的请求的 curl 命令:
curl --location --request OPTIONS \'http://localhost:30000/apexadapter/version\'
我的 krakend.json 文件具有以下内容:
{
\"version\": 2,
\"timeout\": \"15m\",
\"cache_ttl\": \"300s\",
\"output_encoding\": \"json\",
\"name\": \"apexadapter\",
\"extra_config\": {
\"security/cors\": {
\"allow_origins\": [\"*\"],
\"allow_methods\": [\"GET\", \"HEAD\", \"POST\", \"OPTIONS\", \"PATCH\", \"DELETE\"],
\"debug\": true
}
},
\"endpoints\": [
{
\"endpoint\": \"/apexadapter/version\",
\"method\": \"GET\",
\"output_encoding\": \"no-op\",
\"backend\": [{
\"url_pattern\": \"/version\",
\"method\": \"GET\",
\"encoding\": \"no-op\",
\"host\": [
\"http://apexadapter.apex.svc.cluster.local:38295\"
]
}]
},
... and so on
这是 Postman 输出的结果(我选择测试我的 API 的工具)
OPTIONS http://localhost:30000/apexadapter/version: {
\"Network\": {
\"addresses\": {
\"local\": {
\"address\": \"::1\",
\"family\": \"IPv6\",
\"port\": 51269
},
\"remote\": {
\"address\": \"::1\",
\"family\": \"IPv6\",
\"port\": 30000
}
}
},
\"Request Headers\": {
\"user-agent\": \"PostmanRuntime/7.29.2\",
\"accept\": \"*/*\",
\"cache-control\": \"no-cache\",
\"postman-token\": \"bf91c1ff-85fe-41e1-ad17-33afee354b2c\",
\"host\": \"localhost:30000\",
\"accept-encoding\": \"gzip, deflate, br\",
\"connection\": \"keep-alive\"
},
\"Response Headers\": {
\"content-type\": \"text/plain\",
\"date\": \"Fri, 12 Aug 2022 19:40:38 GMT\",
\"content-length\": \"22\"
},
\"Response Body\": \"405 method not allowed\"
}
我注意到响应中的响应标头已完全剥离。尽管 no-op ,我的 Access-Control-Allow-* 标题都没有被返回。
编辑:我向维护者提出了一个问题:https://github.com/krakendio/krakend-ce/issues/545