Rumah > pembangunan bahagian belakang > Golang > Mengapa ralat cors tidak diselesaikan?

Mengapa ralat cors tidak diselesaikan?

PHPz
Lepaskan: 2024-02-06 10:09:11
ke hadapan
737 orang telah melayarinya

为什么 cors 错误没有得到解决?

Isi soalan

Cors dibenarkan dalam golang, kodnya adalah seperti berikut

func register() *echo.echo {
    e := echo.new()
    e.get("/swagger/*", echoswagger.wraphandler) // swagger 등록
    validator.registervalidator(e)               // 유효성검사 등록
    e.use(middleware.cors())  // cors 등록
......

package middleware

import (
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func cors() echo.middlewarefunc {
    return middleware.corswithconfig(middleware.corsconfig{
        alloworigins:  []string{"http://localhost:3000"},
        allowmethods:  []string{echo.get, echo.put, echo.post, echo.delete},
        allowheaders:  []string{echo.headerorigin, echo.headercontenttype, echo.headeraccept},
        exposeheaders: []string{echo.headercontentlength},
    })
}
Salin selepas log masuk

Tetapi walaupun saya menghantar permintaan daripada (localhost:3000) dalam projek reaksi, ralat cors tidak berhenti.

func (serverInfo *ServerInfo) ServerStart() {

    var databaseSet database.DatabaseInterface = &mysql.MysqlInfo{} // Database
    databaseSet.InitDatabase()                                      // 데이터베이스를 초기화합니다
    hosts := map[string]*Host{}                                     // Hosts

    // API
    hosts[fmt.Sprintf("%v.%v:%v", "api.v1", os.Getenv(envkey.SERVER_URL), os.Getenv(envkey.PORT))] = &Host{apiV1Route.Register()}

    // Server
    e := echo.New()
    e.Use(middleware.Logger()) // 로거등록

    e.Any("/*", func(c echo.Context) (err error) {
        req := c.Request()
        res := c.Response()
        host := hosts[req.Host]

        if host == nil {
            err = echo.ErrNotFound
        } else {
            host.Echo.ServeHTTP(res, req)
        }
        return
    })

    // e.Logger.Fatal(e.StartTLS(fmt.Sprintf(":%v", os.Getenv(envkey.PORT)), "housewhale.com+3.pem", "housewhale.com+3-key.pem"))
    e.Logger.Fatal(e.Start(fmt.Sprintf(":%v", os.Getenv(envkey.PORT))))
}
Salin selepas log masuk

Saya telah bermasalah dengan masalah ini selama beberapa hari. Bagaimana untuk menyelesaikannya? Saya telah mencuba semua yang saya temui dalam manual atau di google tetapi ralat cors tidak hilang.


Jawapan betul


Terdapat ralat, tiada ralat yang dilampirkan, saya lampirkan ralat berikut dan masalah telah diselesaikan pada masa itu.

access to fetch at 'https://api.v1.localhsot:8081/auth/retoken' from origin 'http://localhost:3000' has been blocked by cors policy: response to preflight request doesn't pass access control check: no 'access-control-allow-origin' header is present on the requested resource. if an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with cors disabled.
Salin selepas log masuk

Cors tidak dibenarkan dengan betul di bahagian pelayan, sila konfigurasikan bahagian pelayan agar sepadan dengan permintaan

Sebagai contoh, jika pelanggan menghantar data kebenaran kepada pengepala, pelayan membenarkan kebenaran dalam pengepala juga. Sediakan permintaan yang diperlukan seperti ini

package middleware

import (
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func Cors() echo.MiddlewareFunc {
    return middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOrigins:     []string{"http://localhost:3000"},
        AllowMethods:     []string{echo.GET, echo.PUT, echo.POST, echo.DELETE},
        AllowHeaders:     []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept, echo.HeaderAuthorization},
        ExposeHeaders:    []string{echo.HeaderContentLength, echo.HeaderSetCookie},
        AllowCredentials: true, // Add this line to allow credentials
    })
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa ralat cors tidak diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan