登录
首页 >  Golang >  Go问答

访问控制允许Origin标头不存在于fetch api调用中怎么办

来源:Golang技术栈

时间:2023-03-08 11:43:39 462浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《访问控制允许Origin标头不存在于fetch api调用中怎么办》,就很适合你,本篇文章讲解的知识点主要包括golang。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

所以我正在尝试使用 isomorphic-fetch https://www.npmjs.com/package/isomorphic- fetch

我有一个用 go 编写的服务器,它返回 JSON 数据。我就是这样打电话的——

export function fetchDistricts(geoState) {

    return function (dispatch) {
        dispatch(requestDistricts(geoState));


        return fetch(`http://localhost:8100/districts/`)
            .then(response => {console.log(response);})
            .then(json => {
                console.log("json");
            });
}

我在 chrome 控制台中收到此错误

Fetch API cannot load http://localhost:8100/districts/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8200' is therefore not allowed access.

这很奇怪,因为在我的处理程序中我正在这样做

func getDistricts(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/jsonp;charset=UTF-8")
    w.WriteHeader(http.StatusOK)
    w.Header().Set("Access-Control-Allow-Origin", "*")
    rows, err := db.Query("SELECT * from districts")
    //other code here

此外,这是有效的

var activitiesDfD =  $.ajax({
    url: "http://localhost:8100/district/1/activities",
    type: "GET",
    dataType: "json"
});

$.when(activitiesDfD).then(function(data, textStatus, jqXhr) {

为什么在使用 fetch API 时会失败,我该如何解决?

编辑-

我现在已经试过了

func getDistricts(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/jsonp;charset=UTF-8")
    w.Header().Set("Access-Control-Allow-Origin", r.Header.Get(`origin`))
    w.WriteHeader(http.StatusOK)

结合以下两个建议 - 但错误是相同的。

正确答案

几乎所有的网络浏览器都拒绝原点"*"。因此"*",作为Access-Control-Allow-Origin标头发送会导致违反同源策略。

幸运的是,有一个解决方法。如果您查看处理此问题的[gin-cors](https://github.com/itsjamie/gin- cors/blob/master/cors.go#L155)代码,它的作用是重新发送"origin"浏览器发送的标头。所以要*工作,你必须这样做:

w.Header().Set("Access-Control-Allow-Origin", r.Header.Get(`origin`))

今天关于《访问控制允许Origin标头不存在于fetch api调用中怎么办》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表