HOWTO · Go

GoLang에서 CORS 활성화

이 튜토리얼은 GoLang에서 CORS를 활성화하고 사용하는 방법을 보여줍니다.

이 튜토리얼은 GoLang에서 CORS를 활성화하고 사용하는 방법을 보여줍니다.

고랭 CORS

CORS(Cross-Origin Resource Sharing)는 브라우저가 리소스를 로드하고 사용할 수 있는 출처를 정의하는 HTTP 헤더 기반 프로세스입니다. CORS는 페이지의 JS 스크립트가 다른 페이지의 데이터에 액세스할 수 있도록 허용하는 동일 출처 정책 정책을 완화하는 데 사용됩니다.

동일한 출처 정책은 두 웹 페이지가 동일한 출처임을 보장합니다. 이 정책은 악성 문서를 격리하여 보안을 강화하는 데 도움이 됩니다.

CORS는 표에 표시된 대로 헤더를 사용하여 동일한 원본 정책을 완화하는 데 사용됩니다.

머리글 유형 설명
Origin 요구 요청의 출처를 서버에 표시하는 데 사용됩니다.
Access-Control-Request-Method 요구 서버에 대한 요청을 구현하기 위한 HTTP 메서드를 나타내는 데 사용됩니다.
Access-Control-Request-Headers 요구 서버에 대한 요청의 헤더를 나타내는 데 사용됩니다.
Access-Control-Allow-Origin 응답 서버에서 허용하는 원본에 사용됩니다.
Access-Control-Allow-Methods 응답 서버에서 허용하는 쉼표로 구분된 메서드 목록에 사용됩니다.
Access-Control-Allow-Headers 응답 서버에서 허용하는 쉼표로 구분된 헤더 목록에 사용됩니다.
Access-Control-Expose-Headers 응답 클라이언트가 응답에 액세스할 수 있도록 하는 쉼표로 구분된 헤더 목록에 사용됩니다.
Access-Control-Max-Age 응답 비행 전 요청에 대한 응답을 캐시하는 데 걸리는 시간(초)을 서버에 알리는 데 사용됩니다.
Access-Control-Allow-Credentials 응답 서버에 대한 자격 증명을 허용하거나 제한하는 데 사용됩니다.

GoLang에서 CORS 활성화

GoLang의 net/http 패키지를 사용하여 CORS 정책을 구현하는 기능을 Go에서 구현할 수 있습니다. GO에서 CORS를 활성화하려면 단계별 프로세스를 따르십시오.

  • 다른 페이지에서 현재 서버의 리소스에 액세스할 헤더가 포함된 포트 번호를 사용하여 localhost에서 실행되는 애플리케이션을 만듭니다. 헤더를 참조하십시오.
    Response_Writer.Header().Set("Content-Type", "text/plain; charset=utf-8")
    Response_Writer.Header().Set("Access-Control-Allow-Origin", "http://127.0.1.1:5555")
    Response_Writer.Header().Set("Access-Control-Max-Age", "10")
    
  • 보시다시피 CORS 정책을 활성화하여 http://127.0.1.1:5555의 JS 스크립트가 페이지 또는 리소스의 데이터에 액세스할 수 있습니다. 서버에 대한 CORS 정책을 구현할 수 있도록 메서드에 이러한 헤더를 유지하는 것이 좋습니다.
  • 이제 서버에 대한 CORS 정책을 설정합니다. 예를 들어 헤더용 함수는 DelftstackHandler입니다. 이제 다음을 수행하십시오.
    http.HandleFunc("/delftstack", DelftstackHandler)
    log.Fatal(http.ListenAndServe(":3000", nil))
    

log.Fatal(http.ListenAndServe(":3000", nil))은 서버에 대한 CORS 정책을 설정합니다. 이 예제를 구현하고 출력을 살펴보겠습니다.

CORS 정책용 GoLang 파일:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {

    http.HandleFunc("/delftstack", DelftstackHandler)

    log.Println("Listening the request..")
    log.Fatal(http.ListenAndServe(":3000", nil))
}

func DelftstackHandler(Response_Writer http.ResponseWriter, _ *http.Request) {

    Response_Writer.Header().Set("Content-Type", "text/plain; charset=utf-8")
    Response_Writer.Header().Set("Access-Control-Allow-Origin", "http://127.0.1.1:5555")
    Response_Writer.Header().Set("Access-Control-Max-Age", "10")
    fmt.Fprintf(Response_Writer, "Hello, this is delftstack.com!")
}

응답을 위한 HTML/JS 파일:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Delftstack</title>
</head>

<body>

    <script>
        async function doRequest() {
            let localhost_url = 'http://localhost:3000/delftstack';
            let page_response = await fetch(localhost_url);

            if (page_response.ok) {

                let text = await page_response.text();

                return text;
            } else {
                return `HTTP error: ${page_response.status}`;
            }
        }

        doRequest().then(data => {
            document.getElementById("print_output").innerText = data;
        });
    </script>

    <div id="print_output">

    </div>

</body>

</html>

위의 코드는 Hello, this is delftstack.com! 응답을 작성합니다. HTML/JS 페이지의 Go 코드에서.

출력을 참조하십시오.

CORS 정책

GoLang의 CORS 패키지

타사 패키지CORS는 NET/HTTP 핸들러를 정의하여 Cross-Origin Resource Sharing을 구현하는 데 사용됩니다. 이 패키지를 사용하기 전에 설치해야 합니다.

다음 명령을 사용합니다.

go get github.com/rs/cors

CORS 가져오기

성공적으로 설치되면 코드에서 CORS를 사용할 수 있습니다. 간단한 예를 들어 보겠습니다.

package main

import (
    "net/http"

    "github.com/rs/cors"
)

func main() {
    Demo_Mux := http.NewServeMux()
    Demo_Mux.HandleFunc("/", func(Response_Writer http.ResponseWriter, Req *http.Request) {
        Response_Writer.Header().Set("Content-Type", "application/json")
        Response_Writer.Write([]byte("{\"hello!\": \"This is delftstack.com\"}"))
    })

    DemoHandler := cors.Default().Handler(Demo_Mux)
    http.ListenAndServe(":3000", DemoHandler)
}

위의 코드에서 cors.Default()GETPOST와 같은 간단한 메서드로 모든 출처를 허용하는 기본 옵션으로 미들웨어를 설정합니다.

위 코드의 출력을 참조하십시오.

단순 CORS 출력

Go에서 CORS와 함께 GETPOST 메서드 사용

GETPOST 메서드를 사용하여 CORS에서 요청을 보낼 수도 있습니다. AllowedMethods 필드를 사용하여 CORS에서 할당해야 합니다.

예를 보자:

package main

import (
    "net/http"

    "github.com/rs/cors"
)

func main() {

    Demo_Mux := http.NewServeMux()

    Demo_CORS := cors.New(cors.Options{
        AllowedOrigins:   []string{"*"}, //all
        AllowedMethods:   []string{http.MethodPost, http.MethodGet},
        AllowedHeaders:   []string{"*"}, //all
        AllowCredentials: false,         //none
    })

    Demo_Mux.HandleFunc("/delftstack", func(Response_Writer http.ResponseWriter, r *http.Request) {
        Response_Writer.Header().Set("Content-Type", "application/json")
        Response_Writer.Write([]byte("{\"hello!\": \"This is delftstack.com\"}"))
    })

    Demo_Handler := Demo_CORS.Handler(Demo_Mux)
    http.ListenAndServe(":3000", Demo_Handler)
}

위의 코드는 CORS 패키지를 사용하여 정책을 구현하고 GETPOST의 두 메서드를 활성화하여 요청을 보냅니다.

출력을 참조하십시오.

CORS GET POST