HttpWebRequest.Address vs HttpWebResponse.ResponseUri - PullRequest
1 голос
/ 18 ноября 2009

В чем разница между этими двумя свойствами?

Чтобы поместить в контекст, я определяю, происходит ли перенаправление, если наш ResponseUri! = RequestUri.

Несмотря на то, что перенаправление происходит независимо от URL, http://adage.com/adages/article?article_id=140560 предоставит другой ResponseUri (http://adage.com/adages/post.php), чем адрес (http://adage.com/adages/post?article_id=140560).

Похоже, что ResponseUri берет заголовок Content-Location и использует его, пока адрес поддерживает правильное местоположение.

Правильно ли сравнивать RequestUri с HttpWebRequest.Address для проверки перенаправлений?

Ответы [ 3 ]

2 голосов
/ 19 ноября 2009

Да, сравнение request.RequestUri и request.Address - путь. По крайней мере, в Mono response.ResponseUri совпадает с request.Address.

1 голос
/ 07 марта 2014

Я знаю, что это старый вопрос, но я нашел его во время исследования этой темы и заметил, что на самом деле на него не ответили правильно.

Хотя HttpWebRequest.Address и HttpWebResponse.ResponseUri должны всегда быть одинаковыми, вот разница:

  • HttpWebResponse.Address вернет Uri страницы, которая действительно отвечает
  • HttpWebResponse.ResponseUri вернет значение заголовка Content-Location (если имеется). Хотя в документации явно не указано, что произойдет, если заголовок Content-Location отсутствует, предполагается, что он будет использовать то же значение, что и Address.

Помните, что заголовки HTTP можно подделать, поэтому Microsoft рекомендует использовать Address вместо ResponseUri по соображениям безопасности.

http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.responseuri.aspx

0 голосов
/ 18 ноября 2009

Задумывались ли вы о настройке request.AllowAutoRedirect = false и повторном запросе на перенаправление?

Сравнение Uri также должно работать нормально, хотя я не уверен во всех крайних случаях

...