mirror of
https://github.com/apache/httpd.git
synced 2025-06-03 10:42:03 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@103107 13f79535-47bb-0310-9956-ffa450edef68
93 lines
3.6 KiB
XML
93 lines
3.6 KiB
XML
<?xml version="1.0" encoding="EUC-KR" ?>
|
|
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="./style/manual.ko.xsl"?>
|
|
<!-- English Revision: 1.3 (outdated: 1.6) -->
|
|
|
|
<!--
|
|
Copyright 2003-2004 The Apache Software Foundation
|
|
|
|
Licensed 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.
|
|
-->
|
|
|
|
<manualpage metafile="cgi_path.xml.meta">
|
|
|
|
<title>CGI 환경에서 PATH_INFO의 변화</title>
|
|
|
|
<summary>
|
|
<p>아파치 1.1.1과 그 이전 버전의 경우 CGI 환경에서
|
|
PATH_INFO를 만드는 방법이 직관적이지 않고 어떤 경우 서버를
|
|
죽이기도 했다. 아파치 1.2 이후 이 방법이 변했다. 기존의
|
|
어떤 CGI 프로그램들과 약간의 호환문제가 있지만
|
|
아파치 1.2의 행동은 아직도 CGI/1.1 규약을 벋어나지않으며,
|
|
쉽게 CGI 스크립트를 수정할 수 있다. (<a href="#compat">아래
|
|
참고</a>)</p>
|
|
</summary>
|
|
|
|
<section id="prob"><title>문제점</title>
|
|
<p>아파치 1.1.1과 그 이전 버전은 URL 대신 파일명을
|
|
가지고 PATH_INFO와 SCRIPT_NAME 환경변수를 구현했다. 많은
|
|
경우 올바른 결과를 얻지만, 파일시스템 경로가 path
|
|
정보를 포함한다면 잘못된 결과가 나올 수 있다. 예를 들어,
|
|
설정파일에 다음과 같은 내용이 있다면:</p>
|
|
|
|
<example>
|
|
Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
|
|
</example>
|
|
|
|
<p>이 경우 <code>user.cgi</code>는 CGI 스크립트이고, "/ralph"는
|
|
CGI에 넘겨지는 정보다. 이 경우
|
|
"<code>/cgi-ralph/script/</code>"로 요청이 들어오면 PATH는
|
|
"<code>/ralph/script</code>"가 되고, SCRIPT_NAME은
|
|
"<code>/cgi-</code>"가 된다. 후자는 분명히 잘못되었다.
|
|
심지어 어떤 경우 서버가 죽기도 한다.</p>
|
|
</section>
|
|
|
|
<section id="solution"><title>해결책</title>
|
|
<p>아파치 1.2 이후에서는 URL에서 클라이언트가 조절가능한
|
|
부분을 판단하여 SCRIPT_NAME과 PATH_INFO를 설정한다. 위의
|
|
예에서 PATH_INFO는 "<code>/script</code>"가 되고, SCRIPT_NAME은
|
|
"<code>/cgi-ralph</code>"가 된다. 이는 합리적이며 서버에
|
|
문제를 일으키지 않는다. 또, 이전 버전과 달리 스크립트에서
|
|
"<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"가
|
|
현재 스크립트를 가리키는 URL임을 보장할 수 있다.</p>
|
|
|
|
<p>그러나 불행히도 <code>Alias</code> 지시어의
|
|
"<code>/ralph</code>" 정보는 사라진다. 그러나 우리는
|
|
파일시스템을 사용하여 이런 정보를 넘겨주는 것이 바람직한
|
|
방법이 아니며, 이를 사용하는 스크립트는 작동할"만하지"
|
|
않다고 생각한다. 그러나 아파치 1.2b3 이후에는 이에 대한
|
|
<a href="#compat">해결책</a>이 있다.</p>
|
|
</section>
|
|
|
|
<section id="compat">
|
|
<title>이전 서버와 호환성</title>
|
|
|
|
<p>아파치 이전 버전이나 다른 서버용으로 설계된 스크립트는
|
|
이전 PATH_INFO 변수가 제공했던 정보가 필요할 수 있다. 그래서
|
|
아파치 1.2 (1.2b3 이후)는 FILEPATH_INFO라는 변수를 더 설정한다.
|
|
이 환경변수는 아파치 1.1.1의 PATH_INFO 값을 가진다.</p>
|
|
|
|
<p>스크립트가 아파치 1.2와 이전 버전 모두에서 동작하게하려면,
|
|
먼저 FILEPATH_INFO가 있는지 검사하고 있다면 그것을
|
|
사용한다. 없다면 PATH_INFO를 사용한다. 예를 들어,
|
|
Perl로는 다음과 같다:</p>
|
|
|
|
<example>
|
|
$path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
|
|
</example>
|
|
|
|
<p>이렇게 하면 모든 아파치를 포함하여 CGI/1.1 규정을 따르는
|
|
모든 서버에서 스크립트가 동작할 수 있다.</p>
|
|
</section>
|
|
</manualpage>
|