skip menu and go to main content

body start

mod_url

Resolved  IE7 에서 mod_url 의 무한 루프 문제 4 ]

07.05.28-01:01:36

302676

Submitted by 김정균

Assignee 김정균

View238

Priority3

이미 제기된 문제이나, 원규님께서 제대로 인지를 하지 못하는 것 같아서, 정식적으로 문제 제기와 patch 를 올립니다.

일단, 이 문제는 IE7 의 url sending 부분의 변화 때문입니다. 즉, IE7 은 기본적으로 url 을 utf8 로 전송이 되게끔 되어 있습니다. 이 문제로 인하여 mod_url 이 만들어진 이유입니다. 그런데, IE7 부터는 다음과 같은 문제가 발생을 합니다. IE7 에서 다음의 url 로 질의를 하는 경우의 예를 들겠습니다.

http://domain.com/한글.txt

IE7 sending : http://domian.com/한글.txt (sending with UTF8)
mod_url responsed:

HTTP/1.1 301 Moved Permanently
Date: Sun, 27 May 2007 14:43:19 GMT
Server: Apache
Location: http://domain.com/한글.txt
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

f8
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>301 Moved Permanently</TITLE>
</HEAD><BODY>
<H1>Moved Permanently</H1>
The document has moved <A HREF="http://work.oops.org/modurl/한글.txt">here</A>.<P>;
</BODY></HTML>

위와 같은 과정을 거치는 과정에서, 301 Moved Permanently 로 주어진 주소를 IE7 이 다시 UTF8 로 인코딩 하여 전송을 하면서 무한 루프가 발생하게 되는 겁니다. 저도 mod_url 코드를 제대로 본적이 없어서, 그냥 내부적으로 해당 경로에 파일이 없으면 iconv 를 해 본 후에 다시 파일을 여는 것으로 알고 있었는데, 지금 코드를 다시 보니 301 리턴을 하여 브라우져로 하여금 재접속을 시키는 것이었네요. 그리고 IE7 의 경우에는 이 과정에서 무한 루프를 돌게 되는 겁니다.

이 문제를 해결하기 위해서, ASCII 이외의 영역의 charactor 를 RFC1738 에 따라 인코딩 해 주어서 문제를 해결을 할 수 있을 것 같습니다.

제가 첨부한 패치는 php 의 raw_url_encoding 함수를 조금 수정하여 이 문제를 해결한 패치입니다. 일단 작동여부는 확인을 하였으나, 라이센스를 어떻게 처리해야 할 지 모르겠습니다. 일단, 패치에서는 check_redurl_encode 함수에 따로 라이센스에 관련된 주석을 달았고, 이 패치에 해당되는 부분은 "#define CHECK_REDURL_ENCODE_LICENSE" 에 의해서 제어가 되도록 패치를 해 놓았습니다.

이 함수를 재작성 하시든지.. 아니면.. 라이센스를 어떻게든 처리하셔서 적용하시면 될 것 같습니다.

Comments on this artfact

4 Comments

김정균

File added 379: mod_url-ie7.patch

07.05.28-01:01:36

김정균

음.. mod_url 이 원규님 버전과 제 버전 2개로 나뉘어서 코드 관리하기가 좀 귀찮군요. 아무래도 제 버전을 이름을 바꾸든지 해야 겠습니다. :-) 사람들의 혼동도 있고, 원규님과 저와 기본값에 대한 의견 차이가 좁혀지지 않는 관계로 ^^;

물론 정통성은 kldp.net 에 있는 이 프로젝트가 정통성을 가지겠지요. 전 fork 버전일 뿐.. :-)

07.05.28-01:04:06

김정균

이 패치 무시해 주십시오. LICENSE 를 해결할 수 있는 다른 모델을 찾아서 구현 중 입니다. :-) 뭐 임시 땜빵으로 업데이트 하셔도 상관은 없습니다.

07.05.30-19:17:04

김정균

"Assigned To" was changed from "Nobody" to "김정균"
"Priority" was changed from "3" to "1"
"State" was changed from "Open" to "Closed"

07.06.05-21:01:06

김정균

"Priority" was changed from "1" to "5"

07.11.09-19:01:38

wkpark

"Priority" was changed from "5" to "3"
"State" was changed from "Closed" to "Closed"

08.03.16-13:26:39

wkpark

아파치에 내장된 ap_escape_uri()를 쓰면 문제가 있다고 하셨는데

정확히 어떤 문제인가요?

아파치의 ap_escape_uri()를 적용한 테스트버전은
http://chem.skku.ac.kr/~wkpark/main/mod_url 에서 찾으실 수 있습니다.

08.03.16-13:26:39

김정균

음 너무 오래되서 기억이 안나는 군요. ^^; 정확하게 제가 그때 문제가 있었다고 보는 것이 ap_escape_uri 인지도 잘 기억은 안나고.. 뭐 하여튼 그때 저도 check_redurl_encode 함수 만들지 않고 apache API 로 처리하려고 무진장 뒤졌었던 기억은 나는데 말이죠.

아마, apache 1/2 가 다르게 작동했거나 또는 빌드 time 시의 문제가 있었던 것으로 기억이 나는 듯 합니다. 그래서 처음에는 php 의 urlencode 를 가져와서 사용하다가, 라이센스가 애매해져서 새로 작성해 버린 것이었죠.

그리고, rfc 상에서의 URI encoding 은 US-ASCII 를 제외한 모든 character 를 encoding 한다고 되어 있는데, apache 1 의 ap_encode_uri 는 조금 애매하게 되어 있기는 하네요. 어쩌면 맞는데 제가 잘못 보고 있는 것일 수도 있고요.

확실하게 ap_escape_uri 의 역할이 check_redurl_encode 와 같은 역할을 한다고 본다면 바꾸는 것이 맞을 것 같기는 합니다. 어떻게 보시는지요?

현재 mod_url 이 mod_spelling 기반의 redirect 방식이 아닌 uri replace 방식이므로, 이 문제는 CVS 의 MOD_SPELLING branch 에서 다루어지면 될 듯 싶습니다.

즉, 수정해서 반영해 보고 문제가 없으면 변경하도록 하는 것이 괜찮지 않을까 생각되기는 합니다.

08.03.28-18:24:36

Attachments
Add A Comment