许多网站都是通过Web浏览器让用户直接上传内容,但是这种方式缺乏用户与远端服务器之间的交互性,从而让他们的互动变得不那么容易。首先,在上传过程中基本没有什么反馈,有时在经历了漫长的等待后得到的唯一反馈却是一个讨厌的报错。 尽管如此,使用浏览器来上传文件还是成为被广泛接受的文件传输方式。因为用户更喜欢它的简便,而不是费劲的去使用文件传输协议(FTP)的工具。
虽然这种方式被广泛接受,但它并不能保证不出错。一个确认的微软IIS问题就是在处理大于48K的上传文件时会出现一个超时报错。有时这只是一次上传的失败,但其它时候这会让浏览器进入一个不停尝试重新发送数据的死循环。因为对于浏览器来说,没有……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
许多网站都是通过Web浏览器让用户直接上传内容,但是这种方式缺乏用户与远端服务器之间的交互性,从而让他们的互动变得不那么容易。首先,在上传过程中基本没有什么反馈,有时在经历了漫长的等待后得到的唯一反馈却是一个讨厌的报错。
尽管如此,使用浏览器来上传文件还是成为被广泛接受的文件传输方式。因为用户更喜欢它的简便,而不是费劲的去使用文件传输协议(FTP)的工具。
虽然这种方式被广泛接受,但它并不能保证不出错。一个确认的微软IIS问题就是在处理大于48K的上传文件时会出现一个超时报错。有时这只是一次上传的失败,但其它时候这会让浏览器进入一个不停尝试重新发送数据的死循环。因为对于浏览器来说,没有一种针对这种特定情况的标准响应。
这种挂起的原因是IIS使用一种如ASP的应用程序来处理客户端数据的上传。当客户端开始提交数据时,IIS将第一个48K的数据读入缓冲区,然后将其传递给应用程序进行处理。任何超出这48K的数据会处于等待状态直到应用程序请求传输,通常通过类似Request.BinaryRead(Request.TotalBytes)的命令来执行。如果应用程序没有请求,这些数据则处于等待连接状态。这是一个典型的413报错:请求实体过大。
通常,按照上述规则进行良好的编码可以避免此类问题,但某些情况下可能需要使用特定的属性设置。例如,如果你的某个站点的上传是由第三方的ISAPI扩展来处理的,它没有遵循这种做法,此时就需要进行一些调整来克服48K的限制。这个限制不是一成不变的,它通过一个名为UploadReadAheadSize的IIS元数据(metabase)属性来定义。默认值为49152K,最高可以设为4GB。如果需要的话,你可以对一个单独的站点进行设置也可以设定整个IIS服务。
这可能不是唯一需要设置的属性。你可能还需要修改maxRequestLength(在IIS6)或maxAllowedContentLength(在IIS7 +)的属性值来允许大型数据的上传,尽管它们的默认值也较大。
在某些情况下,将UploadReadAheadSize的值设为零会很有帮助。这会强制IIS将提交的内容直接流向ISAPI扩展应用来处理该请求。这可能是在解决这个问题时首先值得尝试的方法,但是你也应该注意到关闭IIS应用程序(不处理预读缓冲区)可能带来的副作用。
最后,请记住,增加UploadReadAheadSize的值会产生一个攻击面。如果这个值设置得很高,并且有人想利用通过上传文件来耗费带宽的方式攻击你的系统,他们将很容易得手。为了避免攻击,使用一个能够体现用户实际使用的值,并尽可能地坚持使用身份验证的方式,以确保上传者的身份值得信赖。
作者
Serdar Yegulalp从1994年到2001年为Windows杂志写作,覆盖了广泛的技术方面。他现在是《The Windows 2000 Power Users Newsletter》一书的出版者,辛勤钻研他擅长的Windows NT, Windows 2000 and Windows XP领域,并为TechTarget写专栏。
翻译
相关推荐
-
IT管理员应该如何管理Docker容器?
随着容器管理软件在目前容器虚拟化技术中日趋成熟,管理员应该在这方面建立自己的技术积累。
-
System Center 2016最显著的特征是什么?
虽然System Center 2016可以管理好一个非常复杂的环境,但是,在对旧版本进行更新升级之前,管理员应该评估新版本的各项功能特性。
-
活动目录备份和恢复的工具与技巧 TOP5
活动目录允许管理员通过实施和执行安全策略对用户和计算机进行管理。这里的TOP5活动目录工具与技巧可以帮助企业简化活动目录的备份和恢复过程。
-
Active Directory数据库太杂乱?ADSI Edit来清理
随着Active Directory数据库老化,系统会在局部删除用户账号、安装应用程序失败或者其他管理上的失误后积累乱七八糟的东西,以及出现崩溃现象。本文介绍如何使用ADSI Edit来清理Active Directory数据库。