2015-02-02 4 views
2

사용자의 위치 정보를 등록, 로그인 및 업데이트하기위한 RESTful API를 제공하는 간단한 PHP 앱을 만들었습니다. 필자는 로컬 Apache 서버에서 MySQL 데이터베이스를 사용하여 테스트했으며 모든 것이 좋았습니다.로컬 서버에서 HTTP 요청 헤더를 인식하지만 온라인 서버가 아닌 경우

최근에 PHP 코드를 온라인 호스트 HostGator으로 마이그레이션했습니다. HTTP 요청 헤더를 인식 할 때 코드 일부가 작동을 멈췄습니다. 이처럼 :

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36 
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo 
Authorization: f0cc696e44f76f9638331b5487f4b01d 
Content-Type: application/x-www-form-urlencoded 
Accept: */* 
DNT: 1 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4 

가 나는 헤더 인증에서 API 키를 읽도록 내 PHP 코드를 썼다. 그것은 내 로컬 서버에서 잘 작동하지만 같은 코드가 HostGator에 에 내가 내 로컬 환경에서 기본하지만 명시 적으로 설정해야하는 특정 설정이있을 수 있습니다 의심

를 마이그레이션 할 때 누락 API 키를보고 HostGator. 내가 HTTP 요청을 보내기위한 크롬 확장 고급 나머지 클라이언트을 지역 단절 및 데이터베이스에 대한 XAMPP를 사용하고있어

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [QSA,L] 
AddType application/x-httpd-php54 .php 

: 여기에 내 현재의 .htaccess입니다.

편집 : 내 코드는 헤더 값을 검색 할 수 있습니다 : 당신은 당신이 "인증"헤더를 검색하는 방법에 대한 코드를 게시되지 않은

$headers = apache_request_headers(); 

if (isset($headers['Authorization'])) { 
    $api_key = $headers['Authorization']; 
    // validating api key 
    // ... 
} else { 
    // api key is missing in header 
    // ... 
} 

답변

3

사용자 지정 API 키에 대한 인증 헤더를 사용하고 있습니다. 그것은 의도가 아니며 Apache는 유효하지 않은 인증 헤더를 삭제합니다.
나는 그것을 배웠다. Request headers bag is missing Authorization header in Symfony 2?

그래서 당신이해야 할 일은 실제 사용자 정의 헤더를 사용하는 것이다. 아파치가 폐기되지 않습니다 대신 권한 부여 필드가 다음

X-Apikey: this_is_my_magic_key_that_put_in_the_header 

로 키를 보내 사용하는

$headers['X-Apikey']; 

로 검색 할 수 있습니다.

참고 : 머리글에 새 단어가있는 경우 CamelCase가 표시됩니다. "X-API-KEY"보내기는 "X-Api-Key"가됩니다. 위의 형식을 사용하여 올바르게 검색 할 수 있습니다.

+0

당신은 최고입니다 !!! – TheInvisibleFist

+0

맞춤 헤더에 대한 좋은 통찰력! 대신에, 나는 그것을 _attaccess_ 파일에 대신 추가하여 규칙을 해결했다 :'RewriteRule. * - [E = HTTP_AUTHORIZATION : % {HTTP : Authorization}]' –

0

나는 서버에보고 권 해드립니다 수신 PHP 스크립트의 변수.

$myauthorization=$_SERVER['HTTP_Authorization']; 

작동하지 않습니다. 사용 가능한 것을 확인하십시오.

print_r($_SERVER); 
+0

조언 해 주셔서 감사합니다. print_r을 입력 한 후 "예기치 않은 토큰 A"가 나타납니다 ... 그게 무슨 뜻인지 확실하지 않습니다 – TheInvisibleFist

+0

내 서버 응답이 json에 있었기 때문에 "예기치 않은 토큰 A"오류가 발생했습니다. 이제는 서버가 "Accept-Language"와 같은 일반 헤더를 수신하지만 내 사용자 정의 헤더는 수신하지 않는 것 같습니다. – TheInvisibleFist

+0

print_r ($ headers); –

관련 문제