최근 ThinkPHP 프레임워크를 사용하여 프로젝트를 개발할 때 몇 가지 이상한 문제에 직면했습니다. 우리 프로젝트는 사진 표시 웹사이트이지만 브라우저에서는 일부 사진이 표시되지 않으며 콘솔에 오류 메시지도 표시되지 않습니다. 검색과 실험을 통해 결국 이것이 크로스 도메인으로 인해 발생하는 문제라는 것을 발견했습니다. 이번 포스팅에서는 문제를 식별하고 해결하는 프로세스를 공유하겠습니다.
먼저 크로스 도메인이 무엇인지 알아보겠습니다. JS, CSS, Ajax, 이미지 등 한 웹사이트의 리소스가 다른 웹사이트의 리소스에 액세스하도록 요청하면 동일한 웹사이트의 제한으로 인해 차단됩니다. 원산지 정책. 동일 출처 정책은 매우 중요한 보안 기능으로, 웹 사이트가 동일한 도메인 이름, 프로토콜 및 포트를 가진 리소스에만 액세스하도록 제한합니다.
저희 프로젝트에서는 타사 라이브러리를 사용하여 이미지를 로드하고, 이 라이브러리는 서로 다른 도메인 이름을 가진 주소를 사용하여 이미지를 저장합니다. 따라서 브라우저에서는 도메인을 넘을 때 이미지가 제대로 표시되지 않습니다.
이 문제를 해결하려면 서버 측에서 몇 가지 설정을 해야 합니다. 가장 일반적인 해결책은 서버 측에 CORS(Cross-Origin Resource Sharing)를 설정하는 것입니다. CORS를 사용하면 서버가 클라이언트 요청에 응답할 때 리소스에 액세스할 수 있는 도메인 이름을 지정할 수 있습니다.
ThinkPHP 프레임워크에서는 index.php 파일에 다음 코드를 추가하여 CORS를 구현할 수 있습니다.
header('Access-Control-Allow-Origin:*'); //允许所有来源访问 header('Access-Control-Allow-Method:POST,GET'); //允许访问的方式
이 코드는 모든 소스가 리소스에 액세스할 수 있도록 허용하고 POST 및 GET 액세스를 허용합니다.
여기서 주목해야 할 중요한 점은 모든 요청이 이 설정을 사용할 수 있도록 이 코드를 index.php의 상단에 배치해야 한다는 것입니다.
CORS 설정 외에도 다른 방법을 사용하여 도메인 간 문제를 해결할 수도 있습니다. 예를 들어 JSONP(JSON with Padding)는 도메인 간 문제를 해결하는 데 적합한 방법입니다. 페이지에 스크립트 태그를 추가하면 액세스해야 하는 데이터가 함수로 패키징된 다음 반환된 결과가 수신됩니다. 다른 웹사이트.
ThinkPHP 프레임워크에서는 다음 코드를 사용하여 JSONP 메서드를 생성할 수 있습니다.
$callback = isset($_GET['callback']) ? $_GET['callback'] : 'callback'; $data = array('name' => 'test', 'age' => 18); echo $callback . '(' . json_encode($data) . ')';
여기서 먼저 GET 매개변수에 콜백 매개변수가 있는지 확인하고, 존재한다면 이 매개변수를 함수 이름으로 사용합니다. 그런 다음 반환할 데이터를 JSON 형식으로 직렬화하고 콜백 함수에 추가합니다. 마지막으로 데이터를 반환할 때 데이터와 함께 함수를 브라우저에 반환합니다.
요약하자면 도메인 간 문제는 일반적으로 개발 중에 매우 일반적인 문제입니다. 하지만 서버 측 설정을 통해 이 문제를 해결할 수 있습니다. ThinkPHP 프레임워크에서는 CORS 또는 JSONP를 사용하여 도메인 간 문제를 해결할 수 있습니다. 이 글이 도움이 필요한 독자들에게 도움이 되기를 바랍니다.
위 내용은 thinkphp 이미지가 도메인에 걸쳐 표시되지 않는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!