mirror of
https://github.com/apache/httpd.git
synced 2025-04-18 22:24:07 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1873834 13f79535-47bb-0310-9956-ffa450edef68
331 lines
12 KiB
XML
331 lines
12 KiB
XML
<?xml version="1.0" encoding="EUC-KR" ?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
|
|
<!-- English Revision: 151408:1873677 (outdated) -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<modulesynopsis metafile="mod_headers.xml.meta">
|
|
|
|
<name>mod_headers</name>
|
|
<description>HTTP 요청 헤더와 응답 헤더 수정</description>
|
|
<status>Extension</status>
|
|
<sourcefile>mod_headers.c</sourcefile>
|
|
<identifier>headers_module</identifier>
|
|
<compatibility><directive
|
|
module="mod_headers">RequestHeader</directive>는 아파치 2.0에만
|
|
있다</compatibility>
|
|
|
|
<summary>
|
|
<p>이 모듈은 HTTP 요청 헤더와 응답 헤더를 조절하고 수정하는
|
|
지시어들을 제공한다. 헤더를 합치거나 대체, 제거할 수 있다.</p>
|
|
</summary>
|
|
|
|
<section id="order"><title>처리 순서</title>
|
|
|
|
<p><module>mod_headers</module>가 제공하는 지시어는 서버설정의
|
|
거의 모든 장소에서 사용할 수 있으며, <a
|
|
href="../sections.html">설정 섹션</a>으로 감싸서 지시어의
|
|
범위를 제한할 수도 있다.</p>
|
|
|
|
<p>처리순서는 중요하며, 설정파일에 나온 순서와 <a
|
|
href="../sections.html#mergin">설정 섹션</a>의 영향을 받는다.
|
|
다음 두 지시어를 반대로 적으면 효과가 달라진다.</p>
|
|
|
|
<example>
|
|
RequestHeader append MirrorID "mirror 12"<br />
|
|
RequestHeader unset MirrorID
|
|
</example>
|
|
|
|
<p>위와 같이 적으면 <code>MirrorID</code> 헤더가 나오지
|
|
않는다. 반대로 적으면 MirrorID 헤더를 "mirror 12"로 설정한다.</p>
|
|
</section>
|
|
|
|
<section id="early"><title>이른(early) 처리와 늦은(late) 처리</title>
|
|
<p><module>mod_headers</module>를 요청 초기나 나중에 적용할
|
|
수 있다. 보통은 내용생성자를 실행하기 직전에 요청 헤더를
|
|
설정하고 응답을 네트웍에 쓸때 응답 헤더를 설정하는 늦은(late)
|
|
방식을 사용한다. 실제 서비스하는 서버에서는 항상 느린 방식을
|
|
사용하라.</p>
|
|
|
|
<p>이른(early) 방식은 개발자를 위해 검사/디버깅용으로 만들었다.
|
|
<code>early</code> 키워드를 사용하여 정의한 지시어는 요청을
|
|
처리하기 시작할때 설정한다. 즉, 다른 요청을 모의실험하거나
|
|
검사를 하기위해 사용할 수 있지만, 응답을 생성하기 전에 다른
|
|
모듈이 불시에 헤더를 수정할 수 있다.</p>
|
|
|
|
<p>요청경로에 대한 설정을 살펴보기 전에 이른 지시어를
|
|
처리하기때문에 이른 헤더 지시어는 주서버이나 가상호스트
|
|
사용장소에서만 사용할 수 있다. 이른 지시어는 요청경로에
|
|
의존할 수 없기때문에 <code><Directory></code>나
|
|
<code><Location></code>같은 사용장소에서 사용할 수
|
|
없다.</p>
|
|
</section>
|
|
|
|
<section id="examples"><title>예제</title>
|
|
|
|
<ol>
|
|
<li>
|
|
"TS"로 시작하는 모든 요청 헤더를 응답 헤더로 복사한다.
|
|
|
|
<example>
|
|
Header echo ^TS
|
|
</example>
|
|
</li>
|
|
|
|
<li>
|
|
응답에 요청을 받은 시간과 요청을 서비스하는데 걸릴 시간을
|
|
알려주는 <code>MyHeader</code> 헤더를 추가한다. 클라이언트는
|
|
이 헤더를 보고 서버의 부하를 추정하거나 클라이언트와
|
|
서버간의 병목점을 찾을 수 있다.
|
|
|
|
<example>
|
|
Header add MyHeader "%D %t"
|
|
</example>
|
|
|
|
<p>응답에 다음과 같은 헤더가 생긴다.</p>
|
|
|
|
<example>
|
|
MyHeader: D=3775428 t=991424704447256
|
|
</example>
|
|
</li>
|
|
|
|
<li>
|
|
Joe에게 안녕
|
|
|
|
<example>
|
|
Header add MyHeader "Hello Joe. It took %D microseconds \<br />
|
|
for Apache to serve this request."
|
|
</example>
|
|
|
|
<p>응답에 다음과 같은 헤더가 생긴다.</p>
|
|
|
|
<example>
|
|
MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
|
|
to serve this request.
|
|
</example>
|
|
</li>
|
|
|
|
<li>
|
|
요청에 "MyRequestHeader" 헤더가 있는 경우에만 선택적으로
|
|
응답에 <code>MyHeader</code>를 보낸다. 특정 클라이언트에게만
|
|
응답에 헤더를 추가할때 유용하다. 이 예제가 동작하려면
|
|
<module>mod_setenvif</module> 모듈이 필요하다.
|
|
|
|
<example>
|
|
SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
|
|
Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader<br />
|
|
</example>
|
|
|
|
<p>HTTP 요청에 <code>MyRequestHeader: value</code> 헤더가
|
|
있다면, 응답에 다음과 같은 헤더가 생긴다.</p>
|
|
|
|
<example>
|
|
MyHeader: D=3775428 t=991424704447256 mytext
|
|
</example>
|
|
</li>
|
|
</ol>
|
|
</section>
|
|
|
|
<directivesynopsis>
|
|
<name>RequestHeader</name>
|
|
<description>HTTP 요청 헤더를 구성한다</description>
|
|
<syntax>RequestHeader set|append|add|unset <var>header</var>
|
|
[<var>value</var>] [early|env=[!]<var>variable</var>]</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>이 지시어는 HTTP 요청 헤더를 합치거나 대체, 제거한다.
|
|
내용 핸들러가 실행하기 직전에 헤더를 수정하기때문에 받은
|
|
헤더를 수정할 수 있다. 첫번째 아규먼트에 따라 기능이 다르다.
|
|
첫번째 아규먼트로 아래 값중 하나를 사용할 수 있다.</p>
|
|
|
|
<dl>
|
|
<dt><code>set</code></dt>
|
|
<dd>요청 헤더를 설정한다. 같은 이름으로 이미 헤더가 있다면
|
|
대체한다</dd>
|
|
|
|
<dt><code>append</code></dt>
|
|
<dd>이미 존재하는 같은 이름의 요청 헤더에 추가한다. 기존
|
|
헤더에 새로운 값을 합치면, 기존 헤더와 새로운 값 사이에
|
|
쉼표를 붙인다. 이는 여러 헤더값을 지정하는 HTTP 표준 방식이다.</dd>
|
|
|
|
<dt><code>add</code></dt>
|
|
<dd>헤더가 이미 있더라도 요청 헤더를 추가한다. 그래서 같은
|
|
이름의 헤더가 두개 (혹은 많이) 생길 수 있다. 이 경우 의외의
|
|
결과가 발생할 수 있기때문에 보통 대신 <code>append</code>를
|
|
사용해야 한다.</dd>
|
|
|
|
<dt><code>unset</code></dt>
|
|
<dd>이런 이름의 요청 헤더가 있다면 삭제한다. 같은 이름을
|
|
가진 헤더가 여러개 있다면 모두 제거한다. <var>value</var>는
|
|
적지 않는다.</dd>
|
|
</dl>
|
|
|
|
<p>아규먼트 뒤에 헤더명이 나온다. 헤더명 뒤에 콜론을 적을
|
|
수 있지만, 없어도 된다. 대소문자는 무시한다. <code>add</code>,
|
|
<code>append</code>, <code>set</code>을 사용할때는 세번째
|
|
아규먼트 <var>value</var>가 필요하다. <var>value</var> 안에
|
|
공백이 있다면 쌍따옴표로 묶어야 한다. unset을 사용할때는
|
|
<var>value</var>를 적으면 안된다. <var>value</var>는 일반
|
|
문자열이나 형식을 기술하는 문자열이며, 두가지를 같이 사용할
|
|
수도 있다. 지원하는 형식기술자는 <directive
|
|
module="mod_headers">Header</directive>와 같으므로 자세한
|
|
내용은 그곳을 참고하라.</p>
|
|
|
|
<p><directive>RequestHeader</directive> 지시어 뒤에 행동이
|
|
일어날 조건을 지시하는 추가 아규먼트나 <a
|
|
href="#early">이른 처리</a>를 뜻하는 키워드
|
|
<code>early</code>가 나올 수 있다. <code>env=<var>...</var></code>
|
|
아규먼트를 사용한 경우 해당 <a href="../env.html">환경변수</a>가
|
|
존재한다면 (혹은 <code>env=!<var>...</var></code>에 나온
|
|
환경변수가 존재하지 않다면) <directive>RequestHeader</directive>
|
|
지시어가 동작한다. 그렇지 않으면 지시어는 요청에 아무 영향을
|
|
미치지 않는다.</p>
|
|
|
|
<p><a href="#early">이른</a> 방식이 아니라면 fixup 단계에서
|
|
요청에 해당하는 핸들러를 실행하기 직전에
|
|
<directive>RequestHeader</directive> 지시어를 처리한다.
|
|
그래서 브라우저에 따라 혹은 아파치 입력필터가 헤더를 덮어쓰거나
|
|
수정할 수 있다.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>Header</name>
|
|
<description>HTTP 응답 헤더를 구성한다</description>
|
|
<syntax>Header [<var>condition</var>] set|append|add|unset|echo
|
|
<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>이 지시어는 HTTP 응답 헤더를 합치거나 대체, 제거한다.
|
|
내용 핸들러와 출력 필터가 실행한 직후에 헤더를 수정하기때문에
|
|
보낼 헤더를 수정할 수 있다.</p>
|
|
|
|
<p><var>condition</var>은 선택적으로 사용하며, 값으로
|
|
<code>onsuccess</code> 혹은 <code>always</code>를 사용한다.
|
|
이는 어떤 내부 헤더표에 동작할지를 결정한다.
|
|
<code>onsuccess</code>는 <code>2<var>xx</var></code> 상태코드를
|
|
뜻하고, <code>always</code>는 (<code>2<var>xx</var></code>를
|
|
포함한) 모든 상태코드를 뜻한다. 특히 어떤 모듈이 설정한
|
|
헤더를 해제하고 싶다면, 둘중 어떤 것을 사용할지 잘 살펴봐야
|
|
한다.</p>
|
|
|
|
<p>두번째 아규먼트에 따라 기능이 다르다. 두번째 아규먼트로
|
|
아래 값중 하나를 사용할 수 있다.</p>
|
|
|
|
<dl>
|
|
<dt><code>set</code></dt>
|
|
<dd>응답 헤더를 설정한다. 같은 이름으로 이미 헤더가 있다면
|
|
대체한다. <var>value</var>에 형식문자열을 사용할 수 있다.</dd>
|
|
|
|
<dt><code>append</code></dt>
|
|
<dd>이미 존재하는 같은 이름의 응답 헤더에 추가한다. 기존
|
|
헤더에 새로운 값을 합치면, 기존 헤더와 새로운 값 사이에
|
|
쉼표를 붙인다. 이는 여러 헤더값을 지정하는 HTTP 표준 방식이다.</dd>
|
|
|
|
<dt><code>add</code></dt>
|
|
<dd>헤더가 이미 있더라도 응답 헤더를 추가한다. 그래서 같은
|
|
이름의 헤더가 두개 (혹은 많이) 생길 수 있다. 이 경우 의외의
|
|
결과가 발생할 수 있기때문에 보통 대신 <code>append</code>를
|
|
사용해야 한다.</dd>
|
|
|
|
<dt><code>unset</code></dt>
|
|
<dd>이런 이름의 응답 헤더가 있다면 삭제한다. 같은 이름을
|
|
가진 헤더가 여러개 있다면 모두 제거한다. <var>value</var>는
|
|
적지 않는다.</dd>
|
|
|
|
<dt><code>echo</code></dt>
|
|
<dd>이런 이름의 요청 헤더를 그대로 응답 헤더로 보낸다.
|
|
<var>header</var>에 정규표현식을 사용할 수 있다.
|
|
<var>value</var>는 적지 않는다.</dd>
|
|
</dl>
|
|
|
|
<p>아규먼트 뒤에 <var>header</var> 이름이 나온다. 헤더명
|
|
뒤에 콜론을 적을 수 있지만, 없어도 된다. <code>set</code>,
|
|
<code>append</code>, <code>add</code>, <code>unset</code>에서
|
|
대소문자는 무시한다. <code>echo</code>의 <var>header</var>
|
|
이름은 대수문자를 구별하고 정규표현식을 사용할 수 있다.</p>
|
|
|
|
<p><code>add</code>, <code>append</code>, <code>set</code>을
|
|
사용할때는 세번째 아규먼트 <var>value</var>가 필요하다.
|
|
<var>value</var> 안에 공백이 있다면 쌍따옴표로 묶어야 한다.
|
|
<var>value</var>는 일반 문자열이나 형식을 기술하는 문자열이며,
|
|
두가지를 같이 사용할 수도 있다. <var>value</var>에서 지원하는
|
|
형식기술자는 다음과 같다.</p>
|
|
|
|
<table border="1" style="zebra">
|
|
<columnspec><column width=".25"/><column width=".75"/></columnspec>
|
|
<tr><th>형식</th><th>설명</th></tr>
|
|
<tr><td><code>%%</code></td>
|
|
<td>퍼센트 기호</td></tr>
|
|
|
|
<tr><td><code>%t</code></td>
|
|
<td>요청을 받은 시간을 국제표준시로 epoch (1970년 1월
|
|
1일) 이후 지난 마이크로초 단위로. 값 앞에 <code>t=</code>이
|
|
붙는다.</td></tr>
|
|
|
|
<tr><td><code>%D</code></td>
|
|
<td>요청을 받은 시간부터 헤더를 네트웍에 쓸때까지 걸린
|
|
시간. 요청의 기간을 잰다. 값 앞에 <code>D=</code>이
|
|
붙는다.</td></tr>
|
|
|
|
<tr><td><code>%{FOOBAR}e</code></td>
|
|
<td><a href="../env.html">환경변수</a> <code>FOOBAR</code>의
|
|
내용.</td></tr>
|
|
|
|
<tr><td><code>%{FOOBAR}s</code></td>
|
|
<td><module>mod_ssl</module>이 동작한다면, <a
|
|
href="mod_ssl.html#envvars">SSL 환경변수</a>
|
|
<code>FOOBAR</code>의 내용.</td></tr>
|
|
|
|
</table>
|
|
|
|
<note><title>주의</title>
|
|
<p><code>%s</code> 형식 지시자는 아파치 2.1 이후에만 있다.
|
|
이 지시자는 <code>SSLOptions +StdEnvVars</code>를 사용하는
|
|
부담을 덜기위해 <code>%e</code> 대신 사용할 수 있다. 어떤
|
|
이유에서건 <code>SSLOptions +StdEnvVars</code>를 사용해야
|
|
한다면, <code>%e</code>는 <code>%s</code> 보다 훨씬 더
|
|
효율적이다.</p>
|
|
</note>
|
|
|
|
<p><directive>Header</directive> 지시어 뒤에 행동이 일어날
|
|
조건을 지시하는 추가 아규먼트나 <a href="#early">이른 처리</a>를
|
|
뜻하는 키워드 <code>early</code>가 나올 수 있다.
|
|
<code>env=<var>...</var></code> 아규먼트를 사용한 경우 해당
|
|
<a href="../env.html">환경변수</a>가 존재한다면 (혹은
|
|
<code>env=!<var>...</var></code>에 나온 환경변수가 존재하지
|
|
않다면) <directive>Header</directive> 지시어가 동작한다.
|
|
그렇지 않으면 지시어는 요청에 아무 영향을 미치지 않는다.</p>
|
|
|
|
<p><a href="#early">이른</a> 방식이 아니라면 응답을 네트웍으로
|
|
보내기 직전에 <directive>Header</directive> 지시어를 처리한다.
|
|
그래서 헤더 필터가 추가하는 헤더를 제외한 대부분의 헤더를
|
|
설정하거나 덮어쓸 수 있다.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
</modulesynopsis>
|
|
|