Habilitar CORS en GoLang
- GoLang CORS
- Habilitar CORS en GoLang
- Paquete CORS en GoLang
-
Use los métodos
GET
yPOST
con CORS en Go
Este tutorial demuestra cómo habilitar y usar CORS en GoLang.
GoLang CORS
El intercambio de recursos de origen cruzado (CORS) es un proceso basado en encabezado HTTP que define los orígenes desde los cuales los navegadores pueden cargar y usar recursos. El CORS se utiliza para relajar la política de Política del mismo origen
, que permite que los scripts JS en una página accedan a datos en otras páginas.
La misma política de origen asegura que ambas páginas web sean del mismo origen. Esta política ayuda a mejorar la seguridad al aislar los documentos maliciosos.
El CORS se usa para relajar la misma política de origen usando los encabezados como se muestra en la tabla:
Encabezamiento | Tipo | Descripción |
---|---|---|
Origin |
Pedido | Se utiliza para indicar el origen de la solicitud al servidor. |
Access-Control-Request-Method |
Pedido | Se utiliza para indicar los métodos HTTP para implementar la solicitud al servidor. |
Access-Control-Request-Headers |
Pedido | Se utiliza para indicar los encabezados en la solicitud al servidor. |
Access-Control-Allow-Origin |
Respuesta | Se utiliza para los orígenes permitidos por el servidor. |
Access-Control-Allow-Methods |
Respuesta | Se utiliza para la lista de métodos separados por comas permitidos por el servidor. |
Access-Control-Allow-Headers |
Respuesta | Se utiliza para la lista de encabezados separados por comas permitidos por el servidor. |
Access-Control-Expose-Headers |
Respuesta | Se utiliza para la lista de encabezados separados por comas que permiten al cliente acceder a una respuesta. |
Access-Control-Max-Age |
Respuesta | Se utiliza para informar al servidor cuántos segundos tarda en almacenar en caché la respuesta a la solicitud previa al vuelo. |
Access-Control-Allow-Credentials |
Respuesta | Se utiliza para permitir o restringir las Credenciales para el servidor. |
Habilitar CORS en GoLang
Podemos implementar una función en Go donde implementamos nuestra política CORS usando el paquete net/http
de GoLang. Siga el proceso paso a paso para habilitar el CORS en GO:
-
Cree una aplicación que se ejecute en el host local con un número de puerto que incluya encabezados que accederán a los recursos del servidor actual desde otras páginas. Ver los encabezados:
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")
-
Como podemos ver, habilitamos nuestra política CORS, por lo que el script JS de
http://127.0.1.1:5555
puede acceder a los datos de nuestras páginas o recursos. Es mejor mantener estos encabezados en un método para que podamos implementar la política CORS para nuestro servidor. -
Ahora configure la política CORS para nuestro servidor; por ejemplo, la función para encabezados es
DelftstackHandler
. Ahora hacer esto:http.HandleFunc("/delftstack", DelftstackHandler) log.Fatal(http.ListenAndServe(":3000", nil))
El log.Fatal(http.ListenAndServe(":3000", nil))
establecerá la política CORS para nuestro servidor. Implementemos este ejemplo y veamos el resultado.
El archivo GoLang para la política CORS:
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!")
}
El archivo HTML/JS para la respuesta:
<!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>
El código anterior escribirá la respuesta ¡Hola, soy delftstack.com!
desde el código Go en la página HTML/JS.
Ver la salida:
Paquete CORS en GoLang
Se utiliza un paquete de terceros CORS para implementar el uso compartido de recursos de origen cruzado mediante la definición del controlador NET/HTTP. Antes de comenzar a usar este paquete, tenemos que instalarlo.
Usa el siguiente comando:
go get github.com/rs/cors
Una vez que se haya instalado correctamente, podemos usar CORS en nuestro código. Probemos un ejemplo simple:
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)
}
En el código anterior, cors.Default()
configurará un middleware con opciones predeterminadas donde se aceptan todos los orígenes con métodos simples como GET
y POST
.
Vea la salida para el código anterior:
Use los métodos GET
y POST
con CORS en Go
También podemos utilizar los métodos GET
y POST
para enviar la petición por CORS. Debemos asignarlos en el CORS usando el campo AllowedMethods
.
Veamos el ejemplo:
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)
}
El código anterior utilizará el paquete CORS para implementar la política y habilitar los dos métodos, GET
y POST
, para enviar la solicitud.
Ver la salida:
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