2010-04-28 3 views
2

HttpContext.Current.Request.Url.Host가 웹 브라우저에서 사용되는 URL과 다른 URL을 반환하는 이유는 무엇입니까? 예를 들어 브라우저에 "www.someurl.com"을 입력하면 HttpContext.Current.Request.Url.Host 변수는 "www.someotherurl.com"과 같습니다.HttpContext.Current.Request.Url.Host의 출처는 어디입니까?

+0

글쎄, 어떻게 다른가요? 그것은 당신이 http://www.cnn.com을 요구하고 있지만 "www.disney.com"을 보여주는 Url.Host이거나 거기에 적당한 패턴이 있습니까? –

+0

그들은 비슷합니다. 더 가까운 예가 이것입니다. 브라우저에 입력 된 URL은 "www.mysite.net"이지만 Url.Host 변수는 "www.mysitexy.net"을 반환합니다. 호스트 이름의 마지막 두 글자 인 "xy"가 추가됩니다. 나는 mysitexy가 방화벽 내부에서만 사용 가능하고 mysite가 방화벽 내부와 외부에서 사용할 수 있어야한다고 생각한다. –

답변

4

HttpContext.Current.Request.Url.Host은 ASP.net 응용 프로그램이받는 호스트 헤더의 내용입니다. (Host과 같은 HTTP 헤더에 대한 자세한 내용은 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html을 참조하십시오.)

일반적으로 ASP.NET에서 보는 헤더는 브라우저에서 보낸 Host 헤더와 동일합니다. 그러나 소프트웨어 나 하드웨어가 브라우저와 ASP.net 코드 사이에 있고 Host 헤더를 다시 쓰는 경우에는 일치하지 않을 수도 있습니다.

예를 들어, GoDaddy와 같은 대규모 예산 주최자는 단일 IIS 웹 사이트에서 저렴한 호스트 계획을 사용하여 여러 최상위 도메인을 지원할 수 있습니다. GoDaddy는 별도의 IIS 웹 사이트 (서버로드 및 그에 따른 비용을 추가 함)를 만드는 대신에 대한 요청을 "기본"호스팅 사이트의 가상 디렉터리 (예 : http://firstsite.com/secondsite). Host : 헤더와 URL을 모두 변경합니다.

알아 두어야 할 점은 앱에 수신중인 HTTP Request Headers의 콘텐츠를 덤핑하면 쉽게 확인할 수 있습니다.

어쨌든 누가 호스트 헤더를 변경했는지 알아 보려면 웹 응용 프로그램을 호스팅하는 사람들 (또는로드 밸런서 및/또는 역방향 프록시를 담당하는 팀)과 함께 시작하십시오. 호스트 헤더를 다시 쓰는 책임이 있습니다.

관련 문제