google-chrome - Chrome 不缓存预检

标签 google-chrome caching cors preflight

我正在实现一个应该支持跨域请求的 REST API。使用 CORS 我想实现这一点。我的几乎所有请求都“不简单”,这意味着对于所有非 GET 请求,必须由浏览器发送预检请求。

为了限制预检/OPTIONS 请求的数量,我尝试让浏览器缓存 OPTIONS 请求。这似乎适用于 Firefox 和 Safari,但不适用于 Chrome。我知道 Chrome 只会缓存预检请求 10 分钟,但就我而言,似乎根本没有缓存发生。

这些是 Chrome 发送/接收的 HTTP 请求和响应:

要求:

OPTIONS /api/v1/sessions HTTP/1.1
Host: xxxxxxx
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:8000/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4

回复:
HTTP/1.1 200 OK
Date: Sun, 26 Jul 2015 09:33:27 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.9
Cache-Control: private, max-age=1440, pre-check=1440
Access-Control-Allow-Origin: http://localhost:8000
Access-Control-Allow-Methods: GET,POST,PATCH,DELETE
Access-Control-Max-Age: 86400
Access-Control-Allow-Headers: content-type
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

最佳答案

您有 Pragma: no-cache & Cache-Control: no-cache请求中设置的 header 。
尝试删除它们。

默认情况下,Api 请求不设置这些 header ,我怀疑 chrome 是否设置
任何一个。
您应该检查您的代码并找出它们的位置
设置从。

现在,鉴于它在其他浏览器上工作正常,您最好检查是否设置了 no-cache Dev Tools 上的选项.

关于google-chrome - Chrome 不缓存预检,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31635558/

相关文章:

javascript - Chrome : eventHandler ('click' , 函数)不适用于复选框

php - APC 将数据存储在哪里?

spring - 如何在 Spring MVC 中为错误响应启用 CORS?

Javascript CORS 被阻止但仍显示数据包捕获中的数据

如果服务返回错误,Nginx 服务跨域请求失败

javascript - Chrome 开发者工具可确定代码中何处执行 REST 调用?

Chrome 上使用 ARC 的 Android 应用程序,启用后退按钮在顶部

css - Firefox 不应用计算样式

Asp.net 在客户端缓存下拉数据

ios - AlamoFire 5.0 强制永久缓存