>  기사  >  백엔드 개발  >  PHP에서 CORS 헤더를 설정했는데 왜 여전히 \"Access-Control-Allow-Origin\" 오류가 발생합니까?

PHP에서 CORS 헤더를 설정했는데 왜 여전히 \"Access-Control-Allow-Origin\" 오류가 발생합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 02:22:03626검색

Why am I still getting an

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.