개요
PHP에는 $http_response_header라는 특별한 슈퍼글로벌(superglobal) 배열이 존재합니다. 이 배열은 file_get_contents()와 같은 함수를 통해 HTTP 요청을 보냈을 때, 서버가 반환한 HTTP 응답 헤더(response header)들이 자동으로 저장되는 공간입니다.
get_headers() 함수가 별도의 호출을 통해 헤더 정보를 가져오는 것과 달리, $http_response_header는 실제 요청이 발생하는 순간 PHP가 자동으로 생성해 주기 때문에 별도의 추가 작업 없이 바로 활용할 수 있다는 장점이 있습니다.
$http_response_header의 주요 특징
- 자동 생성: HTTP 래퍼(wrapper)를 사용하는 요청(
file_get_contents(),fopen()등)이 성공하면 자동으로 채워집니다. - 로컬 스코프 생성: 해당 배열은 전역 범위가 아닌 현재 실행 중인 지역 스코프(local scope)에 생성됩니다. 따라서 함수 내부에서 요청을 수행했다면 그 함수 안에서만 접근할 수 있습니다.
- 리다이렉션 처리: 요청 도중 리다이렉션이 발생하면, 각 단계의 응답 헤더가 순서대로 모두 배열에 누적됩니다.
사용 예제
아래 예제는 file_get_contents()로 로컬 서버에 요청을 보낸 후, 자동 생성된 $http_response_header 배열의 내용을 하나씩 출력하는 코드입니다.
<?php
file_get_contents("https://localhost");
$arr = $http_response_header;
foreach ($arr as $key => $val)
echo "<p>$key => $val </p>";
?>실행 결과
브라우저에는 아래와 유사한 형태로 응답 헤더 목록이 표시됩니다.
0 => HTTP/1.1 302 Found 1 => Date: Tue, 08 Sep 2020 14:49:24 GMT 2 => Server: Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.32 3 => X-Powered-By: PHP/7.1.32 4 => Location: https://localhost/dashboard/ 5 => Content-Length: 0 6 => Connection: close 7 => Content-Type: text/html; charset=UTF-8 8 => HTTP/1.1 200 OK 9 => Date: Tue, 08 Sep 2020 14:49:24 GMT 10 => Server: Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.32 11 => Last-Modified: Mon, 02 Sep 2019 15:45:31 GMT 12 => ETag: "1d99-59193dc9c3cc0" 13 => Accept-Ranges: bytes 14 => Content-Length: 7577 15 => Connection: close 16 => Content-Type: text/html
결과 해석
출력 결과를 살펴보면 흥미로운 점을 발견할 수 있습니다. 인덱스 0~7까지는 302 Found(리다이렉션) 응답 헤더이고, 인덱스 8부터는 리다이렉션된 최종 페이지의 200 OK 응답 헤더입니다. 즉, 요청 과정에서 리다이렉션이 한 번 발생했으며, 두 단계의 응답 헤더가 모두 배열에 순차적으로 저장된 것입니다.
이처럼 $http_response_header를 활용하면 상태 코드, 콘텐츠 타입, 서버 정보 등을 손쉽게 확인할 수 있어, 외부 API 호출 결과 검증이나 디버깅 작업에 매우 유용하게 사용됩니다.