[PHP] HTTP response header 수정 ( redirect, Download Dialog )
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
?>
```
'Languages & Frameworks > PHP' 카테고리의 다른 글
[PHP] 함수, 클래스, 객체, 상속, 트레이트 (0) | 2017.06.10 |
---|---|
[PHP] form tag, GET POST / cookie, session (0) | 2017.06.10 |
[PHP] Program execution, Shell escape (0) | 2017.06.07 |
[PHP] 상수 목록 / Super globals (0) | 2017.06.07 |
[PHP] 문자열, 배열 (0) | 2017.06.06 |