有没有办法只缓存 GET Ajax 请求?

有没有办法只缓存 GET Ajax 请求?

通常我在 nginx 配置规则中不允许缓存所有 XMLHttpRequest:

map $http_x_requested_with $nocache_01 {
    default         0;
    XMLHttpRequest  1;
}

有没有办法只缓存 GET Ajax 请求?

答案1

使用 $request_method

它没有显示,但假设配置中有一个 if 块,如下所示:

if ($nocache_01) {
    ...
}

相反,通过将此变量与请求方法连接起来,可以进行更明确的检查,即:

if ($nocache_01$request_method = "1GET") {
    ...
}

或者,例如根本不使用地图:

if ($http_x_requested_with$request_method = "XMLHttpRequestGET") {
    ...
}

答案2

谢谢AD7六提示。现在,我的地图看起来就像这样。

map $http_x_requested_with$request_method $nocache_01 { default 0; XMLHttpRequestGET 0; ~XMLHttpRequest(PUT|PATH|DELETE|POST) 1; }

这意味着 XMLHttpRequest(PUT|PATH|DELETE|POST) 将不会被缓存

fastcgi_no_cache $nocache_01; fastcgi_cache_bypass $nocache_01;

相关内容