Post

(PHP) HTTP response header 수정 ( redirect, Download Dialog )

response header

header() - Send raw HTTP header

1
2
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
4
<?PHP
header("HTTP/1.1 404 Not Found");  // Not Found는 안적어도 되는 듯.
?>

redirection

HTTPredirection status code는 301, 302.

1
2
3
4
5
6
7
<?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
6
$downloadfile = "data.csv";
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$downloadfile");
$result = file\_get\_contents("test.data");
print $result;

서버에 있는 test.datadata.csv라는 이름으로 다운로드 받게 된다.

Caching directives

이렇게 하면 proxy와 client에서 캐시를 사용하지 못하도록 강제할 수 있다. session_cache_limiter() 를 사용하면 자동으로 캐시 설정과 관련된 HTTP header를 만들어준다.

1
2
3
4
5
<?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.