Web 服务器本身不做缓存。由应用程序本身决定(服务器端)缓存如何工作。在 Django 的例子中,有许多选项可以启用缓存。
不过,高级别的是 Django 看到对 URL 的请求,生成 html 字符串作为响应,并将该字符串存储在内存(或数据库 - 取决于您设置的缓存后端)中。下一次针对同一个 URL 的请求通过时,Django 将检查该响应是否存在于缓存中,如果存在,则返回该字符串。如果没有,则重复该过程。
提供 @vary_on 装饰器背后的想法是您更改查找键以在缓存中查找响应。如果你改变了(用户,网址)。算法是这样的:
1. request /users/3/Josh
2. key = str(user) + str(url)
3. response = get_from_cache(key)
4. if response is None: response = view_function()
5. save_to_cache(key, response)
6. return response
Web 服务器没有输入到这种类型的缓存中。
另一种类型的缓存是客户端。这是将 Web 服务器配置为返回特定类型资源(如静态内容(javascript、图像等))的某些标头的地方。然后浏览器可以分析这些标头,并决定请求内容,或者使用存储在客户端的内容。然而,这通常不适用于动态内容。