엄범


response header

header() - Send raw HTTP header
```php
void header( string $string [, bool $replace = true [, int $http_response_code ]] )
```
``php header()``를 사용하면 HTTP response header를 직접 조작할 수 있다.
``php header()``는 반드시 어떤 output을 보내는 코드 이전에 위치해 있어야 한다. 
empty lines나 spaces가 있어도 안되니 주의.
이것저것 해봤는데 ``php header()``앞에 HTML tag나 어떤 output을 출력하는 코드가 있어도 제대로 동작하는 환경도 있는 듯.

```php
<?PHP
header("HTTP/1.1 404 Not Found");  // Not Found는 안적어도 되는 듯.
?>

```


redirection

HTTP redirection status code는 301, 302.
```php
<?PHP
// 301은 이렇게 명시적으로 써줘야 보내진다. 생략하면 302가 보내진다.
header( "HTTP/1.1 301 Moved Permanently" ); 

header('Location: http://www.example.com');
exit;    // 반드시 작성해 불필요한 코드의 실행을 막는다.
?>
```

Download Dialog

``http Content-type: application/*``으로 지정하면 해당 페이지를 요청했을 때 브라우저가 파일을 다운로드 하게 된다.
다운로드 받을 파일 이름은 ``http Content-Disposition``에 지정한다. 자세한 내용은 RFC2045(MIME) 참고
```php
$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를 만들어준다.
```php
<?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
?>
```