ionic4請求skynet服務器的資源跨域問題

最近在作一個後臺接口,
順便用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)
相關文章
相關標籤/搜索