Apache HTTP Server Version 2.4
설명: | HTTP 요청 헤더와 응답 헤더 수정 |
---|---|
상태: | Extension |
모듈명: | headers_module |
소스파일: | mod_headers.c |
지원: | RequestHeader 는 아파치 2.0에만
있다 |
이 모듈은 HTTP 요청 헤더와 응답 헤더를 조절하고 수정하는 지시어들을 제공한다. 헤더를 합치거나 대체, 제거할 수 있다.
mod_headers
가 제공하는 지시어는 서버설정의
거의 모든 장소에서 사용할 수 있으며, 설정 섹션으로 감싸서 지시어의
범위를 제한할 수도 있다.
처리순서는 중요하며, 설정파일에 나온 순서와 설정 섹션의 영향을 받는다. 다음 두 지시어를 반대로 적으면 효과가 달라진다.
RequestHeader append MirrorID "mirror 12"
RequestHeader unset MirrorID
위와 같이 적으면 MirrorID
헤더가 나오지
않는다. 반대로 적으면 MirrorID 헤더를 "mirror 12"로 설정한다.
mod_headers
를 요청 초기나 나중에 적용할
수 있다. 보통은 내용생성자를 실행하기 직전에 요청 헤더를
설정하고 응답을 네트웍에 쓸때 응답 헤더를 설정하는 늦은(late)
방식을 사용한다. 실제 서비스하는 서버에서는 항상 느린 방식을
사용하라.
이른(early) 방식은 개발자를 위해 검사/디버깅용으로 만들었다.
early
키워드를 사용하여 정의한 지시어는 요청을
처리하기 시작할때 설정한다. 즉, 다른 요청을 모의실험하거나
검사를 하기위해 사용할 수 있지만, 응답을 생성하기 전에 다른
모듈이 불시에 헤더를 수정할 수 있다.
요청경로에 대한 설정을 살펴보기 전에 이른 지시어를
처리하기때문에 이른 헤더 지시어는 주서버이나 가상호스트
사용장소에서만 사용할 수 있다. 이른 지시어는 요청경로에
의존할 수 없기때문에 <Directory>
나
<Location>
같은 사용장소에서 사용할 수
없다.
Header echo ^TS
MyHeader
헤더를 추가한다. 클라이언트는
이 헤더를 보고 서버의 부하를 추정하거나 클라이언트와
서버간의 병목점을 찾을 수 있다.
Header add MyHeader "%D %t"
응답에 다음과 같은 헤더가 생긴다.
MyHeader: D=3775428 t=991424704447256
Header add MyHeader "Hello Joe. It took %D microseconds \
for Apache to serve this request."
응답에 다음과 같은 헤더가 생긴다.
MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
to serve this request.
MyHeader
를 보낸다. 특정 클라이언트에게만
응답에 헤더를 추가할때 유용하다. 이 예제가 동작하려면
mod_setenvif
모듈이 필요하다.
SetEnvIf MyRequestHeader value HAVE_MyRequestHeader
Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
HTTP 요청에 MyRequestHeader: value
헤더가
있다면, 응답에 다음과 같은 헤더가 생긴다.
MyHeader: D=3775428 t=991424704447256 mytext
설명: | HTTP 응답 헤더를 구성한다 |
---|---|
문법: | Header [condition] set|append|add|unset|echo
header [value] [early|env=[!]variable] |
사용장소: | 주서버설정, 가상호스트, directory, .htaccess |
Override 옵션: | FileInfo |
상태: | Extension |
모듈: | mod_headers |
이 지시어는 HTTP 응답 헤더를 합치거나 대체, 제거한다. 내용 핸들러와 출력 필터가 실행한 직후에 헤더를 수정하기때문에 보낼 헤더를 수정할 수 있다.
condition은 선택적으로 사용하며, 값으로
onsuccess
혹은 always
를 사용한다.
이는 어떤 내부 헤더표에 동작할지를 결정한다.
onsuccess
는 2xx
상태코드를
뜻하고, always
는 (2xx
를
포함한) 모든 상태코드를 뜻한다. 특히 어떤 모듈이 설정한
헤더를 해제하고 싶다면, 둘중 어떤 것을 사용할지 잘 살펴봐야
한다.
두번째 아규먼트에 따라 기능이 다르다. 두번째 아규먼트로 아래 값중 하나를 사용할 수 있다.
set
append
add
append
를
사용해야 한다.unset
echo
아규먼트 뒤에 header 이름이 나온다. 헤더명
뒤에 콜론을 적을 수 있지만, 없어도 된다. set
,
append
, add
, unset
에서
대소문자는 무시한다. echo
의 header
이름은 대수문자를 구별하고 정규표현식을 사용할 수 있다.
add
, append
, set
을
사용할때는 세번째 아규먼트 value가 필요하다.
value 안에 공백이 있다면 쌍따옴표로 묶어야 한다.
value는 일반 문자열이나 형식을 기술하는 문자열이며,
두가지를 같이 사용할 수도 있다. value에서 지원하는
형식기술자는 다음과 같다.
형식 | 설명 |
---|---|
%% |
퍼센트 기호 |
%t |
요청을 받은 시간을 국제표준시로 epoch (1970년 1월
1일) 이후 지난 마이크로초 단위로. 값 앞에 t= 이
붙는다. |
%D |
요청을 받은 시간부터 헤더를 네트웍에 쓸때까지 걸린
시간. 요청의 기간을 잰다. 값 앞에 D= 이
붙는다. |
%{FOOBAR}e |
환경변수 FOOBAR 의
내용. |
%{FOOBAR}s |
mod_ssl 이 동작한다면, SSL 환경변수
FOOBAR 의 내용. |
%s
형식 지시자는 아파치 2.1 이후에만 있다.
이 지시자는 SSLOptions +StdEnvVars
를 사용하는
부담을 덜기위해 %e
대신 사용할 수 있다. 어떤
이유에서건 SSLOptions +StdEnvVars
를 사용해야
한다면, %e
는 %s
보다 훨씬 더
효율적이다.
Header
지시어 뒤에 행동이 일어날
조건을 지시하는 추가 아규먼트나 이른 처리를
뜻하는 키워드 early
가 나올 수 있다.
env=...
아규먼트를 사용한 경우 해당
환경변수가 존재한다면 (혹은
env=!...
에 나온 환경변수가 존재하지
않다면) Header
지시어가 동작한다.
그렇지 않으면 지시어는 요청에 아무 영향을 미치지 않는다.
이른 방식이 아니라면 응답을 네트웍으로
보내기 직전에 Header
지시어를 처리한다.
그래서 헤더 필터가 추가하는 헤더를 제외한 대부분의 헤더를
설정하거나 덮어쓸 수 있다.
설명: | HTTP 요청 헤더를 구성한다 |
---|---|
문법: | RequestHeader set|append|add|unset header
[value] [early|env=[!]variable] |
사용장소: | 주서버설정, 가상호스트, directory, .htaccess |
Override 옵션: | FileInfo |
상태: | Extension |
모듈: | mod_headers |
이 지시어는 HTTP 요청 헤더를 합치거나 대체, 제거한다. 내용 핸들러가 실행하기 직전에 헤더를 수정하기때문에 받은 헤더를 수정할 수 있다. 첫번째 아규먼트에 따라 기능이 다르다. 첫번째 아규먼트로 아래 값중 하나를 사용할 수 있다.
set
append
add
append
를
사용해야 한다.unset
아규먼트 뒤에 헤더명이 나온다. 헤더명 뒤에 콜론을 적을
수 있지만, 없어도 된다. 대소문자는 무시한다. add
,
append
, set
을 사용할때는 세번째
아규먼트 value가 필요하다. value 안에
공백이 있다면 쌍따옴표로 묶어야 한다. unset을 사용할때는
value를 적으면 안된다. value는 일반
문자열이나 형식을 기술하는 문자열이며, 두가지를 같이 사용할
수도 있다. 지원하는 형식기술자는 Header
와 같으므로 자세한
내용은 그곳을 참고하라.
RequestHeader
지시어 뒤에 행동이
일어날 조건을 지시하는 추가 아규먼트나 이른 처리를 뜻하는 키워드
early
가 나올 수 있다. env=...
아규먼트를 사용한 경우 해당 환경변수가
존재한다면 (혹은 env=!...
에 나온
환경변수가 존재하지 않다면) RequestHeader
지시어가 동작한다. 그렇지 않으면 지시어는 요청에 아무 영향을
미치지 않는다.
이른 방식이 아니라면 fixup 단계에서
요청에 해당하는 핸들러를 실행하기 직전에
RequestHeader
지시어를 처리한다.
그래서 브라우저에 따라 혹은 아파치 입력필터가 헤더를 덮어쓰거나
수정할 수 있다.