GoLang에서 CORS 활성화

Sheeraz Gul 2023년6월20일
  1. 고랭 CORS
  2. GoLang에서 CORS 활성화
  3. GoLang의 CORS 패키지
  4. Go에서 CORS와 함께 GETPOST 메서드 사용
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

작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook