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 코드에서.
출력을 참조하십시오.

GoLang의 CORS 패키지
타사 패키지CORS는 NET/HTTP 핸들러를 정의하여 Cross-Origin Resource Sharing을 구현하는 데 사용됩니다. 이 패키지를 사용하기 전에 설치해야 합니다.
다음 명령을 사용합니다.
go get github.com/rs/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()는 GET 및 POST와 같은 간단한 메서드로 모든 출처를 허용하는 기본 옵션으로 미들웨어를 설정합니다.
위 코드의 출력을 참조하십시오.

Go에서 CORS와 함께 GET 및 POST 메서드 사용
GET 및 POST 메서드를 사용하여 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 패키지를 사용하여 정책을 구현하고 GET 및 POST의 두 메서드를 활성화하여 요청을 보냅니다.
출력을 참조하십시오.
