Saltearse al contenido

JSONP

JSONP (JSON con Padding) es una técnica para realizar solicitudes entre dominios desde navegadores anteriores al soporte de CORS. Funciona envolviendo una respuesta JSON en una llamada a función JavaScript. El navegador carga la respuesta a través de una etiqueta <script>, que no está sujeta a la política de mismo origen, y la función envolvente se ejecuta con los datos como argumento.

Cuando llamas a c.JSONP(), Gin busca un parámetro de consulta callback. Si está presente, el cuerpo de la respuesta se envuelve como callbackName({"foo":"bar"}) con un Content-Type de application/javascript. Si no se proporciona callback, la respuesta se comporta como una llamada estándar c.JSON().

package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/JSONP", func(c *gin.Context) {
data := map[string]interface{}{
"foo": "bar",
}
// The callback name is read from the query string, e.g.:
// GET /JSONP?callback=x
// Will output : x({\"foo\":\"bar\"})
c.JSONP(http.StatusOK, data)
})
// Listen and serve on 0.0.0.0:8080
router.Run(":8080")
}

Prueba con curl para ver la diferencia entre las respuestas JSONP y JSON estándar:

Ventana de terminal
# With callback -- returns JavaScript
curl "http://localhost:8080/JSONP?callback=handleData"
# Output: handleData({"foo":"bar"});
# Without callback -- returns plain JSON
curl "http://localhost:8080/JSONP"
# Output: {"foo":"bar"}

Ver también