最近在作一个后台接口,
顺便用ionic4写了个简单的管理后台,
原本skynet管理后台监听的端口是6666,
可是发现chrome默认对一些接口不友善,
虽然能够经过设置启动参数来解决,
可是仍是把端口改掉了。前端
嗯,这个不是今天要记录的内容。node
须要记录的内容是:改了监听端口以后,skynet明明能够响应成功,可是却在前端显示CORS错误。chrome
以前用nodejs+express的话,很简单的就能解决,利用express的中间件,在响应头里面写入跨域相关的头信息。express
可是skynet的http接口比较晦涩,找起来比较麻烦,skynet的httpd的响应请求部分代码以下:跨域
local function writeall(writefunc, statuscode, bodyfunc, header) local statusline = string.format("HTTP/1.1 %03d %s\r\n", statuscode, http_status_msg[statuscode] or "") writefunc(statusline) if header then for k,v in pairs(header) do if type(v) == "table" then for _,v in ipairs(v) do writefunc(string.format("%s: %s\r\n", k,v)) end else writefunc(string.format("%s: %s\r\n", k,v)) end end end local t = type(bodyfunc) if t == "string" then writefunc(string.format("content-length: %d\r\n\r\n", #bodyfunc)) writefunc(bodyfunc) elseif t == "function" then writefunc("transfer-encoding: chunked\r\n") while true do local s = bodyfunc() if s then if s ~= "" then writefunc(string.format("\r\n%x\r\n", #s)) writefunc(s) end else writefunc("\r\n0\r\n\r\n") break end end else assert(t == "nil") writefunc("\r\n") end end function httpd.write_response(...) return pcall(writeall, ...) end
因此,咱们只须要在响应的时候这样写就能够了socket
local headers = { ['Access-Control-Allow-Origin'] = '*', -- 这里写容许访问的域名就能够了,容许全部人访问的话就写* ['Access-Control-Allow-Credentials'] = true, } local ok, err = httpd.write_response(sockethelper.writefunc(id),_,_,headers)