(PHP) HTTP response header 수정 ( redirect, Download Dialog )
response header
header() - Send raw HTTP header
1
void header( string $string [, bool $replace = true [, int $http\_response\_code ]] )
header()
를 사용하면 HTTP response header를 직접 조작할 수 있다. header()
는 반드시 어떤 output을 보내는 코드 이전에 위치해 있어야 한다. empty lines나 spaces가 있어도 안되니 주의. 이것저것 해봤는데 header()
앞에 HTML tag나 어떤 output을 출력하는 코드가 있어도 제대로 동작하는 환경도 있는 듯.
1
2
3
<?PHP
header("HTTP/1.1 404 Not Found"); // Not Found는 안적어도 되는 듯.
?>
redirection
HTTP redirection status code는 301, 302.
1
2
3
4
5
6
<?PHP
// 301은 이렇게 명시적으로 써줘야 보내진다. 생략하면 302가 보내진다.
header( "HTTP/1.1 301 Moved Permanently" );
header('Location: http://www.example.com');
exit; // 반드시 작성해 불필요한 코드의 실행을 막는다.
?>
Download Dialog
Content-type: application/\*
으로 지정하면 해당 페이지를 요청했을 때 브라우저가 파일을 다운로드 하게 된다. 다운로드 받을 파일 이름은 Content-Disposition
에 지정한다. 자세한 내용은RFC2045(MIME) 참고
1
2
3
4
5
$downloadfile = "data.csv";
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$downloadfile");
$result = file\_get\_contents("test.data");
print $result;
서버에 있는 test.data
를 data.csv
라는 이름으로 다운로드 받게 된다.
Caching directives
이렇게 하면 proxy와 client에서 캐시를 사용하지 못하도록 강제할 수 있다. session_cache_limiter() 를 사용하면 자동으로 캐시 설정과 관련된 HTTP header를 만들어준다.
1
2
3
4
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
This post is licensed under CC BY 4.0 by the author.