Tag: http headers

如果发生exception,“Content-encoding”标头将从HttpHandler响应中消失

我有一个自定义的HttpHandler,我在其中手动启用输出压缩,如下所示: context.Response.AppendHeader(“Content-encoding”, “gzip”); context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress); 这适用于大多数请求,但遇到exception时,“内容编码”标头会从响应中消失,而压缩filter仍保留在原位。 结果是错误页面被gzip压缩,但是浏览器没有收到表示该事实的标题。 然后浏览器尝试将仍然压缩的数据显示为文本,即gobbledygook 。 完整的测试用例代码如下所示。 尝试交替禁用压缩或不抛出exception。 有人可以解释为什么“内容编码”标题消失了吗? 我想我可以简单地启用压缩作为处理程序的最后一件事,因此如果遇到exception,它永远不会到达添加压缩filter的点; 但我看到的行为让我感到害怕。 谁能确认一下? public class TestHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { CompressResponse(context); context.Response.Write(“Hello world”); // Throw an exception for testing purposes throw new Exception(“Just testing…”); } private void CompressResponse(HttpContext context) { string acceptEncoding = context.Request.Headers[“Accept-Encoding”]; if (String.IsNullOrEmpty(acceptEncoding)) […]

如何在ASP.NET应用程序中发送HTTP标头时如何判断?

长话短说,我有一个ASP.NET应用程序,我正在尝试调试,在某些情况下,在非常特殊的情况下,应用程序将在Response.Redirect()处抛出exception,说明: “Cannot redirect after HTTP headers have been sent.” 我或多或少得到了,除了我无法弄清楚标题的发送位置。 是否有一些东西要在ASP.NET应用程序中查找,表明HTTP标头已被发送? 奖金难度: ASP.NET应用程序仍在.NET 1.1中。 关于升级延迟的情况是一个非常痛苦的主题。

使用HttpListener处理范围请求

我编写了一个自定义HTTP服务器,它可以正常工作,直到浏览器发出一个字节范围的请求。 在尝试加载video时(看似某些大小的文件因为每次都不会发生),浏览器会使用此标头请求video文件: method: GET /media/mp4/32.mp4 Connection – keep-alive Accept – */* Accept-Encoding – identity;q=1/*;q=0 Accept-Language – en-us/en;q=0.8 Host – localhost:20809 Referer – … Range – bytes=0- User-Agent – Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.170 Safari/537.36 所以服务器发送请求的文件……然后,之后立即发出请求: method: GET /media/mp4/32.mp4 Connection – keep-alive Accept – */* Accept-Encoding – identity;q=1/*;q=0 Accept-Language – en-us/en;q=0.8 […]

在Asp.net Web API中处理CORS预检

我的架构中有三个应用程序。 它们位于同一台服务器上,但具有不同的端口号。 A – Token Application (port 4444) – Asp.net WebApi B – API Application (port 3333) – Asp.net WebApi C – UI Application (port 2222) – AngularJS App. 申请流程如下 1- UI项目从令牌应用程序获取令牌(它需要Windows awxrsdsaWeffs12davalidation。)例如: awxrsdsaWeffs12da 2- UI应用程序将此标记放入自定义标头,该标头名为“accessToken” 例如:accessToken: awxrsdsaWeffs12da 3- UI应用程序向API Application Ex发送请求: http:myaddress:3333/api/TheRestServiceHere UI应用程序获得401错误。 哪个发送OPTIONS方法。 (我想预检问题) 在我的web api项目中,我启用了如下所示的Cors。 public static void Register(HttpConfiguration config) { …. […]

如何在c#中正确发送KeepAlive头?

我需要使用HttpWebRequest发送这样的请求: POST https://sap.site.com.mx/sap/bw/BEx?SAP-LANGUAGE=ES&PAGENO=1&CMD=PROCESS_VARIABLES&REQUEST_NO=0&CMD=PROCESS_VARIABLES&SUBCMD=VAR_SUBMIT&VARID= HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-MX,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Connection: keep-alive 但是,我无法发送Connection标头。 这是我的代码: // request HttpWebRequest request = CreateWebRequestObject(url); request.CookieContainer = this.cc; request.UserAgent = “Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2”; // headers request.Headers.Add(“Accept-Encoding”, “gzip, deflate”); request.Headers.Add(“Accept-Language”, ” es-MX,es;q=0.8,en-us;q=0.5,en;q=0.3″); request.Accept = “text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”; request.KeepAlive = true; […]

将标头cookie字符串映射到CookieCollection,反之亦然

考虑使用此标头的Web响应: Set-Cookie: sample=testCookie; Domain=.sample.com; Expires=Tue, 25-Jan-2012 00:49:29 GMT; Path=/ 此标头将映射到.NET CookieCollection 。 而且当我们处理CookieCollection它最终会转换为这样的header string 。 我正在寻找某种方式纯粹以两种方式进行这种转换。 当然, .NET在它的内部库中有它。 我相信任何从文本构造对象模型的类,反之亦然,应该支持两种方法(这里是CookieCollection ): // Creating cookie collection from header text CookieCollection.TryParse(cookieHeaderString, out myCookieCollection); // and getting the final header which would be sent by request String cookieHeaderString = myCookieCollection.GetCookieHeaderString(); 如何使用CookieCollection实现这一目标?

建议在上传时检查文件大小的方法

我正在开发一个支持文件上传的Web应用程序。 我已经熟悉检查服务器端的大小,但我想检查客户端的文件大小。 我知道它的浏览器限制,出于安全原因我们无法访问文件属性。 所以我尝试了swfupload和uploadify组件。 两者都很好,满足需求。 但限制是取决于闪存,所以如果我的最终用户没有安装闪存,那么我最终会遇到问题。 要求他们安装闪存是另一回事,但它的门户网站和用户群非常庞大。 所以我不喜欢让他们安装flash的想法。 今天我遇到了gmail中的文件上传function。 并且在没有安装闪存的情况下在浏览器(IE)中进行了测试 我发现的很有趣。 如果您上传了一个大文件,他们会进行回发并立即返回文件大小过大的消息。 如何实现,如何在不下载整个内容的情况下找到文件的大小。 我相信这必须通过阅读HTTP标头信息来完成。 我对吗? 所以这就是我想要实现的确切function。 如果已经安装了闪存,我可以使用uploadify来检查大小,否则可能会实现谷歌使用的从未听过的技术。 谁能推荐我怎么做? 以前任何人都遇到过类似的问题,你做了什么? 更新: 使用FF安装的Flash上​​传Gmail IE中没有flash

从IIS 7/8中的静态内容中删除服务器标头

作为努力使我们的API和网站更安全的一部分,我正在删除泄漏有关网站运行信息的标题。 剥离标题之前的示例: HTTP/1.1 500 Internal Server Error Cache-Control: private Content-Type: text/html; charset=utf-8 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Wed, 05 Jun 2013 00:27:54 GMT Content-Length: 3687 Web.config文件: 的Global.asax.cs: protected void Application_PreSendRequestHeaders() { Response.Headers.Remove(“Server”); Response.Headers.Remove(“X-AspNet-Version”); Response.Headers.Remove(“X-AspNetMvc-Version”); Response.AddHeader(“Strict-Transport-Security”, “max-age=300”); Response.AddHeader(“X-Frame-Options”, “SAMEORIGIN”); } 之后,对网站和API的所有调用都会返回更安全的标头,如下所示: HTTP/1.1 500 Internal Server Error Cache-Control: private Content-Type: text/html; charset=utf-8 Date: Wed, 05 […]

取消共享Webbrowser控件的会话Cookie

我的程序中有多个webbrowser控件,它们共享会话cookie。 我想要的是他们不共享会话cookie。 我有不同的webbrowser控件,用不同的帐户打开同一个网站,或打开在会话中存储不同数据的同一个网页。 任何人都有任何想法?

在WinRT和C#中使用HttpRequestHeaders

我正在使用HttpWebRequests联系API并需要添加标头,但编译器告诉我该方法不存在。 然而,当我检查MSDN时,它告诉我该方法已经存在。 设置我的UserAgent属性也会失败。 有人可以帮我吗? try{ HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(url); wr.Method = “GET”; wr.Headers.Add(System.Net.HttpRequestHeader.Authorization, string.Format(“Bearer {0}”, _accessToken)); wr.UserAgent = _appNameAndContact; var resp = (System.Net.HttpWebResponse) await wr.BetterGetResponse(); if (resp.StatusCode == System.Net.HttpStatusCode.OK) { using (var sw = new System.IO.StreamReader(resp.GetResponseStream())) { var msg = sw.ReadToEnd(); User usr = JsonConvert.DeserializeObject(msg); //var results = JSONHelper.Deserialize(msg); return usr; } } }