【问题标题】:What does a browser do when there's a javascript src file that isn't cached?当存在未缓存的 javascript src 文件时,浏览器会做什么?
【发布时间】:2018-05-22 09:45:39
【问题描述】:

它是否为指定文件发送 HTTP GET 请求?我正在尝试编写自己的 NodeJS 网络服务器,并且想知道如何处理向浏览器发送它需要的 javascript 文件。

假设我正在为我正在构建的网络应用程序使用几个 javascript 库,并且对于每个库,我的 HTML 文件的头部都有一个脚本标记(例如<script type="text/javascript" src="jquery.js"></script>)。在我的服务器中,我是否能够编写一些代码以根据请求的 src 调用不同的函数,并返回一个不一定位于 HTML 所期望的相同位置的文件?

总的来说,我对 NodeJS 和网络服务器还很陌生,所以如果这对其他人来说真的很明显,我深表歉意......

【问题讨论】:

  • 为什么是头部(而不是应该在页面底部)?
  • "并返回一个不一定与 HTML 所期望的位置相同的文件?" - 我无法理解这一点.有人可以确认这在语法上是正确的吗?

标签: javascript http node.js


【解决方案1】:

它是否为指定文件发送 HTTP GET 请求?

是的。

我正在尝试编写自己的 NodeJS 网络服务器,并且想知道如何处理向浏览器发送所需的 javascript 文件。

那就不用担心浏览器如何决定发出什么 HTTP 请求。只需实现 HTTP 规范即可。

在我的服务器中,我是否能够编写代码以根据请求的 src 调用不同的函数,并返回一个文件,该文件不一定位于 HTML 所期望的相同位置?

这听起来像是您计划根据引用标头为同一个 URI 提供不同的内容……我希望这会命中缓存并变成基于竞争条件的噩梦。不要这样做。编写您的 HTML,因此如果您需要不同的脚本,您可以从不同的 URI 请求它们。

另一方面,如果您的意思是要返回数据而不从文件系统上的文件中读取数据,那很好。客户端不关心服务器如何确定将哪些数据放入 HTTP 响应中。只要确保它是理智和一致的。

【讨论】:

  • 不,我打算为同一个 URI 提供相同的内容,只是它不一定在同一个位置,因为 URI 可能使它听起来。即,如果浏览器正在请求 src='jquery.js' 的脚本,则文件本身可能实际上位于 'files/javascript/jquery.js'。听起来会不会有问题?对我这个菜鸟来说还有一个问题:如果我收到一个对上述 URI 的 HTTP GET 请求,它在服务器上会是什么样子?在我的服务器上是否会像浏览器正在请求页面 url.com/jquery.js 一样?
  • 正如我所说。服务器如何确定响应的内容并不重要。客户不知道。 (嗯,这很重要,但前提是您希望服务器易于维护)。
  • 一个HTTP请求就是一个HTTP请求。通常没有什么可以区分对 HTML 文档的请求与对图像、脚本等的请求。
  • 好的,谢谢。我的困惑在于我第一次在这里处理与服务器技术相关的所有事情。到目前为止,我所做的一切都是客户端的,所以对我来说,HTTP 请求只是我发送的东西,然后希望最终得到我想要的东西。
  • 您是从编写自己的 HTTP 服务器开始的?欢迎来到深渊。
【解决方案2】:

它是否为指定文件发送 HTTP GET 请求?

是的。

您不必担心何时以及如何从浏览器请求资源,只需将您想要提供的资源地址映射到您想要为每个资源返回的内容。

我是否能够编写代码以根据请求的 src 调用不同的函数,并返回一个不一定位于 HTML 所期望的相同位置的文件?

当然。资源的地址和获取资源数据的物理文件之间没有直接关系,总是有一些代码在资源地址和获取数据的位置之间进行映射。当文件以与资源地址基本相同的层次结构排列时,管理资源会更容易。

【讨论】:

    【解决方案3】:
    Does it send an HTTP GET request for the specified file?
    

    正如 Quentin 所说,是的,浏览器将通过对特定 URI 的 GET 请求来请求源 HTML 中指定的每个脚本文件。

    当您的网络服务器接收到该 GET 请求时,您可以执行任何您想要为 URI 请求返回数据的操作。您不必实际从该路径返回文件。实际上,您可以解析出路径并将路径的不同部分用作请求中的数据参数(这就是现在很多 Web 应用程序所做的)。

    因此,如果请求是针对http://www.mysite.com/user/john/accountnumber,您可以在数据库中查找并获取名为"john" 的用户的帐号并返回该数据。结果不必来自实际文件或任何实际具有该路径的文件。

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 2017-10-21
      • 2023-03-26
      • 1970-01-01
      • 2011-09-12
      • 2021-10-18
      • 1970-01-01
      • 2014-02-03
      • 2014-07-29
      相关资源
      最近更新 更多