gpt4 book ai didi

ajax - 由于 CORS,Nginx 反向代理后面的 Golang 应用程序不会接受 firefox 上的 ajax 请求

转载 作者:IT王子 更新时间:2023-10-29 02:24:07 24 4
gpt4 key购买 nike

所以我有一个域名,它是一个静态 html 文件,它向反向代理中 Nginx 后面的子域应用程序发送 ajax 请求。

这是我的 ajax 代码:

$(document).ready(function(){
function call() {
$.ajax({
type: "POST",
url: "https://test.example.com/call",
crossDomain: true,
data: $("#form-call").serialize(),
success: function(response) {
$("#response").html(response);
},
error: function() {
alert("error");
}

});

在 Nginx 上我有:

    upstream example {
server 192.168.1.10:6000;
}
server {

listen 443;
server_name test.example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/afs.crt;
ssl_certificate_key /etc/nginx/ssl/afs.key;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Authorization "";

client_max_body_size 0;

chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Origin' "$http_origin";


location / {
proxy_pass https://exapmle;
proxy_read_timeout 900;
}
}

我在我的 golang 应用程序中有这个来帮助 CORS:

func (s *MyServer) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
if origin := req.Header.Get("Origin"); origin != "" {
rw.Header().Set("Access-Control-Allow-Origin", origin)
rw.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
rw.Header().Set("Access-Control-Allow-Headers",
"Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}
// Stop here if its Preflighted OPTIONS request
if req.Method == "OPTIONS" {
return
}
// Lets Gorilla work
s.r.ServeHTTP(rw, req)
}

它在 chrome 上工作正常,但在 firefox 上我收到错误:

跨源请求被阻止:同源策略不允许读取位于 https://test.example.com/call 的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。

最佳答案

免责声明:我刚刚看到这篇文章有多旧,我想问题已经解决了。

这对我有用:

func corsHandler(fn http.HandleFunc) http.HandleFunc {
return func(rw http.ResponseWriter, req *http.Request) {
rw.Header().Set("Access-Control-Allow-Origin", "*")
fn(rw, req)
}
}

然后在设置路由器时,您可以:

r := mux.NewRouter()
r.HandleFunc("/<route>", corsHandler(handleRouteMethod)).Methods("<METHOD>")

方法略有不同,但它确实有效,所以如果所有其他方法都失败了,你可以试一试(假设你使用的是 gorilla mux,如果你使用的是 httprouter 或其他东西,那么你的 corsHandler 方法可能需要使用不同的函数签名)。

关于ajax - 由于 CORS,Nginx 反向代理后面的 Golang 应用程序不会接受 firefox 上的 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28201163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com