意外的缓存请求标头和304状态

时间:2013-06-14 15:18:01

标签: c# http iis https authorization

我有一个带有WebBrowser控件的WPF窗口。我想导航到需要身份验证的页面,但我想自动登录用户。

byte[] authData = Encoding.UTF8.GetBytes(UserName + ":" + Password);
_header = "Authorization: Basic " + Convert.ToBase64String(authData);
Browser.Navigate(url, string.Empty, null, _header);

问题是即使我提供了Authorization标头,WebBrowser仍会提示输入用户名和密码。我将代码中的用户名和密码输入到提示中,然后我进行了身份验证(所以我没有任何错别字)。

该站点在IIS中运行,具有基本身份验证和https。

在fiddler中观看流量后,我看到的第一个请求有一个304状态代码,并且存在Authorization标头。此请求之后是第二个返回401状态代码的请求。对于此请求,没有Authorization标头。

任何人都知道下面的缓存标头来自哪里?我没有添加它们,我认为它们导致了这个问题。

来自Fiddler的第一个请求标题

  

缓存 If-Modified-Since:Tue,2013年6月4日19:52:22 GMT If-None-Match:   “527fa775d61ce1:0”

     

客户端接受: / 接受编码:gzip,deflate接受语言:en-US用户代理:Mozilla / 4.0(兼容; MSIE 7.0; Windows NT) 6.1;   WOW64;三叉戟/ 6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729;   .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E;   AskTbORJ / 5.15.23.36191; MDDRJS)

     

Cookies /登录授权:基本T25saW5lSGVscFVzZXI6SG93Q2FuSUhlbHBZb3Uh

     

传输连接:Keep-Alive Host:docs.newcenturysoftware.com

来自Fiddler的第二个请求标题

  

客户端接受: / 接受编码:gzip,deflate接受语言:用户代理:Mozilla / 4.0(兼容; MSIE 7.0;   Windows NT 6.1; WOW64;三叉戟/ 6.0; SLCC2; .NET CLR 2.0.50727; 。净   CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C;   .NET4.0E; AskTbORJ / 5.15.23.36191; MDDRJS)

     

其他参考者:https://docs.newcenturysoftware.com/

     

传输连接:Keep-Alive Host:docs.newcenturysoftware.com

如果您需要任何其他信息,请与我们联系。感谢。

修改 如果下面的评论中提到的重定向的这种预期行为,也许更好的问题是为什么重定向首先发生?我们可以在IIS中更改设置以防止重定向吗?

第一个请求是https://docs.newcenturysoftware.com/ 第二个请求是https://docs.newcenturysoftware.com/welcome.png(只是默认的iis图像)。

注意 - 当我浏览IE或Chrome中的页面时,我没有获得重定向。

使用“修复”编辑2

由于防火墙重定向是预期的重定向,并且在重定向上似乎也需要删除的授权标头,我通过监听Browser.Navigated事件并使用标头信息再次重新发送请求来修复我的代码。 / p>

void BrowserNavigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        //Handle the dropped authorization header for the first request (because of firewall redirect) 
        //and resend the request with the authorization again.
        _docWindow.Browser.Navigate(e.Uri, string.Empty, null, _header);
        _docWindow.Browser.Navigated -= BrowserNavigated;
    }

0 个答案:

没有答案