这是我的AJAX功能:
function ajax(url, data) {
return new Promise((resolve, reject) => {
$.ajax({
url: "https://xxx",
data: data,
method: 'POST',
timeout: 50000,
cache: true,
ifModified: true,
crossDomain: true,
success: (data, textStatus, jqXHR) => {
if (data == '@fail@') reject(data);
else {resolve(data);}
},
error: (jqXHR, textStatus, errorThrown) => {
reject(errorThrown);
}
});
});
}
在Chrome中观察到 - >网络(F12),这是服务器的响应头:
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: text/html; charset=utf-8
Content-Length: 3
ETag: W/"3-R7zlx09Yn0hn29V+nKn4CA"
Date: Fri, 06 Apr 2018 11:39:41 GMT
Connection: keep-alive
请求标头始终相同,即使在后续调用中也是如此:
POST /register HTTP/1.1
Host: xxx:60001
Connection: keep-alive
Content-Length: 0
Accept: */*
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Referer: http://localhost:8000/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Chrome不应该在收到ETag标头后缓存资源并设置“如果 - 无匹配”。后续调用同一个URL的标题?我不能获得304而不是200的状态代码,因为返回的内容是相同的吗?
对其他服务器(如Google Map服务器)中的资源的调用有时会返回304。
答案 0 :(得分:0)
This确认缓存通常仅限于GET请求方法:
但是,常见的HTTP缓存通常仅限于缓存对GET的响应,并可能拒绝其他方法。主缓存密钥由请求方法和目标URI组成(通常只使用URI,因为只有GET请求是缓存目标)