개발관련/other

JSONP 이란 무엇인가?

Rateye 2021. 9. 17. 11:39
728x90
반응형
질문 : 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
728x90
반응형