Lewati ke konten

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:

Terminal window
# 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"}

Lihat juga