ionic4請求skynet伺服器的資源跨域問題
阿新 • • 發佈:2018-11-05
最近在做一個後臺介面,
順便用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)