.net Http和文件上传-它到底是如何工作的(在幕后)
好吧,这可能看起来有点像一个noob问题,但我认识的许多Web开发人员都不完全了解这个问题 基本上,如何使用FileUpload控件的Upload事件将文件从网页文件输入框上载到web服务器(例如托管.net站点) 我的理解是,向服务器发送了一条请求流的帖子,然后将其传递回浏览器,并开始将数据流传输到服务器 我的朋友说,他的理解是,浏览器将整个文件编码到post请求中,然后将(大量)post发送到服务器 我认为这种情况不可能发生,因为在服务器收到完整的帖子之前,服务器将无法执行任何操作,此时它还不如将文件保存到磁盘上.net Http和文件上传-它到底是如何工作的(在幕后),.net,html,http,file-io,streaming,.net,Html,Http,File Io,Streaming,好吧,这可能看起来有点像一个noob问题,但我认识的许多Web开发人员都不完全了解这个问题 基本上,如何使用FileUpload控件的Upload事件将文件从网页文件输入框上载到web服务器(例如托管.net站点) 我的理解是,向服务器发送了一条请求流的帖子,然后将其传递回浏览器,并开始将数据流传输到服务器 我的朋友说,他的理解是,浏览器将整个文件编码到post请求中,然后将(大量)post发送到服务器 我认为这种情况不可能发生,因为在服务器收到完整的帖子之前,服务器将无法执行任何操作,此时它还
那么,从浏览器到服务器究竟是如何工作的呢?我认为你的朋友是对的,文件被编码到发送到服务器的帖子中。如果你真的想知道它到底是如何工作的,试着在Firefox中使用查看实际的post数据 预计到达时间:
AJAX风格通过在隐藏的iframe中执行帖子,然后使用AJAX请求在服务器端检查上传进度来上传您提到的工作。您的朋友是对的。如果你想要一个AJAX进度条,你必须跳过一些障碍 通常,该技术是将iframe内的上载发布到服务器上的IHttpHandler,IHttpHandler将服务器上的进度存储在服务器范围的字典中,该字典由客户端组成的标识符键入,并包含在AJAX进度请求和上载发布中。这样,当客户机发出AJAX请求时,处理该请求的服务器代码可以从该字典中读取值,以查看服务器已经处理了多少字节的文件POST请求
是的,这很复杂:)好吧,我的同伴说的话我很确定是对的,但是httphandler必须先收到帖子,然后才能做任何事情?到这个时候,它已经拥有了整个帖子。或者httphandler是否在网络级别工作并截获数据包?您可以进一步解释吗?一些服务器可以在读取头之后但在读取数据之前开始处理请求。我使用的一些框架将请求体作为流提供(除非解析头等)。当然,大多数请求处理程序在请求被完全读取之前都不会返回响应。我不确定在httphandler上调用ProcessRequest()时是否下载了整个帖子,但我找不到任何真正的文档来说明这种或那种方式。这就是我遇到的问题。我认为这是有意义的,但它表明httphandler在网络级别上工作,可以检测部分post的传入数据包?httphandler可能不在“网络级别”上工作,但它们可以在低于标准页面的级别上工作。在普通页面上,在服务器上完全加载帖子之前,事件处理代码不会运行。在IHttpHandler中,您可以在数据到达时对其进行处理,但您会丢失页面生命周期为您提供的所有自动功能。