Hi:
Add a CORS plugin to APISIX.
The following is the code of the cors plugin
--
-- Created by IntelliJ IDEA.
-- User: lidequan
-- Date: 2019-10-10
-- Time: 20:40
-- To change this template use File | Settings | File Templates.
--
local func = require("apisix.libs.func")
local core = require("apisix.core")
local ngx = require("ngx")
local schema = {
type = "object",
properties = {
enable = { type = "boolean", default = true, enum = { true, false } },
origin = {
description = "Access-Control-Allow-Origin",
type = "string",
default = "*", -- 秒
},
methods = {
description = "Access-Control-Allow-method",
type = "string",
default='GET, POST, OPTIONS, DELETE, PATCH, HEAD, CONNECT, TRACE',
},
headers = {
description = "Access-Control-Allow-Headers",
type = "string",
default =
"DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization"
},
credentials ={
description = "Access-Control-Allow-Credentials",
type = "boolean",
default = true,
enum = { true, false }
}
}
}
local plugin_name = "odin-cors"
local _M = {
version = 0.1,
priority = 2901,
name = plugin_name,
schema = schema,
}
function _M.check_schema(conf)
local ok, err = core.schema.check(schema, conf)
if not ok then
return false, err
end
return true
end
function _M.access(conf, ctx)
if not conf.enable then
return
end
local access_control_vars = {
methods = "Access-Control-Allow-Methods",
headers = "Access-Control-Allow-Headers",
credentials = "Access-Control-Allow-Credentials"
}
-- 设置origin
if not func.empty(conf.origin) then
local headers = ngx.req.get_headers()
if not func.empty(headers.origin) then
local from, _, _ = ngx.re.find(conf.origin, headers.origin)
if from then
core.response.set_header("Access-Control-Allow-Origin",
headers.origin)
end
end
end
for key, name in pairs(access_control_vars) do
if conf[key] then
core.response.set_header(name, conf[key])
end
end
end
return _M