获取JS和PHP之间的差异

时间:2013-07-09 10:19:03

标签: php javascript browser

首先:我不是在讨论每个执行的位置,而是浏览器协议的差异是从服务器获取脚本(或者说,我真的没有线索)。

我看到一种非常奇怪的行为,我无法解释,经过几天的互联网搜索,我找不到理由。

情况如下: 我有一些最初存储在.php文件中的javscript,因为在获取脚本时需要完成一些服务器端魔术。它被浏览器调用如下:

<script language="JavaScript" type="text/javascript" src="http://myserver.com/script.php"></script>

javascript本身在加载时会进行一些AJAX调用。 在由AJAX调用激活的(PHP)脚本中,我有一个计数器来跟踪流量。

现在在某些时候,script.php完成的php魔法被删除了,我能够简单地将.php文件变成.js就像这样:

<script language="JavaScript" type="text/javascript" src="http://myserver.com/script.js"></script>

它具有完全相同的输出,并且完全相同的AJAX调用。

这是奇怪的部分:使用script.js我的计数器说有十分之一的流量有script.php。 我无法弄清楚为什么会这样做......

我检查了我的服务器的access.log,事实上,script.js获取的请求远少于script.php。当我恢复到script.php时,流量立即增加到10/10。

我在调试中遇到的主要问题是我无法重现脚本没有加载。我总是在10%的情况下让脚本加载/执行。

我试图不让script.js缓存,但这没有帮助。 我也尝试过观察这种行为是否与浏览器无关,但对我而言,它适用于FF,Chrome和IE。此外,访问日志中的useragent字符串对于告诉它实际上是哪个浏览器并不是很有帮助。

如果有人能够对此发光,我会非常感激。

[编辑] 即使js脚本来自缓存,这很好,因为它可以节省大量流量,不应该仍然执行并进行AJAX调用吗?这也不会发生(因此只有计数器显示的流量的十分之一)

[EDIT2] 我刚注意到script.php有Content-Type:application / javascript 而script.js有Content-Type:application / x-javascript 现在我不知道这是否可能导致这种行为,但我会尝试改变它。 更改它,并更改script.js和换行符,因此需要刷新并没有帮助......

2 个答案:

答案 0 :(得分:1)

这是一个棘手的问题,无法查看请求跟踪。可能的情况是,您的Web服务器不会为其中一个发布相同的缓存标头。

当您调用PHP脚本时,HTTP响应由PHP本身生成,除非明确完成,否则不会发出缓存标头。相反,当您加载JS文件或任何静态文件时,它将直接由您的HTTP服务器(Apache / nginx / ...)和标题提供,例如Date / If-Modified-Since或{ Web服务器将发出{1}}标头,以减轻负载并避免对同一版本的文件进行多次提取。

您可能需要查看这些标题以确保这是正在发生的事情。

每次都要加载脚本的常见技巧(我不确定这是你需要的)是在URL上附加一个随机参数,如下所示:

Etag

答案 1 :(得分:0)

很可能这是由于不同的缓存设置。浏览器在再次向服务器询问之前将脚本保留在缓存中的时间由HTTP缓存标头决定。对于PHP脚本,Web服务器可能配置为输出标头,导致浏览器根本不对其进行缓存,并且每次都会再次请求它。对于.js文件,默认值可能会缓存一段时间,因为.js文件通常不会经常更改。