Uri.Host와 Uri.Authority의 차이점은 무엇입니까?


82

System.UriHost, Authority그리고 DnsSafeHost. MS는 여기서HostDnsSafeHost다른 시기에 대한 좋은 예를 제공합니다 .

Host및에 대한 유사한 예제 / 설명이 필요 Authority합니다.

답변:


103

예 Brandon은 평신도 용어로 절대적으로 정확합니다.

권한 = 호스트 이름 + 포트 번호

URL 프로토콜이 기본 포트를 사용하는 경우 http URL에 대해 포트 80이라고 말하면 해당 경우에만 Authority = Host Name (포트 번호는 80으로 간주 됨),

호스트 이름은 도메인 이름 또는 IP 주소입니다.

예:

  1. http://www.example.com/

    기관 = www.example.com
    호스트 이름 = www.example.com

  2. http://255.255.255.255:8080/

    권한 = 255.255.255.255:8080
    호스트 이름 = 255.255.255.255


1
작은 의심 하나. localhost에서 응용 프로그램을 실행하면 URL에 포트 번호가 있지만 프로덕션에서는 URL에 포트 번호가 없습니다. 그래서 Url.Authority를 ​​자유롭게 사용할 수 있겠죠? 포트 번호가 없으면 URl.Authority가 URL.Host 권한과 동일하게 작동합니다. 그래도 URL을 올바르게 가져올 수 있습니까? 저를 안내 해주세요.
Unbreakable

stackoverflow.com/a/39415643/316343 읽기 , User Information부품을 놓쳤습니다 .
Jahan

35

MSDN URI.Host 페이지에서.

Authority 속성과 달리이 속성 값에는 포트 번호가 포함되지 않습니다.


작은 의심 하나. localhost에서 응용 프로그램을 실행하면 URL에 포트 번호가 있지만 프로덕션에서는 URL에 포트 번호가 없습니다. 그래서 Url.Authority를 ​​자유롭게 사용할 수 있겠죠? 포트 번호가 없으면 URl.Authority가 URL.Host 권한과 동일하게 작동합니다. 그래도 URL을 올바르게 가져올 수 있습니까? 저를 안내 해주세요.
Unbreakable

@Unbreakable-맞습니다. 두 경우 모두 작동합니다. URL에 포트 번호를 지정하지 않으면 기본 포트 번호 만 사용하고이 경우 Url.Authority는 포트를 생략합니다.
BornToCode

15

모든 HTTP URL은 일반 URI의 구문을 따릅니다. URI 일반 구문은 5 가지 구성 요소의 계층 적 시퀀스로 구성됩니다.

URI = scheme:[//authority]path[?query][#fragment]

여기서 기관 세 개의 하위 구성 요소로 분열 :

authority = [userinfo@]host[:port]

이렇게 :

위키

두 개의 슬래시 (//)가 앞에 오는 선택적 권한 구성 요소는 다음을 포함합니다.

  • 사용자 이름과 콜론 (:), at 기호 (@)가 앞에 오는 선택적 암호로 구성 될 수 있는 선택적 userinfo 하위 구성 요소입니다. 보안상의 이유로 userinfo 하위 구성 요소에서 username : password 형식의 사용은 더 이상 사용되지 않습니다. 응용 프로그램은 콜론 뒤의 데이터가 빈 문자열 (암호 없음을 나타냄)이 아닌 한 userinfo 하위 구성 요소에서 발견 된 첫 번째 콜론 (:) 뒤의 데이터를 일반 텍스트로 렌더링해서는 안됩니다.
  • 등록 된 이름 (호스트 이름을 포함하되 이에 국한되지 않음) 또는 IP 주소로 구성된 선택적 호스트 하위 구성 요소. IPv4 주소는 점 10 진수 표기법이어야하며 IPv6 주소는 대괄호 ([])로 묶어야합니다.
  • 콜론 (:)이 앞에 오는 선택적 포트 하위 구성 요소.

자세한 내용은 https://en.wikipedia.org/wiki/URL참조하세요 .


12

.NET의 Uri 클래스의 경우 Authority는 포트를 포함하고 Host는 포함하지 않으며 사용자 정보도 포함하지 않습니다.

유효한 URI의 몇 가지 예 :

Uri u = new Uri("http://www.domain.com/path");
Assert.AreEqual("www.domain.com", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com", u.GetLeftPart(UriPartial.Authority));

u = new Uri("http://www.domain.com:8080/path");
Assert.AreEqual("www.domain.com:8080", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com:8080", u.GetLeftPart(UriPartial.Authority));

u = new Uri("http://user:password@host:555/path");
Assert.AreEqual("host:555", u.Authority);
Assert.AreEqual("host", u.Host);
Assert.AreEqual("http://user:password@host:555", u.GetLeftPart(UriPartial.Authority));

에 따르면 RFC3986 , 3.2 절 당국은 포함

  1. 사용자 정보
  2. 주최자
  3. 포트 번호.

호스트와 포트 번호 만이 아닙니다.

예를 들어 다음은 유효한 URI입니다.

http://user:password@host:80/path

당국은

user:password@host:80

at 기호 (@)는 호스트에서 사용자 정보를 구분하고 콜론 (:)은 포트 번호에서 호스트를 구분합니다. 사용자 정보 내에서 콜론 (:)은 비밀번호에서 사용자 이름을 구분합니다. (예, 비밀번호 부분이 더 이상 사용되지 않음을 알고 있습니다. 선택적으로 지원 될 수도 있습니다.)

이것은 기관의 전체 사양입니다. 분명히 사용자 정보와 포트 번호는 종종 존재하지 않습니다.

.NETUri 클래스는 정확하지 않기 때문에 다소 성가신 Authority를 ​​반환 할 때 사용자 정보를 삭제합니다 . 대신 UserInfo 속성에서 사용자 정보를 찾을 수 있습니다.

Uri.UserInfo

다른 답변은 기술적으로 .NET Uri 클래스 의 경우 Uri.Authority와 Uri.Host의 차이점은 호스트에 포트 번호가 포함되지 않는다는 것입니다.

그러나 Authority는 사용자 정보도 포함 할 수 있으므로 .NET Uri 클래스에서 사용되는 방식으로 적절하게 정의되지 않았습니다 .


10

연결 한 설명서에 따르면 Authority속성은 Uri의 기본 포트와 동일하지 않은 경우 포트 번호를 포함하고 Host속성은 DNS 호스트 이름 또는 IP 주소 만 반환합니다.

나는 그것보다 더 많은 차이점이 있다고 생각하지 않습니다.


1
작은 의심 하나. localhost에서 응용 프로그램을 실행하면 URL에 포트 번호가 있지만 프로덕션에서는 URL에 포트 번호가 없습니다. 그래서 Url.Authority를 ​​자유롭게 사용할 수 있겠죠? 포트 번호가 없으면 URl.Authority가 URL.Host 권한과 동일하게 작동합니다. 그래도 URL을 올바르게 가져올 수 있습니까? 저를 안내 해주세요.
Unbreakable

0

권한에는 사용자 이름과 비밀번호도 포함될 수 있습니다.

bob : pwd@somewhere.example.com

FTP URI에 더 일반적으로 사용됨


죄송합니다. 틀 렸습니다. RFC 3986 섹션 3.2 권한 "권한 = [사용자 정보"@ "] 호스트 [": "포트]"에서
Adrien

일반 암호를 사용하는 사용자 정보는 RFC에서 더 이상 사용되지 않지만 특히 FTP URI에서 여전히 일반적으로 사용되며 IE는 여전히이를 지원합니다 (실제로 http 프록시를 통해 IE를 통해 FTP로 인증하는 유일한 방법입니다).
Adrien

4
문제는 RFC 3986. 동일하지 않은, System.URI.Authority에 관한 것입니다
브라이언
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.