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:
# With callback -- returns JavaScriptcurl "http://localhost:8080/JSONP?callback=handleData"# Output: handleData({"foo":"bar"});
# Without callback -- returns plain JSONcurl "http://localhost:8080/JSONP"# Output: {"foo":"bar"}