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

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

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



답변

예 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


답변

MSDN URI.Host 페이지에서.

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


답변

모든 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참조하세요 .


답변

.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 클래스에서 사용되는 방식으로 적절하게 정의되지 않았습니다 .


답변

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

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


답변

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

bob : pwd@somewhere.example.com

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


답변