ionic4请求skynet服务器的资源跨域问题

最近在做一个后台接口,
顺便用ionic4写了个简单的管理后台,
本来skynet管理后台监听的端口是6666,
但是发现chrome默认对一些接口不友善,
虽然可以通过设置启动参数来解决,
但是还是把端口改掉了。

嗯,这个不是今天要记录的内容。

需要记录的内容是:改了监听端口之后,skynet明明可以响应成功,但是却在前端显示CORS错误。

之前用nodejs+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

所以,我们只需要在响应的时候这样写就可以了

local headers = {
       ['Access-Control-Allow-Origin'] = '*', -- 这里写允许访问的域名就可以了,允许所有人访问的话就写*
       ['Access-Control-Allow-Credentials'] = true,
    } 
local ok, err = httpd.write_response(sockethelper.writefunc(id),_,_,headers)

转载于:https://www.cnblogs.com/adoontheway/p/9908438.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值