错误详情
- 在使用
ajax
向http
服务器请求时,出现以下错误:Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
- 请求如下:
$.ajax({ url: "http://127.0.0.1/getname", type: 'GET', success: function (data) { UpdateNameInput(htmlDomInputID, data); }, error: function () { console.log("Get Rand Name Failed!"); } });
- 服务器为
golang
实现
一种解决
-
查了好多资料,尝试了好多方法,最终用了这个_StackOverflow
-
即
try { var xhttp = new XMLHttpRequest(); xhttp.open("GET", httpURL + httpGetName, false); xhttp.setRequestHeader("Content-type", "text/html"); xhttp.send(); alert(xhttp.response) } catch (error) { alert(error.message); }
服务器
func GetNameHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") randName := "NickName" fmt.Fprintf(w, randName) }
-
注意
此种方式可能并不能完全解决
CORS: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true
Request header field Access-Control-Allow-Headers is not allowed by itself in preflight responseRequest header field cache-control is not allowed by Access-Control-Allow-Headers in preflight response.
另一种方法
- golang库-cors
- 使用
服务器
jsfunc StartHttpServer() bool { c := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, }) mux := http.NewServeMux() mux.HandleFunc("/getname", GetIDHandler) handler := c.Handler(mux) http.ListenAndServe(addr, handler) return true }
function GetRandName() { $.ajax({ url: "http://127.0.0.1/getname", type: 'GET', success: function (data) { console.log(data) UpdateNameInput(htmlDomInputID, data.id); }, error: function () { console.log("Get Rand Name Failed!"); } }); }
更多推荐
【错误记录/html】Response to preflight request doesn‘t pass access control check: No ‘
发布评论