CORS가 PHP에서 작동하지 않음
CORS(Cross-Origin Resource Sharing)를 사용하면 한 도메인에서 다른 도메인으로 요청할 수 있습니다. 다른 도메인에서 요청이 이루어지면 브라우저는 요청이 허용되는지 여부를 나타내는 특정 헤더에 대한 서버의 응답을 확인합니다.
문제:
개발자가 전송을 시도하고 있습니다. CORS를 사용하여 www.siteone.com에서 www.sitetwo.com으로의 POST 요청. 그러나 서버에 필요한 CORS 헤더를 설정했음에도 불구하고 "Access-control-Allow-Origin 오류"가 발생합니다.
요청/응답 헤더:
Response Headers Connection Keep-Alive Content-Length 487 Content-Type text/html; charset=iso-8859-1 Date Fri, 23 Aug 2013 05:53:20 GMT Keep-Alive timeout=15, max=99 Server Apache/2.2.15 (CentOS) WWW-Authenticate Basic realm="Site two Server - Restricted Area" Request Headers Accept */* Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 Content-Length 43 Content-Type application/x-www-form-urlencoded; charset=UTF-8 Host www.sitetwo.com Origin http://www.siteone.com Referer http://www.siteone.com/index.html User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0
해결책:
문제는 CORS 헤더가 서버에 설정되는 방식에 있습니다. 원본 코드는 다음 헤더만 포함하는 단순화된 접근 방식을 사용했습니다.
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
그러나 CORS 사양에 따르면 요청을 올바르게 처리하려면 보다 포괄적인 접근 방식이 필요합니다. 개발자는 코드를 다음과 같이 업데이트했습니다.
if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } // Your actual code goes here echo "You have CORS!";
이 업데이트된 코드는 기본 CORS 헤더를 설정할 뿐만 아니라 브라우저에서 실제 요청이 허용되는지 여부를 결정하는 데 사용되는 실행 전 OPTIONS 요청도 처리합니다. 이러한 보다 철저한 접근 방식을 구현함으로써 개발자는 애플리케이션에 대해 CORS를 성공적으로 활성화했습니다.
위 내용은 PHP에서 CORS 헤더를 설정했는데 왜 여전히 'Access-Control-Allow-Origin' 오류가 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!