JSONP
JSONP (JSON com Padding) é uma técnica para fazer requisições cross-domain a partir de navegadores que antecedem o suporte a CORS. Funciona envolvendo uma resposta JSON em uma chamada de função JavaScript. O navegador carrega a resposta via tag <script>, que não está sujeita à política de mesma origem, e a função wrapper executa com os dados como argumento.
Quando você chama c.JSONP(), o Gin verifica um parâmetro de query callback. Se presente, o corpo da resposta é envolvido como callbackName({"foo":"bar"}) com um Content-Type de application/javascript. Se nenhum callback for fornecido, a resposta se comporta como uma chamada c.JSON() padrão.
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")}Teste com curl para ver a diferença entre respostas JSONP e JSON puro:
# 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"}