JSONP
JSONP (JSON with Padding) adalah teknik untuk membuat permintaan cross-domain dari browser yang belum mendukung CORS. Cara kerjanya adalah membungkus respons JSON dalam pemanggilan fungsi JavaScript. Browser memuat respons melalui tag <script>, yang tidak tunduk pada kebijakan same-origin, dan fungsi pembungkus dieksekusi dengan data sebagai argumennya.
Ketika Anda memanggil c.JSONP(), Gin memeriksa parameter query callback. Jika ada, body respons dibungkus sebagai callbackName({"foo":"bar"}) dengan Content-Type berupa application/javascript. Jika tidak ada callback, respons berperilaku seperti pemanggilan c.JSON() standar.
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")}Uji dengan curl untuk melihat perbedaan antara respons JSONP dan JSON biasa:
# 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"}