Node.js Axios前端到Golang后端CORS问题

Node.js Axios前端到Golang后端CORS问题,node.js,vue.js,go,cors,axios,Node.js,Vue.js,Go,Cors,Axios,现在我对CORS失去了理智。我有一个Vue.js应用程序,使用Axios将数据发布到Golang服务(使用Gorilla Mux和处理程序)。两个应用程序都在同一台主机上运行 Axios调用如下所示: const axios = require('axios'); const options = { url: 'http://' + window.location.hostname + ':4002', method: 'POST', headers: {

现在我对CORS失去了理智。我有一个Vue.js应用程序,使用Axios将数据发布到Golang服务(使用Gorilla Mux和处理程序)。两个应用程序都在同一台主机上运行

Axios调用如下所示:

const axios = require('axios');

const options = {
    url: 'http://' + window.location.hostname + ':4002',
    method: 'POST',
    headers: {
        'Accept': 'application/json',
                    'Content-Type': 'application/json;charset=UTF-8'
    },
    data: {
        MyField1: "MyData1",
        MyField2: {
            MyField3: "MyData2"
        }
    }
};

axios(options)
    .then(response => {
        console.log(response.status);
    });
func main() {
    headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
    originsOk := handlers.AllowedOrigins([]string{"*"})
    methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})

    router := mux.NewRouter()
    router.HandleFunc("/", HandleRequest).Methods("POST", "OPTIONS")

    log.Fatal(http.ListenAndServe(":4002", handlers.CORS(originsOk, headersOk, methodsOk)(router)))
}

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    ...
}
Golang服务器如下所示:

const axios = require('axios');

const options = {
    url: 'http://' + window.location.hostname + ':4002',
    method: 'POST',
    headers: {
        'Accept': 'application/json',
                    'Content-Type': 'application/json;charset=UTF-8'
    },
    data: {
        MyField1: "MyData1",
        MyField2: {
            MyField3: "MyData2"
        }
    }
};

axios(options)
    .then(response => {
        console.log(response.status);
    });
func main() {
    headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
    originsOk := handlers.AllowedOrigins([]string{"*"})
    methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})

    router := mux.NewRouter()
    router.HandleFunc("/", HandleRequest).Methods("POST", "OPTIONS")

    log.Fatal(http.ListenAndServe(":4002", handlers.CORS(originsOk, headersOk, methodsOk)(router)))
}

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    ...
}
这是数小时搜索如何使其工作的结果。我大量引用了答案,在使用CURL进行测试时,我收到了以下信息(以及其他冗余信息):

这让我相信一切正常,但我仍然在Firefox的网络查看器中看到403,在控制台中看到以下内容:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://<ip>:4002/. (Reason: CORS request did not succeed).
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://<ip>:4002/. (Reason: CORS request did not succeed).
Error: Network Error
跨源请求被阻止:同源策略不允许在http://:4002/读取远程资源。(原因:CORS请求未成功)。
已阻止跨源请求:同源策略不允许读取位于http://:4002/的远程资源。(原因:CORS请求未成功)。
错误:网络错误

我所能找到的所有信息都让我相信,此时我不应该看到此错误,任何帮助都将不胜感激。

最后通过将Go代码更改为以下内容来解决此问题:

cors := handlers.CORS(
    handlers.AllowedHeaders([]string{"content-type"}),
    handlers.AllowedOrigins([]string{"*"}),
    handlers.AllowCredentials(),
)

router := mux.NewRouter()
router.HandleFunc("/", HandleRequest).Methods("POST", "OPTIONS")

router.Use(cors)

log.Fatal(http.ListenAndServe(":4002", (router)))

通过将Go代码更改为以下内容,最终解决了此问题:

cors := handlers.CORS(
    handlers.AllowedHeaders([]string{"content-type"}),
    handlers.AllowedOrigins([]string{"*"}),
    handlers.AllowCredentials(),
)

router := mux.NewRouter()
router.HandleFunc("/", HandleRequest).Methods("POST", "OPTIONS")

router.Use(cors)

log.Fatal(http.ListenAndServe(":4002", (router)))

您希望该方法仅为
POST
OPTIONS
?是的,这是我目前正在实现的唯一功能。您希望该方法仅为
POST
OPTIONS
?是的,这是我目前正在实现的唯一功能。它有效。谢谢,成功了。非常感谢。