我正在使用Varnish cache 6.0。6.有时我需要基于URL忽略GET参数和任何标题使缓存无效。我为此使用BAN
命令。
获取用于检索内容的命令。他们得到的结果是不同的。
curl --user login:secret 'http://example.com/v1/account/123'
curl --user login2:secret2 'http://example.com/v1/account/123?origin=abc'
BAN命令禁止两个缓存。
curl -X BAN example.com -H "X-Ban: /v1/account/123"
清漆配置
if (req.method == "BAN") {
if (!client.ip ~ purge) {
return (synth(405, "Not allowed"));
}
ban("obj.http.x-host == " + req.http.host + " && obj.http.x-url ~ " + req.http.X-Ban);
return (synth(200, "Ban added"));
}
但是,ban命令仅对第一个请求使缓存无效。第二个请求保持缓存状态。如何使以^/v1/account/123开头的所有内容无效?
我已经在本地设置上测试了它,它看起来确实可以工作,不需要任何更改。
这是初始请求,您可以看到Age:35
表示该项已在缓存中存储35秒。
➜ ~ curl -I localhost/v1/account/123\?origin=abc
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 15 May 2020 07:26:59 GMT
Content-Length: 216
x-host: localhost
x-url: /v1/account/123?origin=abc
X-Varnish: 32788 32786
Age: 35
Via: 1.1 varnish (Varnish/6.0)
Accept-Ranges: bytes
Connection: keep-alive
下一个请求使用您在VCL中描述的确切语法发布禁令:
➜ ~ curl -X BAN localhost -H "X-Ban: /v1/account/123"
<!DOCTYPE html>
<html>
<head>
<title>200 Ban added</title>
</head>
<body>
<h1>Error 200 Ban added</h1>
<p>Ban added</p>
<h3>Guru Meditation:</h3>
<p>XID: 14</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
当我再次执行初始curl调用时,Age
头被重置为零,这意味着页面没有从缓存中提供服务。这是理想的结果。
➜ ~ curl -I localhost/v1/account/123\?origin=abc
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 15 May 2020 07:40:23 GMT
Content-Length: 213
x-host: localhost
x-url: /v1/account/123?origin=abc
X-Varnish: 16
Age: 0
Via: 1.1 varnish (Varnish/6.0)
Accept-Ranges: bytes
Connection: keep-alive
这是本例使用的完整VCL。请调整后端
请确保x-host
vcl 4.0;
backend default {
.host="localhost";
.port="8080";
}
acl purge {
"localhost";
}
sub vcl_recv {
if (req.method == "BAN") {
if (!client.ip ~ purge) {
return (synth(405, "Not allowed"));
}
ban("obj.http.x-host == " + req.http.host + " && obj.http.x-url ~ " + req.http.X-Ban);
return (synth(200, "Ban added"));
}
}
sub vcl_backend_response {
set beresp.http.x-host = bereq.http.host;
set beresp.http.x-url = bereq.url;
}
问题内容: 在swift 3中建议使用带参数的GET的哪种方法? 范例: 提前致谢 ! 问题答案: 示例如何使用请求。
问题内容: 我已经看过以下SO问题,即使用AngularJS的$http服务通过GET请求发送数组,以及通过Angular $ http POST传递数据数组。但是那里建议的解决方案似乎对我不起作用。我的专门针对 数组对象 。 我有以下带有数组参数的AngularJS ajax调用 该调用生成的网址似乎不适用于我。我已经尝试了各种参数的化身,并且生成的网址(通过提琴手将其获取)如下。 我希望网址为
可能是我犯了什么愚蠢的错误。在我使用配置身份验证后,通过Chrome登录后,会出现以下错误(在本文件的底部)。对于同样有效 当我有这个的时候- 这是我的密码- 注意-但是,如果我故意提供错误的凭据,它会说“坏凭据”。
问题内容: 我是新手,所以我的代码可能会出现很多错误,但是我要实现的目标是将GET请求发送到带有 参数的服务器。鉴于我的函数有两个参数,我试图做到更多。我不确定如何将两者结合到实际的URLRequest中?到目前为止,这是我尝试过的 问题答案: 建立请求时,请求的主体没有,但是所有内容都放在URL上。要构建网址(并正确地将其转义), 您还可以使用. 唯一的窍门是,大多数Web服务都需要+转义字符百
我是Node.js和Express的新手,我一直在做一个RESTful API项目,我试图在URL中发送一个带有多个参数的GET请求: 这是我的路线: 我是这样称呼它的: 而且我也尝试过 它最终会走这条路线: 那么,我写endpoint的方式是否错误?还是我要求的方式?
这是来自3.7.4.2的N3797: 全局操作符delete[]只有两个参数,第二个参数的类型是std::size_t,这是一个常见的解除分配函数。37 37)此解除分配函数排除使用分配函数空运算符new(std::size_t,std::size_t)作为位置分配函数 这个说明对我来说不清楚。我想看看这种排除的真正例子。编译器将引发警告,或者我们遇到运行时错误?我一直在尝试编写如下内容: 我不知