답변:
이것은 매우 광범위한 질문이며 위키 자체를 보증 할 수 있습니다. 두 가지에 관해서도 구글에 꽤 많이 있지만, 몇 가지 핵심 포인트를 칠 수 있다고 생각합니다.
이들 중 어느 것도 문제가되지 않는다면, 나는 당신에게 가장 쉽거나 가장 친숙한 것을 가지고 갈 것입니다. 문제가 있다면 CORS를 사용해보십시오. 더 "현대적인"솔루션이고 JSONP는 해킹에 가깝기 때문에 데이터를 스크립트로 변환하여 도메인 간 제한을 우회합니다. 그러나 CORS에는 일반적으로 더 많은 서버 측 구성이 필요합니다.
jQuery를 사용하고 있다면 CORS가 " 클라이언트 에게 훨씬 더 친숙 하고 구현하기 쉽다 "는 아이디어를 어디에서 내놓을 지 잘 모르겠습니다 . https://gist.github.com/3131951을 참조 하십시오 . jQuery는 JsonP의 세부 사항을 추상화하고 CORS는 실제로 사용중인 기술에 따라 서버 측에서 구현하기가 다소 까다로울 수 있습니다.
저는 최근에 jquery 및 backbone.js를 사용하여 웹 앱을 개발했습니다. jquery 및 backbone.js는 우리가 제어하는 다양한 도메인 간 웹 서비스에서 읽은 후 IE7을 지원해야했고 조금 더 간단했기 때문에 CORS 대신 Json-P를 사용하게되었습니다. 서버 측 (DjangoRestFramework를 사용하여 Django 실행), 클라이언트 측의 jquery와 거의 동일합니다.
당신은 꽤 자리 잡고 있습니다. 레거시 브라우저 (6 년 이상 전에 출시 된 브라우저)를 지원할 필요가 없다면 CORS를 사용하겠습니다.
CORS는 구현하기가 더 쉽습니다. API가 아직 JSONP 또는 CORS를 지원하지 않는 경우 응답 본문을 수정하는 것보다 몇 가지 정적 헤더를 추가하는 것이 더 쉽습니다.
또한 CORS를 사용하여 요청을 캐시하는 것이 더 쉽습니다. 각 JSONP 요청은 memcached 콘텐츠에서도 동적이어야합니다.
JSONP는 여전히 스크립트 태그이므로 어떤 수준의 동기 동작이 발생하더라도 상관 없습니다. CORS는 그렇지 않습니다.
JSONP는 GET 만 될 수 있습니다. 그리고 CORS와 마찬가지로 모든 방법을 사용할 수 있습니다.
마지막으로, jQuery v1.x를 사용하는 경우 일부 일반적인 상황 (예 : 네트워크 오류)에서 JSONP 요청에 대해 error
및 complete
(또는 더 나은 fail
및 always
) 핸들러가 여전히 호출되지 않는다는 점을 고려하십시오 . 물론 해결 방법 (시간 제한 설정, jQuery-JSONP 플러그인)이 있지만 CORS가 덜 성가신다는 것을 알았습니다. 특히 도메인 간 요청이 모바일 장치 (예 : 하이브리드 앱)에서만오고 있으므로 불운 한 브라우저에 대한 지원이 필요하지 않습니다.
웹 API는 Windows 인증을 사용하는 Safari (iOS 9.1)에서 작동하지 않았습니다. Safari + iOS 8.4에서 작동했습니다. JSONP로 변경했을 때 Safari가 다시 작동하기 시작했습니다. 자세한 내용은 이 링크 를 확인 하십시오.