이 기사에서는 주로 도메인 간 액세스를 달성하기 위한 Ajax 설정 Access-Control-Allow-Origin을 소개합니다. 이는 매우 훌륭하고 참조 가치가 있습니다. 도움이 필요한 친구는 이를 참조할 수 있습니다.
ajax 도메인 간 액세스는 오래된 문제입니다. 많은 솔루션이 있지만 가장 일반적으로 사용되는 방법은 JSONP 방법입니다. JSONP 방법은 비공식 방법이며 이 방법은 POST 방법만큼 안전하지 않은 GET 방법만 지원합니다.
jQuery의 jsonp 메소드를 사용하고 유형을 POST로 설정해도 자동으로 GET으로 변경됩니다.
공식 문제 설명:
“script”: 응답을 JavaScript로 평가하고 이를 일반 텍스트로 반환합니다. 캐시 옵션이 아닌 경우 쿼리 문자열 매개변수 "_=[TIMESTAMP]"를 URL에 추가하여 캐싱을 비활성화합니다. 참고: 이렇게 하면 원격 도메인 요청에 대한 POST가 GET으로 전환됩니다.
도메인 전체에서 POST를 사용하는 경우 이를 달성하기 위해 숨겨진 iframe을 생성할 수 있습니다. 원칙은 ajax 이미지 업로드와 동일합니다. 하지만 이것은 더 번거로운 일이 될 것입니다.
따라서 Access-Control-Allow-Origin을 설정하여 도메인 간 액세스를 달성하는 것이 비교적 간단합니다.
예를 들어 클라이언트의 도메인 이름은 www.client.com이고 요청한 도메인 이름은 www.server.com
Ajax를 사용하여 직접 액세스하면 다음 오류가 발생합니다
XMLHttpRequest가 http를 로드할 수 없습니다. ://www.server.com /server.PHP. 요청한 리소스에 'Access-Control-Allow-Origin' 헤더가 없습니다. 따라서 'http://www.client.com' 원본에는 액세스가 허용되지 않습니다.
요청된 응답 헤더에서
// 指定允许其他域名访问 header('Access-Control-Allow-Origin:*'); // 响应类型 header('Access-Control-Allow-Methods:POST'); // 响应头设置 header('Access-Control-Allow-Headers:x-requested-with,content-type');
에 가입하여 Ajax POST 도메인 간 액세스를 달성하세요.
코드는 다음과 같습니다.
client.html 경로: http://www.client.com/client.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title> 跨域测试 </title> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> </head> <body> <p id="show"></p> <script type="text/javascript"> $.post("http://www.server.com/server.php",{name:"fdipzone",gender:"male"}) .done(function(data){ document.getElementById("show").innerHTML = data.name + ' ' + data.gender; }); </script> </body> </html>
server.php 경로: http://www.server.com/server.php
<?php $ret = array( 'name' => isset($_POST['name'])? $_POST['name'] : '', 'gender' => isset($_POST['gender'])? $_POST['gender'] : '' ); header('content-type:application:json;charset=utf8'); header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); echo json_encode($ret); ?>
Access -Control-Allow-Origin:*은 모든 도메인 이름에서 도메인 간 액세스를 허용한다는 의미
교차 도메인 액세스를 허용하기 위해 도메인 이름을 지정해야 하는 경우 Access-Control-Allow-Origin을 변경하면 됩니다. * Access-Control-Allow- Origin:허용된 도메인 이름
예: header('Access-Control-Allow-Origin:http://www.client.com');
필요한 경우 여러 도메인 이름을 설정접근을 허용하려면 여기에서 사용해야 합니다. php
로 처리하세요. 예를 들어 www.client.com과 www.client2.com이 도메인 간 액세스
server.php를 허용하고 변경하세요. to
<?php $ret = array( 'name' => isset($_POST['name'])? $_POST['name'] : '', 'gender' => isset($_POST['gender'])? $_POST['gender'] : '' ); header('content-type:application:json;charset=utf8'); $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'http://www.client.com', 'http://www.client2.com' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); } echo json_encode($ret); ?>
위 내용은 모두를 위해 제가 정리한 내용입니다. 앞으로 모든 분들께 도움이 되기를 바랍니다.
관련 기사:
spring mvc 반환 json 데이터를 ajaxparseerror 문제
로 해결합니다. 백엔드와 상호 작용하는 프런트 엔드의 다양한 자세 ajax( 사진과 텍스트) 튜토리얼)
위 내용은 도메인 간 액세스를 달성하려면 Access-Control-Allow-Origin을 설정하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!