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" 文件,然后将其缓存。
我有下一个情况。我配置了 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" 文件,然后将其缓存。