>백엔드 개발 >Golang >Beego 프레임워크에서 CORS를 사용하여 도메인 간 문제 해결

Beego 프레임워크에서 CORS를 사용하여 도메인 간 문제 해결

WBOY
WBOY원래의
2023-06-04 19:40:311591검색

웹 애플리케이션이 개발되고 인터넷이 세계화됨에 따라 도메인 간 요청을 수행해야 하는 애플리케이션이 점점 더 많아지고 있습니다. 도메인 간 요청은 프런트 엔드 개발자에게 일반적인 문제이며 이로 인해 애플리케이션이 제대로 작동하지 않을 수 있습니다. 이 경우 원본 간 요청 문제를 해결하는 가장 좋은 방법 중 하나는 CORS를 사용하는 것입니다.

이 기사에서는 CORS를 사용하여 Beego 프레임워크의 도메인 간 문제를 해결하는 방법에 중점을 둘 것입니다.

교차 도메인 요청이란 무엇인가요?

웹 애플리케이션에서 교차 도메인 요청은 한 도메인 이름의 웹 페이지에서 다른 도메인 이름의 서버로 요청을 보내는 것을 의미합니다. 일반적으로 요청 및 응답 데이터는 동일한 도메인에 있습니다. 즉, 동일한 프로토콜, 포트 및 프로토콜 유형을 사용합니다. 그러나 브라우저는 일반적으로 보안상의 이유로 도메인 간 요청을 금지합니다.

프런트엔드와 백엔드가 분리된 프로젝트의 경우 도메인 간 요청 문제가 매우 일반적입니다. 예를 들어 프런트 엔드에서 Vue를 사용하여 애플리케이션을 작성할 때 데이터를 가져오기 위해 특정 백엔드 서버에 Ajax 요청을 보내야 할 수 있습니다. 프런트 엔드 서버와 백엔드 서버가 동일한 도메인 이름 아래에 있지 않으면 요청이 코드 수준에서 올바르게 작성되었더라도 브라우저는 요청을 거부하고 오류를 표시합니다. 이는 도메인 간 요청 문제입니다.

CORS란 무엇인가요?

CORS는 Cross-Origin Resource Sharing의 약어입니다. 이는 웹 애플리케이션이 도메인 간 리소스에 액세스할 수 있도록 하는 HTTP 프로토콜 기반 메커니즘입니다. CORS 메커니즘의 출현은 주로 위에서 언급한 도메인 간 요청 문제를 해결하기 위한 것입니다.

CORS 메커니즘은 브라우저에 의해 구현되며, 추가 HTTP 헤더를 사용하여 교차 출처 리소스에 액세스할 수 있는 소스를 브라우저에 알려줍니다. 요청 시 브라우저는 응답 헤더 정보에 Access-Control-Allow-Origin 필드가 존재하고 이 필드의 값이 요청한 도메인 이름 및 포트 번호와 일치하는 경우 교차를 허용합니다. 도메인 요청.

Beego에서 CORS 사용

Beego에서는 beego-cors 라이브러리를 사용하여 CORS 메커니즘을 구현할 수 있습니다. 다음은 beego-cors 라이브러리를 설치하는 방법입니다.

go get github.com/astaxie/beego/plugins/cors

설치 후 beego-cors 라이브러리를 애플리케이션으로 가져와야 합니다.

import "github.com/astaxie/beego/plugins/cors"

라우터에서 CORS 구성

다음으로 Beego에서 CORS를 사용하는 방법을 소개하겠습니다. 애플리케이션이 새 프로젝트인 경우 애플리케이션을 초기화할 때 다음과 같이 설정할 수 있습니다.

package main

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/plugins/cors"
)

func main() {
    beego.BConfig.Listen.HTTPAddr = "0.0.0.0"
    beego.BConfig.Listen.HTTPPort = 8080

    beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
        AllowOrigins: []string{"*"},
        AllowMethods: []string{"PUT", "PATCH", "GET", "POST", "DELETE", "OPTIONS"},
        AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},
        ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin"},
        AllowCredentials: true,
    }))

    beego.Run()
}

위 코드에서는 InsertFilter 메서드를 사용하여 cors라는 필터를 추가했습니다. 이 필터는 모든 요청에 ​​대해 작동하므로 * 와일드카드를 사용하여 라우터를 지정합니다.

Allow 메소드에서는 허용할 소스, 메소드 및 헤더를 구성합니다. 여기서는 모든 출처를 허용하기 위해 *를 사용합니다. 물론 특정 도메인 이름이나 IP 주소를 사용하여 허용된 소스를 제한할 수도 있습니다. 콘텐츠 유형, 권한 부여, 소스 헤더도 실제 상황에 따라 설정됩니다.

AllowCredentials 필드에서 이를 true로 설정했습니다. 이는 도메인 간 요청이 쿠키와 같은 자격 증명 정보를 보낼 수 있음을 의미합니다.

컨트롤러에서 CORS 구성

라우터에서 CORS를 구성하는 것 외에도 컨트롤러에서도 CORS를 구성할 수 있습니다. 이 방법은 각 컨트롤러에 대해 구성할 수 있으며 유연성이 더 높습니다. 자세한 내용은 다음과 같습니다.

package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/plugins/cors"
)

type TestController struct {
    beego.Controller
}

func (c *TestController) Get() {
    origin := c.Ctx.Request.Header.Get("Origin")
    c.Ctx.Output.Header("Access-Control-Allow-Origin", origin)
    c.Ctx.Output.Header("Access-Control-Allow-Credentials", "true")
    c.Ctx.Output.Header("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
    c.Ctx.Output.Header("Access-Control-Allow-Headers", "Content-Type,Authorization")
    c.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")

    c.Ctx.Output.Body([]byte("Hello, world!"))
}

위 코드에서는 먼저 요청 헤더의 Origin 필드를 가져온 후 이를 Access-Control-Allow-Origin 응답 헤더로 설정합니다. 이는 리소스에 액세스할 수 있는 소스를 브라우저에 알려주기 때문에 CORS 메커니즘에서 중요한 단계입니다.

또한 Access-Control-Allow-Credentials, Access-Control-Allow-Methods 및 Access-Control-Allow-Headers 응답 헤더도 설정했습니다. 해당 기능은 자격 증명 정보 전송, 허용된 요청 방법 및 허용된 요청 헤더 필드를 허용하는 것입니다.

마지막으로 Output.Body 메서드를 사용하여 응답 데이터를 클라이언트에 보냅니다.

요약

이 기사에서는 교차 도메인 요청이 무엇인지, CORS 메커니즘과 CORS를 사용하여 Beego 프레임워크에서 교차 도메인 문제를 해결하는 방법을 소개했습니다. 별도의 프런트엔드와 백엔드가 있는 프로젝트의 경우 도메인 간 요청이 일반적인 문제입니다. 이 문제는 CORS 메커니즘을 사용하여 잘 해결할 수 있습니다. CORS 메커니즘은 beego-cors 라이브러리를 사용하여 Beego에서 쉽게 구현할 수 있습니다. 이 기사가 도움이 되기를 바랍니다.

위 내용은 Beego 프레임워크에서 CORS를 사용하여 도메인 간 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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