>백엔드 개발 >Golang >내 하위 도메인의 API 서버에서 CORS 오류가 발생하는 이유는 무엇입니까?

내 하위 도메인의 API 서버에서 CORS 오류가 발생하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-30 01:39:03804검색

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

기본 도메인에서 하위 도메인에 액세스하지 못함: 'Access-Control-Allow-Origin' 헤더 누락

문제 요약

기본 도메인에서 하위 도메인의 API 서버에 액세스할 때 CORS 정책 오류가 발생합니다. "요청한 리소스에 'Access-Control-Allow-Origin' 헤더가 없습니다."

실행 전 확인 고려 사항

잠재적인 솔루션을 조사하기 전에 Chrome DevTools를 사용하여 실행 전 요청을 확인하여 캐싱 문제를 배제하고 추가 문제 해결을 위한 적절한 요청 유형을 식별하는 것이 중요합니다.

진단 단계

  • CORS 설정 검사: 서버측 코드가 CORS를 올바르게 구현하고 необхідné 헤더를 추가하는지 확인하세요.
  • 프록시 차단 확인: 역방향 프록시가 Access-Control-Allow-Origin 헤더의 전송을 방해하는지 확인합니다.
  • 애플리케이션 배포 검사: 502 Bad Gateway 오류는 배포 문제를 나타낼 수 있으므로 API 서버를 호스팅하는 애플리케이션이 올바르게 배포되었는지 확인하세요.

코드 예

옵션 1이 작동하는 동안 있는 그대로 다음 예는 CORS 문제를 해결하기 위한 다양한 접근 방식을 보여주는 것을 목표로 합니다.

옵션 2: 사용자 정의 CORS 미들웨어

<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>

옵션 3: 외부 라이브러리의 CORS 미들웨어

<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>

해결

특정 문제의 경우 잘못된 AWS 로드로 인해 문제가 발생한 것으로 확인되었습니다. Balancer 대상 그룹 설정, 특히 인증서가 Route 53 및 ALB에만 할당된 경우 프로토콜을 HTTPS로 잘못 구성했습니다. 프로토콜을 HTTP로 변경하면 문제가 해결되었습니다.

위 내용은 내 하위 도메인의 API 서버에서 CORS 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.