http客户端需要访问nginx两次才能加载css个文件

http client needs to access nginx twice to load css file

我有下一个情况。我配置了 nginx 和 uwsgi。并有简单的 html 页:

html = """

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <title>GET handler</title>
   <link rel="stylesheet" type="text/css" href="http://192.168.136.129/css/style.css" >
</head>
<body>
   <table>
      <thead>
      <tr>
         <th>Parameters</th>
         <th>Item</th>
      </tr>
      </thead>
      <tbody>
         {}// Here python adds parameters.
      </tbody>
      <tfoot></tfoot>
   </table>
</body>
</html>"""

此页面由带有 uwsgi 服务器的 python 脚本修改。问题是这样的配置导致客户端需要两次访问nginx的情况:第一次加载html,第二次加载css外部文件。如果我不配置 nginx 单独加载 css 文件并从本地文件夹中放置 css 文件,如下所示:

<link rel="stylesheet" type="text/css" href="../css/style.css" >

没有任何效果。我浏览了 Whosebug 网站,有人说我需要再次连接到 http 服务器才能加载 css。 我认为它效率低下。有什么方法可以将 CSS 文件与 html 一起加载吗?

这是 HTTP 工作方式所固有的。一个网页通常需要多个请求——加载 .html.css,通常是一个或多个 .js 脚本,可能还有一些 .png 图片,等等.

HTTP/1.1 至少允许浏览器通过同一个 TCP 连接(或偶尔两个并行的连接)来处理所有这些请求,而不是建立一大堆单独的连接。在过去的几十年里,网络服务器一直在优化以解决这个问题。

HTTP/2 允许将多个请求复用到同一个流中,旨在解决这个问题。这很好,但由于它几个月前刚刚获得批准,而且大多数服务器、浏览器和客户端还不支持它(或者只是实验性地支持它),所以现在,你必须忍受 1.1。

您可以使用一些技巧来解决这个问题,但它们通常不值得。有一些方法可以在页面中直接包含 css 和 js。对于其他资源,你可以将它们转换成data: URL(这样当浏览器"requests"图像时,它不必返回到服务器,它只需要在本地解压数据内容) .因此,您可以从单独的静态文件中为每个请求动态生成一个 "all-in-one" 文件,然后将其缓存。