javascript - 为什么重复的脚本标签不会产生重复的请求?

标签 javascript http loading

我有一个非常简单的测试用例(以及 3 小时的谷歌搜索和流感)

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>Два внешних скрипта</title>
</head>
<body>
    <script type="text/javascript" src="http://example.com/myscript.js"></script>
    <script type="text/javascript" src="http://example.com/myscript.js"></script>
</body>
</html>

服务器返回以下响应头

Connection: keep-alive
Expires: Mon, 04 Dec 1999 21:29:02 GMT
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Pragma: no-cache

这段在 chrome 中执行的代码会向服务器发出一个请求,在 opera、safari win 中也是如此。

这种行为是标准的吗?

是否有关于此行为的任何官方文档?

这是 cashe 问题吗,因为我认为您仍然会收到带有 304 响应的请求?

免责声明:请不要建议随机化或避免此问题。我想了解这个问题的背景

最佳答案

发生这种情况的原因有两个。第一个是内容提供者可以设置 expires 标题,这样浏览器就不会发出第二个请求,第二个是浏览器实际上如何处理 HTTP 中的 GET 请求,例如包含脚本的 get 请求。

1。设置过期内容头

内容提供者可以设置Expires header 以便脚本第一次被浏览器缓存,因此没有第二次请求。这是加速网页的良好标准 Web 实践,过期 header 由脚本的主机服务器设置。 Yahoo Developer 在 Add an Expires or a Cache-Control Header 上有一篇关于此的好文章除了图像之外,它还建议将 Expires header 添加到脚本和样式表中。

2。 Script Get 方法是幂等的

GET 请求,例如在网页上包含 javascript 的 get 请求,根据 HTTP 规范是安全的方法。安全方法也是幂等的,因为多个请求产生与单个请求相同的结果,并且该方法仅用于检索数据。许多浏览器利用 HTTP 规范的这个属性,不会发送多个幂等方法请求。 George Cummins 很好地解释了这一点,有关这方面的文章可从 Mozilla Developer Network 获得。 .

关于javascript - 为什么重复的脚本标签不会产生重复的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084470/

相关文章:

javascript - 从日期和时间中减去小时数

web-services - 类级别和方法级别的@Path配置

php - 如何在浏览器中运行http url后通过echo显示结果

django - 如何使用 django-piston 返回状态码非 200 的对象?

html - 烦人的图片加载 (HTML/CSS)

javascript - 函数的 jQuery 参数

javascript - 防止 window.opener.location.href 表单重新加载父级

javascript - 悬停时 Bootstrap 下拉菜单不起作用,我做错了什么?

java - 如何使用 For 循环从数据库中拆分不同 LinearLayout 中的名称

java.io.IOException : Not in GZIP format with class. getResourceAsStream() 异常