【问题标题】:Closing connection to browser early and returning respond status提前关闭与浏览器的连接并返回响应状态
【发布时间】:2011-09-19 03:27:29
【问题描述】:

我正在一个项目中实现一个自定义 IHttpModule,它过滤文件上传并提供上传状态。 我希望自定义模块早点关闭连接(不想接收对方发送的所有数据,允许很大,节省传入带宽)。

是否有可能使用 HTTP 协议?

我尝试发送“ContentLength: 0”和“Connection: close”标头,刷新响应,关闭连接(HttpWorkerRequest.CloseConnection)。

workerRequest.SendStatus(400, "Bad request");
workerRequest.SendKnownResponseHeader(HttpWorkerRequest.HeaderContentLength, "0");
workerRequest.SendKnownResponseHeader(HttpWorkerRequest.HeaderConnection, "close");
workerRequest.FlushResponse(false);
workerRequest.CloseConnection();
((HttpApplication)sender).CompleteRequest();

浏览器/firefox 响应显示“连接重置”错误消息。 没有任何迹象表明从服务器接收到任何数据/标头/状态。

提前致谢。

【问题讨论】:

    标签: c# asp.net iis connection httpmodule


    【解决方案1】:

    http 客户端仅在完成发送数据后才期望响应。您应该修改客户端以发出多个小尺寸的请求,以便可以向其发送响应,而不是让服务器关闭连接(这将无法正常工作,并且您已经测试过)。

    检查在http://slfileupload.codeplex.com/ 中实现的http 处理程序,了解它通常是如何完成的。

    【讨论】:

    • 修改客户端是不可能的,因为它必须是浏览器
    • 那么在这种情况下,浏览器也不会读取状态。发送状态没有意义。
    • 上传进度;你总是需要用 flash 或 silverlight 编写自己的客户端插件
    • 谢谢,看起来关闭连接是不合理的。我不同意你关于“总是需要插件来上传进度”的观点。我见过纯 javascript 形式的实现。
    • 我认为 Pur js 实现只能在 html5 中实现,但这还没有标准化。
    猜你喜欢
    • 2012-02-03
    • 2013-02-16
    • 2022-01-19
    • 1970-01-01
    • 2016-03-31
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多