URI 정규화
URI normalizationURI 정규화는 일관된 방법으로 URI를 수정 및 표준화하는 프로세스입니다.정규화 프로세스의 목적은 URI를 정규화된 URI로 변환하는 것입니다.따라서 구문적으로 다른2개의 URI가 동등한지 여부를 판단할 수 있습니다.
검색 엔진에서는 URI 정규화를 사용하여 여러 URI로 검색될 수 있는 페이지의 올바른 순위를 매기고 중복 페이지의 인덱스를 줄입니다.웹 크롤러는 동일한 리소스를 여러 번 크롤링하지 않기 위해 URI 정규화를 수행합니다.웹 브라우저는 링크를 방문했는지 또는 페이지가 캐시되었는지 확인하기 위해 정규화를 수행할 수 있습니다.또한 웹 서버는 여러 가지 이유로 정규화를 수행할 수 있습니다(클라이언트 요청에서 발생하는 보안 위험을 보다 쉽게 차단할 수 있도록 하기 위해, 캐시 내에 저장되어 있는 각 리소스에 대해 로그 파일에 명명된 절대 파일 이름을 하나만 사용하기 위해 등).
정규화 프로세스
수행할 수 있는 정규화에는 몇 가지 유형이 있습니다.그 중 일부는 항상 의미론을 보존하고 있고 일부는 그렇지 않을 수 있습니다.
의미론을 보존하는 정규화
RFC 3986 에서는, 동등한 URI 를 얻기 위해서, 다음의 정규화에 대해 설명하고 있습니다.
- 퍼센트로 인코딩된 트리플렛을 대문자로 변환합니다.URI의 퍼센트 부호화 트리플렛 내의 16진수 자리수(예:
%3a대%3A)는 대소문자를 구분하지 않기 때문에 A ~F [2]의 숫자에 대문자를 사용하도록 정규화할 필요가 있습니다.예:
http://example.com/foo%2a→http://example.com/foo%2A
HTTP://User@Example.COM/Foo→http://User@example.com/Foo
- 예약되지 않은 문자의 백분율로 인코딩된 트리플렛을 디코딩하고 있습니다.ALPHA 범위 내 URI의 퍼센트 부호화 트리플렛(%)
%41–%5A그리고.%61–%7A디지트(%30–%39하이픈( )%2D기간(%2E, 밑줄 (%5F또는 칠데(%7Epercent-param은 필요 없습니다.따라서 대응하는 예약되지 않은 문자로 [4]디코딩해야 합니다.예제:
http://example.com/%7Efoo→http://example.com/~foo
- 도트 세그먼트를 삭제하는 중입니다.도트 세그먼트
.그리고...remove_dot_segments 알고리즘을[5] RFC 3986에 [6]기재된 경로에 적용하여 URI의 패스 컴포넌트를 삭제해야 합니다.예제:
http://example.com/foo/./bar/baz/../qux→http://example.com/foo/bar/qux
- 빈 경로를 "/" 경로로 변환합니다.권한 구성 요소가 있는 경우 빈 경로 구성 요소를 "/"[7] 경로 구성 요소로 정규화해야 합니다.예제:
http://example.com→http://example.com/
http://example.com:80/→http://example.com/
일반적으로 의미론을 유지하는 정규화
http 및 https URI의 경우 RFC 3986에 기재되어 있는 다음 정규화에 의해 동등한 URI가 생성될 수 있지만 표준에서는 보증되지 않습니다.
- 비어 있지 않은 경로에 후행 "/" 추가.디렉토리(폴더)는 후행 슬래시로 나타나며 URI에 포함되어야 합니다.예제:
http://example.com/foo→http://example.com/foo/- 다만, URI 패스컴포넌트가 디렉토리를 나타내고 있는지 어떤지는 알 수 없습니다.RFC 3986 에서는, 전자의 URI 가 후자의 URI 로 리다이렉트 되는 경우는, 그것들이 동등하다는 것을 나타내고 있습니다.
의미를 변경하는 정규화
다음의 정규화를 적용하면, 같은 자원을 참조하는 경우도 있습니다만, 의미적으로는 다른 URI 가 됩니다.
- 디렉터리 인덱스를 제거하는 중입니다.일반적으로 기본 디렉토리 인덱스는 URI에 필요하지 않습니다.예:
http://example.com/default.asp→http://example.com/http://example.com/a/index.html→http://example.com/a/
- fragment를 제거합니다.URI의 fragment컴포넌트는 서버에서 인식되지 않으며 삭제될 수 있습니다.예제:
http://example.com/bar.html#section1→http://example.com/bar.html- 단, AJAX 어플리케이션에서는 fragment의 값을 자주 사용합니다.
- IP를 도메인 이름으로 바꿉니다.IP 주소가 도메인 이름에 매핑되는지 확인합니다.예제:
- 제한 프로토콜.서로 다른 애플리케이션 계층 프로토콜 제한.예를 들어 "https" 스킴을 "http"로 대체할 수 있습니다.예제:
https://example.com/→http://example.com/
- 중복 슬래시 제거 인접한 슬래시 두 개를 포함하는 경로를 하나의 슬래시로 변환할 수 있습니다.예제:
http://example.com/foo//bar.html→http://example.com/foo/bar.html
- 첫 번째 도메인 레이블로 "www"를 제거하거나 추가합니다.일부 웹 사이트는 두 개의 인터넷 도메인에서 동일하게 동작합니다.하나는 "www"이고 다른 하나는 첫 번째 도메인 이름에서 가장 중요하지 않은 레이블을 생략한 결과이며, 후자는 네이키드 도메인으로 알려져 있습니다.예를들면,
http://www.example.com/그리고.http://example.com/는 같은 웹사이트에 접속할 수 있습니다.많은 웹 사이트가 사용자를 www에서 www 이외의 주소로 리디렉션하거나 그 반대로 수정합니다.노멀라이저는 이들 URI 중 하나가 다른 URI로 리다이렉트되는지 여부를 판단하고 모든 URI를 적절히 정규화할 수 있습니다.예제:
http://www.example.com/→http://example.com/
- 조회 매개 변수를 정렬하는 중입니다.일부 웹 페이지는 URI에서 여러 쿼리 매개 변수를 사용합니다. 노멀라이저는 매개 변수를 알파벳 순으로 정렬하고 URI를 재구성할 수 있습니다. 예:
http://example.com/display?lang=en&article=fred→http://example.com/display?article=fred&lang=en- 단, URI 내의 파라미터 순서는 중요할 수 있습니다(표준으로 정의되어 있지 않습니다).웹 서버에서는 같은 변수가 여러 [9]번 표시될 수 있습니다.
- 사용되지 않는 쿼리 변수를 제거하는 중입니다.페이지는 특정 파라미터만 쿼리에 표시되도록 할 수 있습니다.미사용 파라미터를 삭제할 수 있습니다.예제:
http://example.com/display?id=123&fakefoo=fakebar→http://example.com/display?id=123- 값이 없는 파라미터가 반드시 사용되지 않는 파라미터는 아닙니다.
- 기본 쿼리 매개 변수를 제거하는 중입니다.쿼리 문자열의 기본값은 있는지 여부에 관계없이 동일하게 렌더링할 수 있습니다.예제:
http://example.com/display?id=&sort=ascending→http://example.com/display
- 쿼리가 비어 있을 때 "?"를 제거합니다.쿼리가 비어 있는 경우 "?"가 필요하지 않을 수 있습니다.예제:
http://example.com/display?→http://example.com/display
URI 리스트에 근거한 정규화
일부 정규화 규칙은 이전 크롤 또는 웹 서버 로그에서 얻은 URI 목록을 검사하여 특정 웹 사이트에 대해 개발될 수 있습니다.예를 들어 URI가
http://example.com/story?id=xyz
크롤로그에 여러 번 표시됩니다.
http://example.com/story_xyz
두 개의 URI가 동일하며 URI 형식 중 하나로 정규화할 수 있다고 가정할 수 있습니다.
숀펠트 외(2006)는 URI 목록에 적용할 수 있는 더스트(유사한 텍스트를 가진 다른 URI) 규칙을 검출하기 위한 더스트버스터라는 휴리스틱을 제시합니다.올바른 DUST 규칙을 찾아 정규화 알고리즘을 적용하면 URI 목록에서 다중 URI의 최대 68%를 찾을 수 있음을 알 수 있었습니다.
참고 항목
레퍼런스
- ^ RFC 3986, 섹션 6.정규화와 비교
- ^ RFC 3986, 섹션 6.2.2.1.케이스 정규화
- ^ RFC 3986, 섹션 6.2.2.1.케이스 정규화
- ^ RFC 3986, 섹션 6.2.2.3.경로 세그먼트 정규화
- ^ RFC 3986, 5.2.4.도트 세그먼트 제거
- ^ RFC 3986, 6.2.2.3.경로 세그먼트 정규화
- ^ RFC 3986, 섹션 6.2.3.스킴 베이스 정규화
- ^ RFC 3986, 섹션 6.2.3.스킴 베이스 정규화
- ^ "jQuery 1.4 $.param demystified". Ben Alman. December 20, 2009. Retrieved August 24, 2013.
- RFC 3986 - Uniform Resource Identifier (URI; 유니폼자원 식별자): 일반 구문
- Sang Ho Lee; Sung Jin Kim & Seok Hoo Hong (2005). On URL normalization (PDF). Proceedings of the International Conference on Computational Science and its Applications (ICCSA 2005). pp. 1076–1085. Archived from the original (PDF) on September 18, 2006.
- Uri Schonfeld; Ziv Bar-Yossef & Idit Keidar (2006). Do not crawl in the dust: different URLs with similar text. Proceedings of the 15th international conference on World Wide Web. pp. 1015–1016.
- Uri Schonfeld; Ziv Bar-Yossef & Idit Keidar (2007). Do not crawl in the dust: different URLs with similar text. Proceedings of the 16th international conference on World Wide Web. pp. 111–120.
