질문 : JSONP 란 무엇이며 왜 생성 되었습니까?
JSON은 이해하지만 JSONP는 이해하지 못합니다. JSON에 대한 Wikipedia의 문서 는 JSONP의 상위 검색 결과였습니다. 다음과 같이 말합니다.
JSONP 또는 "JSON with padding"은 접두사가 호출 자체의 입력 인수로 지정되는 JSON 확장입니다.
어? 무슨 전화? 그건 말이 안 돼. JSON은 데이터 형식입니다. 전화가 없습니다.
두 번째 검색 결과 는 JSONP에 대해 다음과 같이 쓴 Remy 라는 사람의 것입니다.
JSONP는 스크립트 태그 삽입으로 서버의 응답을 사용자가 지정한 함수로 전달합니다.
나는 그것을 이해할 수 있지만 여전히 말이되지 않습니다.
그렇다면 JSONP는 무엇입니까? 왜 생성 되었습니까 (어떤 문제가 해결됩니까)? 그리고 왜 그것을 사용합니까?
부록 : 방금 Wikipedia 에 JSONP에 대한 새 페이지를 만들었습니다. 이제 jvenema 의 답변을 기반으로 JSONP에 대한 명확하고 철저한 설명이 있습니다.
답변
사실 너무 복잡하지 않습니다 ...
당신이 도메인에있어 말 example.com
, 당신은 도메인에 대한 요청을 만들고 싶어 example.net
. 이렇게하려면, 당신은 노 더 browserland 대부분의 크로스 도메인 경계 할 필요가 없습니다.
이 제한을 우회하는 항목은 <script>
태그입니다. 당신은 스크립트 태그를 사용하는 경우, 도메인 제한이 무시되지만, 정상적인 상황에서, 당신이 정말로 결과에 아무것도 할 수 없어, 스크립트는 평가됩니다.
JSONP
입력하십시오. JSONP가 활성화 된 서버에 요청하면 서버에 페이지에 대해 약간 알려주는 특수 매개 변수를 전달합니다. 이렇게하면 서버가 페이지가 처리 할 수있는 방식으로 응답을 멋지게 마무리 할 수 있습니다.
예를 들어 서버가 JSONP 기능을 활성화하기 위해 callback
이라는 매개 변수를 예상한다고 가정 해보십시오. 그러면 귀하의 요청은 다음과 같습니다.
http://www.example.net/sample.aspx?callback=mycallback
JSONP가 없으면 다음과 같이 몇 가지 기본 JavaScript 객체를 반환 할 수 있습니다.
{ foo: 'bar' }
그러나 JSONP를 사용하면 서버가 "콜백"매개 변수를 수신하면 결과를 약간 다르게 래핑하여 다음과 같은 결과를 반환합니다.
mycallback({ foo: 'bar' });
보시다시피 이제 지정한 메서드를 호출합니다. 따라서 페이지에서 콜백 함수를 정의합니다.
mycallback = function(data){
alert(data.foo);
};
이제 스크립트가로드되면 평가되고 함수가 실행됩니다. Voila, 교차 도메인 요청!
또한 JSONP의 한 가지 주요 문제에 주목할 가치가 있습니다. 요청에 대한 많은 제어권을 잃는다는 것입니다. 예를 들어, 적절한 오류 코드를 되 찾는 "좋은"방법은 없습니다. 결과적으로 타이머를 사용하여 요청 등을 모니터링하게되는데 이는 항상 약간 의심스러운 일입니다. JSONRequest에 대한 제안은 도메인 간 스크립팅을 허용하고 보안을 유지하며 요청을 적절히 제어 할 수있는 훌륭한 솔루션입니다.
요즘 (2015), CORS 는 JSONRequest에 비해 권장되는 접근 방식입니다. JSONP는 이전 브라우저 지원에 여전히 유용하지만 CORS가 더 나은 선택이 아니라면 보안 관련 사항을 고려할 때 유용합니다.
출처 : https://stackoverflow.com/questions/2067472/what-is-jsonp-and-why-was-it-created
'개발관련 > other' 카테고리의 다른 글
React.js 인라인 스타일 모범 사례 (0) | 2021.09.27 |
---|---|
Chrome 자동 완성 사용 중지 (0) | 2021.09.27 |
Ruby on Rails 서버 옵션 (0) | 2021.09.17 |
덜 알려졌지만 유용한 데이터 구조에 대해서 (0) | 2021.09.17 |
이미 존재하는 Docker 컨테이너에서 명령을 실행 시키는 방법 (0) | 2021.09.16 |