URI 정규화

URI normalization
URI 정규화 유형.

URI 정규화는 일관된 방법으로 URI를 수정 및 표준화하는 프로세스입니다.정규화 프로세스의 목적은 URI를 정규화된 URI로 변환하는 것입니다.따라서 구문적으로 다른2개의 URI가 동등한지 여부를 판단할 수 있습니다.

검색 엔진에서는 URI 정규화를 사용하여 여러 URI로 검색될 수 있는 페이지의 올바른 순위를 매기고 중복 페이지의 인덱스를 줄입니다.웹 크롤러는 동일한 리소스를 여러 번 크롤링하지 않기 위해 URI 정규화를 수행합니다.웹 브라우저는 링크를 방문했는지 또는 페이지가 캐시되었는지 확인하기 위해 정규화를 수행할 수 있습니다.또한서버는 여러 가지 이유로 정규화를 수행할 수 있습니다(클라이언트 요청에서 발생하는 보안 위험을 보다 쉽게 차단할 수 있도록 하기 위해, 캐시 내에 저장되어 있는 각 리소스에 대해 로그 파일에 명명된 절대 파일 이름을 하나만 사용하기 위해 등).

정규화 프로세스

수행할 수 있는 정규화에는 몇 가지 유형이 있습니다.그 중 일부는 항상 의미론을 보존하고 있고 일부는 그렇지 않을 수 있습니다.

의미론을 보존하는 정규화

RFC 3986 에서는, 동등한 URI 를 얻기 위해서, 다음의 정규화에 대해 설명하고 있습니다.

  • 퍼센트로 인코딩된 트리플렛을 대문자로 변환합니다.URI의 퍼센트 부호화 트리플렛 내의 16진수 자리수(예:%3a%3A)는 대소문자를 구분하지 않기 때문에 A ~F [2]의 숫자에 대문자를 사용하도록 정규화할 필요가 있습니다.예:
http://example.com/foo%2ahttp://example.com/foo%2A
  • 스킴과 호스트를 소문자로 변환합니다.URI 의 스킴과 호스트 컴포넌트는 대소문자를 구분하지 않기 때문에 [3]소문자로 정규화할 필요가 있습니다.예:
HTTP://User@Example.COM/Foohttp://User@example.com/Foo
  • 예약되지 않은 문자의 백분율로 인코딩된 트리플렛을 디코딩하고 있습니다.ALPHA 범위 내 URI의 퍼센트 부호화 트리플렛(%)%41%5A그리고.%61%7A디지트(%30%39하이픈( )%2D기간(%2E, 밑줄 (%5F또는 칠데(%7Epercent-param은 필요 없습니다.따라서 대응하는 예약되지 않은 문자로 [4]디코딩해야 합니다.예제:
http://example.com/%7Efoohttp://example.com/~foo
  • 도트 세그먼트를 삭제하는 중입니다.도트 세그먼트.그리고...remove_dot_segments 알고리즘을[5] RFC 3986에 [6]기재된 경로에 적용하여 URI의 패스 컴포넌트를 삭제해야 합니다.예제:
http://example.com/foo/./bar/baz/../quxhttp://example.com/foo/bar/qux
  • 빈 경로를 "/" 경로로 변환합니다.권한 구성 요소가 있는 경우 빈 경로 구성 요소를 "/"[7] 경로 구성 요소로 정규화해야 합니다.예제:
http://example.comhttp://example.com/
  • 기본 포트를 삭제합니다.URI의 빈 포트 컴포넌트 또는 기본 포트 컴포넌트(의 경우 포트 80)httpscheme)에 ":" 딜리미터는 [8]삭제해야 합니다.예제:
http://example.com:80/http://example.com/

일반적으로 의미론을 유지하는 정규화

http 및 https URI의 경우 RFC 3986에 기재되어 있는 다음 정규화에 의해 동등한 URI가 생성될 수 있지만 표준에서는 보증되지 않습니다.

  • 비어 있지 않은 경로에 후행 "/" 추가.디렉토리(폴더)는 후행 슬래시로 나타나며 URI에 포함되어야 합니다.예제:
http://example.com/foohttp://example.com/foo/
다만, URI 패스컴포넌트가 디렉토리를 나타내고 있는지 어떤지는 알 수 없습니다.RFC 3986 에서는, 전자의 URI 가 후자의 URI 로 리다이렉트 되는 경우는, 그것들이 동등하다는 것을 나타내고 있습니다.

의미를 변경하는 정규화

다음의 정규화를 적용하면, 같은 자원을 참조하는 경우도 있습니다만, 의미적으로는 다른 URI 가 됩니다.

  • 디렉터리 인덱스를 제거하는 중입니다.일반적으로 기본 디렉토리 인덱스는 URI에 필요하지 않습니다.예:
http://example.com/default.asphttp://example.com/
http://example.com/a/index.htmlhttp://example.com/a/
  • fragment를 제거합니다.URI의 fragment컴포넌트는 서버에서 인식되지 않으며 삭제될 수 있습니다.예제:
http://example.com/bar.html#section1http://example.com/bar.html
단, AJAX 어플리케이션에서는 fragment의 값을 자주 사용합니다.
  • IP를 도메인 이름으로 바꿉니다.IP 주소가 도메인 이름에 매핑되는지 확인합니다.예제:
http://208.77.188.166/http://example.com/
가상서버가 있기 때문에 역치환은 거의 안전하지 않습니다.
  • 제한 프로토콜.서로 다른 애플리케이션 계층 프로토콜 제한.예를 들어 "https" 스킴을 "http"로 대체할 수 있습니다.예제:
https://example.com/http://example.com/
  • 중복 슬래시 제거 인접한 슬래시 두 개를 포함하는 경로를 하나의 슬래시로 변환할 수 있습니다.예제:
http://example.com/foo//bar.htmlhttp://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=fredhttp://example.com/display?article=fred&lang=en
단, URI 내의 파라미터 순서는 중요할 수 있습니다(표준으로 정의되어 있지 않습니다).웹 서버에서는 같은 변수가 여러 [9]번 표시될 수 있습니다.
  • 사용되지 않는 쿼리 변수를 제거하는 중입니다.페이지는 특정 파라미터만 쿼리에 표시되도록 할 수 있습니다.미사용 파라미터를 삭제할 수 있습니다.예제:
http://example.com/display?id=123&fakefoo=fakebarhttp://example.com/display?id=123
값이 없는 파라미터가 반드시 사용되지 않는 파라미터는 아닙니다.
  • 기본 쿼리 매개 변수를 제거하는 중입니다.쿼리 문자열의 기본값은 있는지 여부에 관계없이 동일하게 렌더링할 수 있습니다.예제:
http://example.com/display?id=&sort=ascendinghttp://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%를 찾을 수 있음을 알 수 있었습니다.

참고 항목

레퍼런스

  1. ^ RFC 3986, 섹션 6.정규화와 비교
  2. ^ RFC 3986, 섹션 6.2.2.1.케이스 정규화
  3. ^ RFC 3986, 섹션 6.2.2.1.케이스 정규화
  4. ^ RFC 3986, 섹션 6.2.2.3.경로 세그먼트 정규화
  5. ^ RFC 3986, 5.2.4.도트 세그먼트 제거
  6. ^ RFC 3986, 6.2.2.3.경로 세그먼트 정규화
  7. ^ RFC 3986, 섹션 6.2.3.스킴 베이스 정규화
  8. ^ RFC 3986, 섹션 6.2.3.스킴 베이스 정규화
  9. ^ "jQuery 1.4 $.param demystified". Ben Alman. December 20, 2009. Retrieved August 24, 2013.