当前位置: 代码迷 >> 高性能WEB开发 >> 关于HTTP第一次请求和缓存的有关问题
  详细解决方案

关于HTTP第一次请求和缓存的有关问题

热度:439   发布时间:2012-04-04 16:38:51.0
关于HTTP第一次请求和缓存的问题
请看以下代码:

主页面main.aspx
C# code

<%@ page language="C#" autoeventwireup="true" inherits="Default, App_Web_wubpurpf" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title></title>
<link rel="stylesheet" type="text/css" href="../css/in.css" />
<script type="text/javascript" src="../mt.js"></script>
<script type="text/javascript" src="http://www.abc.com/aa/bb/cc/mt.js"></script>
<script type="text/javascript" src="../mt.js"></script>
</head>
<body>
<iframe frameborder="0" name="if1" src="test.aspx"></iframe>
</body>
</html>


上面加载的三个JS文件是同一个JS文件。第一个和第三个重复加载。
第二个是使用绝对路径加载。
iframe页面test.aspx
C# code

<%@ page language="C#" autoeventwireup="true" inherits="Default, App_Web_wubpurpf" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title></title>
<link rel="stylesheet" type="text/css" href="../css/in.css" />
<script type="text/javascript" src="../mt.js"></script>
<script type="text/javascript" src="http://www.abc.com/aa/bb/cc/mt.js"></script>
<script type="text/javascript" src="../mt.js"></script>
</head>
<body>
</body>
</html>


iframe页面test.aspx与主页面几乎一样,只是没有iframe页面。

首先说明构造这样的页面只是要解开我心中的疑惑,这样的页面在实际中可能没有什么功能。
我的疑惑有以下几点:
1.怎样算一次完整的HTTP请求?
像这样带iframe或者frameset框架集的页面,在请求时算几次HTTP请求?
2.怎样算第一次HTTP请求?
3.由于iframe加载的JS文件与主页面加载的JS文件完全一样,
请问iframe加载的JS文件是算一次HTTP请求还是使用缓存呢?
因为我感觉主页面已经加载下来了。
4.对于重复加载的文件(不一定是JS文件)算是几个HTTP请求?
5.对于分别使用相对路径和绝对路径加载的同一个文件算是几个HTTP请求?
文件到了缓存以后,是只有一个文件吗,还是相对路径和绝对路径有自己的独立文件?

正在做页面的优化工作,发现有重复的HTTP请求存在,所以有此一问。
大家帮帮忙!知道多少说多少啊!!!
谢谢!!!

------解决方案--------------------
这个可以自己编一个小应用一试便知。
------解决方案--------------------
应该是只加载一次,你在代码中写的相对路径和绝对路径是没有区别的。
不过有一点应该注意的是,
1. <script type="text/javascript" src="../mt.js"></script>
2. <script type="text/javascript" src="http://www.abc.com/aa/bb/cc/mt.js"></script>

当你访问页面时用http://www.abc.com域名,而且你访问的页面是在
http://www.abc.com/aa/bb/cc/*这个层级的时候才是,负责../mt.js与http://www.abc.com/aa/bb/cc/mt.js是不匹配的。换句话说,如果你访问这个页面的时候用IP,那就是两次了。

1. 浏览器是通过绝对访问路径来计算的;
2. js等没有明确告知缓存有时间的,都应该直接使用缓存。
  相关解决方案