Div*_*ivi 41 asp.net iis-6 http-status-code-404
我的网页上有文件上传控件.最大请求长度设置为8 MB(maxRequestLength = 8192
).我还有服务器验证,如果文件超过4MB则抛出错误.它在配置中的8MB是为用户提供的杠杆,也是为了测试应用程序的原因.
如果我上传了一个9MB的文件,我会抛出异常超出最大请求长度.,这很好,按预期工作.但是当我尝试上传一个1GB的文件时,它会显示一个HTTP 404 - 找不到文件.有人可以解释为什么会这样,我怎么能让它给我一个maxRequestLength异常?
我正在使用IIS6.
pse*_*der 66
我今天遇到了这种情况(使用IIS 7进行大文件上传时的HTTP 404),但我认为我已经完成了所有正确的配置设置.我想上传最大300MB的文件,所以我在应用程序的子文件夹中进行了以下web.config设置:
<configuration>
<system.web>
<httpRuntime maxRequestLength="307200" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="314572800" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
此配置在测试中有效,但是当我将包含web.config的更新文件复制到生产服务器时,我在上传90MB文件时收到HTTP 404错误.应用程序范围限制为30MB的较小文件工作正常,因此我知道这是某种请求大小问题.
我认为IIS有可能缓存了一些应用程序设置并且没有更新它们,所以我回收了应用程序池,之后一切都按预期工作.
use*_*702 11
我觉得这里的答案都没有解释为什么你得到404,他们只是告诉你如何解决这个问题的常见问题.
404不是由于配置错误,而是故意和记录的行为:
当请求筛选由于HTTP请求超出请求限制而阻止HTTP请求时,IIS 7将向客户端返回HTTP 404错误,并使用唯一的子状态记录以下HTTP状态之一,该子状态标识拒绝请求的原因:
HTTP Substatus Description 404.13 Content Length Too Large 404.14 URL Too Long 404.15 Query String Too Long这些子状态允许Web管理员分析其IIS日志并识别潜在威胁.
此外,当HTTP请求超过
<headerLimits>
元素中定义的标头限制时,IIS 7将向客户端返回HTTP 404错误,并带有以下子状态:HTTP Substatus Description 404.10 Request Header Too Long
这是一个旧的线程,但我想我应该添加我的经验.
我遇到了大文件上传和web api的同样问题.404.13在它到达控制器之前被抛出,因此我必须找出跳入的位置并处理这种情况.
我的解决方案是以下web.config条目:
我通过将它重定向到mvc控制器来处理404.13(它可能是一个webforms页面一样),并且常规404错误命中了我的404路径.对于404.13,responseMode ="redirect"至关重要
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" subStatusCode="13" path="/errors/filesize" responseMode="Redirect" />
<error statusCode="404" path="/errors/notfound" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
然后,在我的Errors控制器中,我有以下内容:
public ActionResult FileSize()
{
Response.StatusCode = 500;
Response.StatusDescription = "Maximum file size exceeded.";
Response.End();
return null;
}
Run Code Online (Sandbox Code Playgroud)
同样,这可能是一个常规的webforms页面.
据我所知,没有办法优雅地处理超过 IIS 的“maxRequestLength”设置。它甚至无法显示自定义错误页面(因为没有相应的 HTTP 代码可以响应)。解决此问题的唯一方法是将 maxRequestLength 设置为某个高得离谱的千字节数,例如 51200 (50MB),然后在文件上传后检查 ContentLength(假设请求在 90 秒之前没有超时)。此时,我可以验证文件是否 <=5MB 并显示友好错误。
您也可以尝试此链接。
你也可以尝试这样的事情:
private void application_EndRequest(object sender, EventArgs e)
{
HttpRequest request = HttpContext.Current.Request;
HttpResponse response = HttpContext.Current.Response;
if ((request.HttpMethod == "POST") &&
(response.StatusCode == 404 && response.SubStatusCode == 13))
{
// Clear the response header but do not clear errors and transfer back to requesting page to handle error
response.ClearHeaders();
HttpContext.Current.Server.Transfer(request.AppRelativeCurrentExecutionFilePath);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28044 次 |
最近记录: |