JSONP
JSONP (JSON with Padding)는 CORS 지원 이전의 브라우저에서 크로스 도메인 요청을 만들기 위한 기법입니다. JSON 응답을 JavaScript 함수 호출로 감싸는 방식으로 작동합니다. 브라우저는 동일 출처 정책의 적용을 받지 않는 <script> 태그를 통해 응답을 로드하며, 래핑 함수가 데이터를 인수로 받아 실행됩니다.
c.JSONP()를 호출하면, Gin은 callback 쿼리 매개변수를 확인합니다. 존재하면 응답 바디가 callbackName({"foo":"bar"})으로 래핑되고 Content-Type은 application/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 응답의 차이를 확인하세요:
# 콜백 포함 -- JavaScript를 반환curl "http://localhost:8080/JSONP?callback=handleData"# 출력: handleData({"foo":"bar"});
# 콜백 없이 -- 일반 JSON을 반환curl "http://localhost:8080/JSONP"# 출력: {"foo":"bar"}