Asp.net 如果资本化不同,Chrome会对同一资产发出多个请求

Asp.net 如果资本化不同,Chrome会对同一资产发出多个请求,asp.net,image,browser-cache,capitalization,static-content,Asp.net,Image,Browser Cache,Capitalization,Static Content,我正在从事一个大型asp.net web项目,在过去几年中,有许多不同的开发人员/顾问对其进行了更改。我注意到,根据开发者的不同,图像和其他静态内容的路径可能包含正确的大小写、全小写或完全随机的内容。由于套管不同,浏览器似乎对同一资产发出多个请求。比如说- <!DOCTYPE html> <html> <head> <title></title> </head> <body> <img sr

我正在从事一个大型asp.net web项目,在过去几年中,有许多不同的开发人员/顾问对其进行了更改。我注意到,根据开发者的不同,图像和其他静态内容的路径可能包含正确的大小写、全小写或完全随机的内容。由于套管不同,浏览器似乎对同一资产发出多个请求。比如说-

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <img src="http://cdn.sstatic.net/stackoverflow/img/sprites.png" />
    <img src="http://cdn.sstatic.net/stackoverflow/Img/sprites.png" />
</body>
</html>

除了搜索项目中的每个图像和规范化外壳外,这里还有什么可以做的吗?也许我可以在页面响应标题中添加一些内容,告诉浏览器忽略大小写,等等。

好吧,浏览器(不仅仅是Chrome,任何没有错误的浏览器)必须这样做,因为它无法知道您恰好使用了不区分大小写的映射,所以
是完全不同的URI

你可以做几件事

首先查找并替换以下内容:

  • 特别常用
  • 特别重的文件
  • 尤其是拼写错误
  • 不太可能导致您发现替换会破坏无关代码的内容
  • 您可以做的另一件事是强制在处理程序中对事例进行规范化,当为与事例规范化规则不匹配的URI调用该处理程序时,301的形式与该URI不匹配。这意味着,与抓取3个不同的10kb图像不同,您将抓取1个10kb图像,并有2个或3个几百字节的重定向。这就是说,低于某个文件大小时,额外请求的成本将超过节省的成本


    最后,您可以在预呈现步骤中使用过滤器(Response.filter设置为的流对象,写入Response.filter的上一个值)或代码来扫描本地URI(如果更改其他站点上URI的大小写,则可能会导致404)并正确输出它们。

    清理标记,使指向同一资源的链接完全相同。@Oded-我同意这样做是正确的,但我要问的问题是是否有其他选择。我的客户希望澄清这一点,但他们不会同意梳理整个解决方案中引用的~2500个资产和CMS中数千个内容页所需的工作量。这些资产是如何存储的?它们都是HTML文件吗?指向图像/脚本/css/等的链接存在于web表单控件中,以及CMS中手动输入的字段中(在运行时通过API添加到aspx/ascx)。使用HTML Agility Pack,您可以清理CMS中出现的HTML片段(假设您可以访问备份数据库)-这可以自动化。剩下的控件不会有那么多工作。