IPv6 URL에서 호스트와 포트를 어떻게 구별 할 수 있습니까?


87

URL은 항상 다음 형식을 갖습니다.

<protocol>://<host>[:<port>]/[<path>][#<hash>]

문제는 IPv6이 포트와 호스트의 구분 기호와 같이 콜론을 사용한다는 것입니다.

2001:db8:1f70::999:de8:7648:6e8

그러나 이것이 호스트 인 경우 포트 100에서 HTTP를 사용하여 호스트에 연결하려면 어떻게해야합니까?

http://2001:db8:1f70::999:de8:7648:6e8:100/

문제는 마지막 결장입니다. 0은 이중 콜론 (1f70에서 999 사이)으로 생략되므로 ': 100'이 IP 또는 포트 번호에 속하는지 알 수 없습니다. 우리는 이것을 어떻게 알 수 있습니까?

답변:


118

이 경우 표기법은 IPv6 IP 번호를 대괄호로 인코딩하는 것입니다.

http://[2001:db8:1f70::999:de8:7648:6e8]:100/

그건 RFC 3986 , 섹션 3.2.2 : 호스트

인터넷 프로토콜 리터럴 주소, 버전 6 [RFC3513] 이상으로 식별 된 호스트는 IP 리터럴을 대괄호 ( "["및 "]")로 묶어 구별됩니다. URI 구문에서 대괄호 문자가 허용되는 유일한 곳입니다. 미래의 아직 정의되지 않은 IP 리터럴 주소 형식을 예상 할 때, 구현에서는 추론 적 결정에 의존하기보다는 선택적 형식 플래그를 사용하여 이러한 형식을 명시 적으로 나타낼 수 있습니다.


38
대괄호는 선택 사항 이 아님을 지적하는 것이 좋습니다. 브라우저가 숫자 IPv6 주소를 식별 할 수있는 유일한 메커니즘입니다.
tylerl

포트가 브래킷 안에 없어야합니까?
jayarjo

2
@jayarjo 아니오, 대괄호가 있으므로 콜론을 포함하는 IP 주소와 콜론으로 IP 주소와 구분되는 포트 사이에 명확성을 제공합니다.
sysadmin1138
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.