Rumah > pembangunan bahagian belakang > Golang > Mengapa Pelayan API Subdomain Saya Melemparkan Ralat CORS?

Mengapa Pelayan API Subdomain Saya Melemparkan Ralat CORS?

Patricia Arquette
Lepaskan: 2024-10-30 01:39:03
asal
813 orang telah melayarinya

Why Is My Subdomain's API Server Throwing a CORS Error?

Gagal Mengakses Subdomain daripada Domain Utama: Pengepala 'Access-Control-Allow-Origin' Tiada

Ringkasan Masalah

Apabila mengakses pelayan API subdomain daripada domain utama, ralat dasar CORS ditemui: "Tiada pengepala 'Access-Control-Allow-Origin' hadir pada sumber yang diminta."

Pertimbangan Semakan Pra-Penerbangan

Sebelum menyelidiki kemungkinan penyelesaian, adalah penting untuk mengesahkan permintaan pra-penerbangan menggunakan Chrome DevTools untuk menolak isu caching dan mengenal pasti jenis permintaan yang sesuai untuk penyelesaian masalah selanjutnya.

Langkah Diagnostik

  • Periksa Tetapan CORS: Pastikan kod sebelah pelayan melaksanakan CORS dengan betul dan menambah pengepala необхідné.
  • Semak Pemintas Proksi: Tentukan sama ada proksi terbalik mengganggu penghantaran pengepala Access-Control-Allow-Origin.
  • Periksa Penerapan Aplikasi: Sahkan bahawa aplikasi yang mengehos pelayan API digunakan dengan betul, kerana ralat 502 Bad Gateway mungkin menunjukkan isu penggunaan.

Contoh Kod

Sementara Pilihan 1 berfungsi apa adanya, contoh berikut bertujuan untuk menunjukkan pendekatan yang berbeza untuk menyelesaikan isu CORS:

Pilihan 2: Perisian Tengah CORS Tersuai

<code class="go">package main

import (
    &quot;log&quot;
    &quot;net/http&quot;

    &quot;github.com/gin-gonic/gin&quot;
)

func main() {
    r := gin.New()
    r.Use(CORS())

    r.POST(&quot;/api/v1/users&quot;, func(ctx *gin.Context) {
        ctx.JSON(http.StatusOK, gin.H{&quot;message&quot;: &quot;OK&quot;})
    })

    if err := r.Run(); err != nil {
        log.Printf(&quot;failed to start server: %v&quot;, err)
    }
}

func CORS() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Writer.Header().Set(&quot;Access-Control-Allow-Origin&quot;, &quot;*&quot;)
        c.Writer.Header().Set(&quot;Access-Control-Allow-Credentials&quot;, &quot;true&quot;)
        c.Writer.Header().Set(&quot;Access-Control-Allow-Headers&quot;, &quot;Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With&quot;)
        c.Writer.Header().Set(&quot;Access-Control-Max-Age&quot;, &quot;86400&quot;)
        if c.Request.Method == http.MethodOptions {
            c.AbortWithStatus(http.StatusNoContent)
            return
        }
        c.Next()
    }
}</code>
Salin selepas log masuk

Pilihan 3: CORS Middleware daripada Perpustakaan Luar

<code class="go">package main

import (
    &quot;log&quot;

    &quot;github.com/gin-contrib/cors&quot;
    &quot;github.com/gin-gonic/gin&quot;
)

func main() {
    router := gin.Default()

    router.Use(cors.New(cors.Config{
        AllowOrigins:     []string{&quot;*&quot;},
        AllowMethods:     []string{&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;, &quot;DELETE&quot;},
        AllowHeaders:     []string{&quot;*&quot;},
        ExposeHeaders:    []string{&quot;Content-Length&quot;},
        AllowCredentials: true,
        MaxAge:           86400,
    }))

    router.GET(&quot;/api/v1/users&quot;, func(c *gin.Context) {
        c.JSON(200, gin.H{&quot;message&quot;: &quot;OK&quot;})
    })

    if err := router.Run(); err != nil {
        log.Printf(&quot;failed to start server: %v&quot;, err)
    }
}</code>
Salin selepas log masuk

Resolusi

Dalam kes khusus masalah yang diberikan, didapati bahawa isu itu berpunca daripada Muatan AWS yang salah Tetapan Kumpulan Sasaran Pengimbang, khususnya salah konfigurasi protokol sebagai HTTPS apabila sijil hanya diberikan kepada Laluan 53 dan ALB. Menukar protokol kepada HTTP telah menyelesaikan masalah.

Atas ialah kandungan terperinci Mengapa Pelayan API Subdomain Saya Melemparkan Ralat CORS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan