Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http golang服务器面临cors问题_Http_Go_Cors - Fatal编程技术网

Http golang服务器面临cors问题

Http golang服务器面临cors问题,http,go,cors,Http,Go,Cors,我在Go服务器中编写了以下代码: func main(){ r:=chi.NewRouter() cors:=cors.New(cors.Options{ AllowedOriginates:[]字符串{“*”}, AllowOriginFunc:func(r*http.Request,原始字符串)bool{return true}, AllowedMethods:[]字符串{“GET”、“POST”、“PUT”、“DELETE”、“OPTIONS”}, AllowedHeader:[]字符串{

我在Go服务器中编写了以下代码:

func main(){
r:=chi.NewRouter()
cors:=cors.New(cors.Options{
AllowedOriginates:[]字符串{“*”},
AllowOriginFunc:func(r*http.Request,原始字符串)bool{return true},
AllowedMethods:[]字符串{“GET”、“POST”、“PUT”、“DELETE”、“OPTIONS”},
AllowedHeader:[]字符串{“接受”、“授权”、“内容类型”、“X-CSRF-Token”},
ExposedHeader:[]字符串{“链接”},
AllowCredentials:正确,
选项passthrough:true,
MaxAge:3599,//任何主要浏览器都不会忽略最大值
})
flag.Parse()
//良好的基础中间件堆栈
r、 使用(cors.Handler)
r、 使用(中间件.RequestID)
r、 使用(middleware.Logger)
r、 使用(中间件.恢复程序)
r、 使用(middleware.URLFormat)
r、 使用(render.SetContentType(render.ContentTypeJSON))
r、 使用(中间件超时(60*time.s))
r、 组(func(r池路由器){
r、 路由(“/api”,函数(r chi.Router){
r、 路由(“/items”,函数(r chi.Router){
r、 获取(“/”,allItems)
r、 路由(“/{barcode}”),func(r chi.Router){
r、 获取(“/”,getItem)
r、 Put(“/”,updateItem)
})
r、 Post(“/”,positem)
r、 删除(“/”,删除项)
})
r、 线路(“/sale_line)”,func(中央路由器){
//r.Use(cors.Handler)
r、 邮政(“/”,邮政销售)
r、 Put(“/”,updateSales)
r、 删除(“/”,删除销售)
})
})
})
http.listendServe(“:8080”,r)
}
我面临的问题是,当我从我的react应用程序调用api时,它会给我如下错误:

CORS策略已阻止从源“”访问“”处的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:它没有HTTP ok状态


我遗漏了什么问题?

您的错误一定是在某些中间件中。探测和代码工作正常,只需将CORS选项中的
AllowOriginFunc
名称更改为
AllowOriginRequestFunc

服务器代码:

主程序包
进口(
“net/http”
“github.com/go chi/chi”
“github.com/rs/cors”
)
func main(){
r:=chi.NewRouter()
cors:=cors.New(cors.Options{
AllowedOriginates:[]字符串{“*”},
AllowOriginRequestFunc:func(r*http.Request,原始字符串)bool{return true},
AllowedMethods:[]字符串{“GET”、“POST”、“PUT”、“DELETE”、“OPTIONS”},
AllowedHeader:[]字符串{“接受”、“授权”、“内容类型”、“X-CSRF-Token”},
ExposedHeader:[]字符串{“链接”},
AllowCredentials:正确,
选项passthrough:true,
MaxAge:3599,//任何主要浏览器都不会忽略最大值
})
r、 使用(cors.Handler)
r、 Get(“/”,func(w http.ResponseWriter,r*http.Request){
w、 写入([]字节(“Hello World”))
})
http.listendServe(“:8080”,r)
}
我使用XMLHttpRequest对其进行了测试:


var req=新的XMLHttpRequest();
请求打开(“获取”http://localhost:8080/“,假);
req.onload=功能(事件){
如果(req.readyState==4&&req.status==200)
document.getElementById(“根”).innerText=req.responseText;
};
请求发送();

请将代码的格式设置为可读。它所指的“飞行前请求”是一个HTTP选项请求;基本上,错误是当它发出原始选项请求以查看CORS是否被允许时,它没有返回200,它得到了其他东西。您可以通过使用类似于
curl
或Postman的内容向该URL发出选项请求,以查看它得到的确切响应,这将有助于缩小问题的范围。@Adrian我从Postman处检查过,它正在返回“ok”状态,但是我的react应用程序仍然向我显示上述错误我实现了你的建议,但它给了我这个错误:cors.options类型的struct literal中的未知字段“AllowOriginRequestFunc”我使用的版本是v1.0.7