2015-02-03 18 views
2

REST 기반 상호 도메인 요청을 시도하고 있습니다. 두 도메인 모두 동일한 서버에서 호스팅됩니다.PHP에서 CORS 오류를주는 사용자 지정 헤더

domain1 : http://testdata.local - domain2에서 REST API를 요청하는 애플리케이션 용.

도메인 2 : http://api.testdata.local -

각 나머지 API 호출 도메인 2에 필요한 일부 사용자 지정 헤더가 DOMAIN1에서 REST API 호출을 처리합니다.

내가 아약스를 통해 domain2에 대한 API 요청을 요청하면 CORS 차단 오류가 발생합니다.

PHP 코드를 도메인 2에 샘플 API 요청에 대해 : domain1을에서

class mytest{ 

    public function setOriginPolicy() { 
     if (isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] == 'http://testdata.local') { 
      header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
      header('Access-Control-Allow-Credentials: true'); 
      header('Access-Control-Max-Age: 86400'); // cache for 1 day 
     } 
     // Access-Control headers are received during OPTIONS requests 
     if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
      if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) { 
       header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); 
      } 
      if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) { 
       header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 
      } 

      exit(0); 
     } 
    } 

    public function testrequest(){ 
      $this->setOriginPolicy 
      $result['config_status'] = 1; 
      $result['config_msg'] = "request ok"; 
      echo json_encode($result); 

    } 
} 

AJAX 전화 :

var url = "http://api.testdata.local/mytest/testrequest"; 
$.ajax({ 
    type: 'GET', 
    url: url, 
    async: true, 
    crossDomain:true, 
    //jsonpCallback: 'jsonCallback', 
    contentType: "application/x-www-form-urlencoded", 
    headers:{"API_KEY":"andapikey","APP_VERSION":"1.0","CONFIG_VERSION":"1.0","AUTH_TOKEN": "4a6b1e610e81fa19c76a557049e9fa19" 
    }, 
    /*beforeSend: function(xhr) { 
     xhr.setRequestHeader("API_KEY", "andapikey"); 
     xhr.setRequestHeader("APP_VERSION", "1.0"); 
     xhr.setRequestHeader("CONFIG_VERSION", "1.0"); 
     xhr.setRequestHeader("AUTH_TOKEN", "4a6b1e610e81fa19c76a557049e9fa19"); 
    },*/ 
    success: function(json) { 
     console.log(json); 
    }, 
    error: function(e) { 
     console.log(e.message); 
    } 
}); 

아래 내가 노력하고 내 코드입니다 헤더를 비활성화하면 응답을 얻고 있습니다.

+0

입니다. – robbmj

답변

1

솔루션 제안하십시오 :

추가 된 사용자 정의 헤더에서 htaccess로 원산지 헤더를 허용합니다.

은 벤자민에 대한 링크를 http://benjaminhorn.io/code/setting-cors-cross-origin-resource-sharing-on-apache-with-correct-response-headers-allowing-everything-through/

특별 감사를 Follwed.

다음은 내가 url`, 나는 그 문제가 아니었다 희망 '에 할당 된 문자열을 폐쇄 내 htaccess로

Header always set Access-Control-Allow-Origin "http://testdata.local" 
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" 
Header always set Access-Control-Max-Age "1000" 
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin,API_KEY,APP_VERSION,CONFIG_VERSION,AUTH_TOKEN" 
<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 
    RewriteCond %{REQUEST_METHOD} OPTIONS 
    RewriteRule ^(.*)$ $1 [R=200,L] 

    # Redirect Trailing Slashes... 
    RewriteCond %{REQUEST_METHOD} !OPTIONS 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_METHOD} !OPTIONS 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule>