【问题标题】:Cross origin request blocked even though primary domain is same即使主域相同,跨域请求也会被阻止
【发布时间】:2018-06-13 02:43:52
【问题描述】:

我正在开发一个使用图像上传功能的应用程序。应用程序后端是用 Golang 编写的,而前端是用 Angular4 编写的。我正在使用 Gin 框架在 Golang 中运行 http 请求。

以下是上传图片的Golang代码:

func UploadFile(c *gin.Context){
    imageData := make(map[string]interface{})
    response := ResponseController{}

    /* ------ Get current date ------ */
    currDate        := time.Now().UTC()
    yearString      := strconv.Itoa(currDate.Year())
    monthString     := strconv.Itoa(int(currDate.Month()))
    dayString       := strconv.Itoa(currDate.Day())

    path := config.UploadBasePath+config.AppFolder+config.UploadsFolder+yearString+"/"+monthString+"/"+dayString+"/"

    /* create temp directory if does not exist */
    if _, err := os.Stat(path); os.IsNotExist(err) {
        os.MkdirAll(path, 0755)
    }

    /* read data from form */
    file, err := c.FormFile("file")
    if err != nil {
        response = ResponseController{
            config.FailureCode,
            config.FailureFlag,
            "Error while reading image.",
            nil,
        }
        GetResponse(c, response)
        return
    }
    filePath := path+file.Filename
    if err := c.SaveUploadedFile(file, filePath); err != nil {
        response = ResponseController{
            config.FailureCode,
            config.FailureFlag,
            "Error while uploading image.",
            err,
        }
        GetResponse(c, response)
        return
    }
    uploadUrl := "/"+config.UploadsFolder+yearString+"/"+monthString+"/"+dayString+"/"+file.Filename
    imageData["upload_url"] = uploadUrl

    response = ResponseController{
        config.SuccessCode,
        config.SuccessFlag,
        "Image uploaded successfully.",
        imageData,
    }
    GetResponse(c, response)
}

前端和后端在同一个域上也有子域。当请求从前端生成时。

我在 Golang 代码中传递了以下标头:

c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")

当我上传图片时,它在控制台中返回以下错误并且图片没有上传:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://SUBDOMAIN.DOMAIN:8080/api/v1/upload. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘http://[DOMAIN-NAME].com’).

谁能指导我在这里缺少什么。谢谢!

【问题讨论】:

  • 据我所知,前端页面必须使用 CORS 标头提供服务。
  • @krezus 您提供的链接适用于 Mux。我正在使用杜松子酒。
  • @PatrickBucher 如上所述,我正在为请求提供标头。但它不起作用。我需要传递更多的东西吗??
  • 我认为这不是后端问题。浏览器在您的请求到达后端之前就阻止了它。你应该看看角度。

标签: go


【解决方案1】:

尝试在路由器中设置OPTIONS router.HandleFunc("/", getModulos).Methods("POST", "GET", "OPTIONS")

你也可以把CONTENT-TYPE 像这样w.Header().Set("Access-Control-Allow-Headers", "Content-Type")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 2014-10-13
    • 2016-04-20
    • 1970-01-01
    • 2017-01-04
    • 2014-12-27
    相关资源
    最近更新 更多