동일 원산지 정책
JavaScript 및 ActionScript와 같은 클라이언트 측 프로그래밍 언어에서 동일 출처 정책은 매우 중요한 보안 개념으로, 데이터 보안을 보장하는 데 매우 중요합니다. 동일 출처 정책은 교차 도메인 스크립트가 격리되도록 규정합니다. 한 도메인의 스크립트는 다른 도메인의 대부분의 속성과 메서드에 액세스하고 작동할 수 없습니다. 그렇다면 동일한 도메인은 무엇이고 다른 도메인은 무엇입니까? 두 도메인이 동일한 프로토콜(예: http), 동일한 포트(예: 80), 동일한 호스트(예: www.example.org)를 갖는 경우 두 도메인을 동일한 도메인으로 간주할 수 있습니다. 예를 들어 http://www.example.org/index.html과 http://www.example.org/sub/index.html은 동일한 도메인에 있는 반면, http://www.example.org, https는 ://www .example.org, http://www.example.org:8080, http://sub.example.org 중 두 개는 교차 도메인을 구성합니다. 동일 출처 정책은 파일 프로토콜에 따라 스크립트의 액세스 권한을 제한하는 것과 같은 몇 가지 특별한 상황도 처리해야 합니다. 로컬 HTML 파일은 파일 프로토콜을 통해 브라우저에서 열립니다. 스크립트가 파일 프로토콜을 통해 하드 디스크의 다른 파일에 액세스할 수 있으면 현재 IE8에도 이러한 위험이 있습니다.
동일 원본 정책의 영향을 받아 도메인 간 리소스 공유가 제한됩니다. 그러나 사람들의 실천과 브라우저의 발전으로 인해 현재 크로스 도메인 요청 기술에 대한 귀중한 경험이 많이 축적되고 축적되어 있습니다. 여기서는 도메인 간 리소스 공유를 두 가지 유형으로 나누었습니다. 하나는 단방향 데이터 요청이고 다른 하나는 양방향 메시지 통신입니다. 다음으로, 몇 가지 일반적인 교차 도메인 방법을 나열하겠습니다. 다음 교차 도메인 예제의 소스 코드는 여기에서 얻을 수 있습니다.
단방향 교차 도메인
JSONP
JSONP(JSON with Padding)는 간단하고 효율적인 도메인 간 방법입니다. HTML의 스크립트 태그는 다른 도메인에서 JavaScript를 로드하고 실행할 수 있으므로 스크립트 태그를 통해 다른 도메인의 리소스를 동적으로 로드할 수 있습니다. 예를 들어, 도메인 A의 페이지A에서 도메인 B의 데이터를 로드하려는 경우 도메인 B의 페이지B에서 페이지A에 필요한 데이터를 JavaScript 형식으로 선언한 다음 스크립트 태그를 사용합니다. pageA에서 pageB를 로드한 다음 pageB에서 스크립트가 실행됩니다. JSONP는 이를 기반으로 콜백 함수를 추가합니다. pageB가 로드된 후 pageA에 정의된 함수가 실행되고 필요한 데이터가 매개변수 형태로 함수에 전달됩니다. JSONP는 구현하기 쉽지만 일부 보안 위험도 있습니다. 타사 스크립트를 마음대로 실행하면 페이지 콘텐츠를 변조하고 민감한 데이터를 가로챌 수 있습니다. 그러나 신뢰할 수 있는 당사자 간에 데이터를 전송할 때는 JSONP가 매우 적합한 선택입니다.
플래시 URL로더
Flash에는 자체 보안 정책 세트가 있습니다. 서버는 crossdomain.xml 파일을 사용하여 액세스할 수 있는 도메인 SWF 파일을 선언할 수 있으며, SWF는 API를 사용하여 로드할 수 있는 도메인을 결정할 수도 있습니다. 도메인 www.a.com에서 도메인 www.b.com의 데이터를 요청하는 등 도메인 전체의 리소스에 액세스할 때 Flash를 사용하여 HTTP 요청을 보낼 수 있습니다. 먼저 도메인 www.b.com(수동으로 생성할 필요가 없는 경우 일반적으로 루트 디렉터리에 저장됨)에서 crossdomain.xml을 수정하고 www.a.com을 화이트리스트에 추가합니다. 둘째, Flash URLLoader를 통해 HTTP 요청을 보내고 마지막으로 Flash API를 통해 응답 결과를 JavaScript로 전달합니다. Flash URLLoader는 매우 일반적인 크로스 도메인 솔루션이지만 iOS를 지원해야 하는 경우 이 솔루션은 아무 것도 할 수 없습니다.
접근 제어
액세스 제어는 현재 일부 브라우저에서만 지원됩니다. 이러한 브라우저는 도메인 간 HTTP 요청을 보낼 수 있습니다(Firefox, Google Chrome 등은 XMLHTTPRequest를 통해 구현되고 IE8은 XDomainRequest를 통해 구현됩니다). ) 요청에 대한 응답에는 요청된 도메인의 접근성을 선언하는 Access-Control-Allow-Origin HTTP 응답 헤더가 포함되어야 합니다. 예를 들어, www.a.com은 www.b.com 아래의 Asset.php에 도메인 간 HTTP 요청을 보내고, Asset.php는 다음 응답 헤더를 추가해야 합니다.
header("액세스 제어-허용-원본: http://www.a.com");