컨텐츠로 건너뛰기

JSONP

JSONP (JSON with Padding)는 CORS 지원 이전의 브라우저에서 크로스 도메인 요청을 만들기 위한 기법입니다. JSON 응답을 JavaScript 함수 호출로 감싸는 방식으로 작동합니다. 브라우저는 동일 출처 정책의 적용을 받지 않는 <script> 태그를 통해 응답을 로드하며, 래핑 함수가 데이터를 인수로 받아 실행됩니다.

c.JSONP()를 호출하면, Gin은 callback 쿼리 매개변수를 확인합니다. 존재하면 응답 바디가 callbackName({"foo":"bar"})으로 래핑되고 Content-Typeapplication/javascript가 됩니다. 콜백이 제공되지 않으면 표준 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",
}
// 콜백 이름은 쿼리 문자열에서 읽습니다, 예:
// GET /JSONP?callback=x
// 출력: x({\"foo\":\"bar\"})
c.JSONP(http.StatusOK, data)
})
// 0.0.0.0:8080에서 수신 대기 및 서비스
router.Run(":8080")
}

curl로 테스트하여 JSONP와 일반 JSON 응답의 차이를 확인하세요:

Terminal window
# 콜백 포함 -- JavaScript를 반환
curl "http://localhost:8080/JSONP?callback=handleData"
# 출력: handleData({"foo":"bar"});
# 콜백 없이 -- 일반 JSON을 반환
curl "http://localhost:8080/JSONP"
# 출력: {"foo":"bar"}

참고