JSONP
JSONP (JSON مع الحشو) هي تقنية لإجراء طلبات عبر النطاقات من المتصفحات التي سبقت دعم CORS. تعمل عن طريق لف استجابة JSON في استدعاء دالة JavaScript. يحمّل المتصفح الاستجابة عبر علامة <script>، التي لا تخضع لسياسة نفس المصدر، وتُنفذ الدالة الملفوفة مع البيانات كوسيطتها.
عند استدعاء c.JSONP()، يتحقق Gin من معامل استعلام callback. إذا كان موجوداً، يُلف جسم الاستجابة كـ callbackName({"foo":"bar"}) مع Content-Type من application/javascript. إذا لم يُقدم callback، تتصرف الاستجابة مثل استدعاء 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")}اختبرها باستخدام curl لرؤية الفرق بين استجابات JSONP وJSON العادية:
# 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"}