CORS golang echo 框架

问题描述

我有一个 Go 代码

package main

import (
  "database/sql"
  "encoding/json"
  "fmt"
  "net/http"

  _ "github.com/go-sql-driver/MysqL"
  "github.com/labstack/echo"
  "github.com/labstack/echo/middleware"
)

func main() {
  // Echo instance
  e := echo.New()

  // Middleware
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())
  e.Use(middleware.CORS())
  e.POST("/createuser",addUser)
  e.Logger.Fatal(e.Start(":4000"))
}

和Vue js fetch脚本

const res = await fetch('https://localhost:4000/createuser',{
    method: 'POST',headers: {
      'Content-type': 'application/json','Access-Control-Allow-Origin': '*',},body: JSON.stringify(nameAndPhone),})

我的 Firefox 控制台在执行时出错

Extraneous request blocked: Single source policy denies reading remote resource at https://localhost:4000/createuser (Reason: Failed to complete CORS request).
Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource.

我的网络标签

Blocked OPTIONS localhost:4000 createuser fetch CORS Failed          0byte
Blocked POST    localhost:4000 createuser fetch NS_ERROR_DOM_BAD_URI 0byte

它在 Postman 中有效,但由于 CORS 而在浏览器中无效。如果我的代码中已经有 e.Use(middleware.CORS()),为什么它不起作用?

解决方法

请看下一个例子。

e := echo.New()
    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
      AllowOrigins: []string{"*"},AllowHeaders: []string{echo.HeaderOrigin,echo.HeaderContentType,echo.HeaderAccept},}))  
,

问题是我是从 https 而不是 http

固定js:

const res = await fetch('http://localhost:4000/createdebter',{
        method: 'POST',headers: {
          'Accept': 'application/json','Content-type': 'application/json',},body: JSON.stringify(nameAndPhone),})