内容类型文本/ HTML未缓存

时间:2015-10-12 13:11:17

标签: php jquery json ajax

我的情况很简单。我正在使用jQuery的ajax方法来获取一些数据。

当我在url中引用“api.json”时,我会得到带有etag,缓存控制等的正确响应头。内容类型也是“application / json”

但是当我在url中引用“api.php”时,响应头更改,这次没有etag,没有缓存控件,内容类型也是“text / html”(可以理解)。

在该php文件中,使用json_encode()正确格式化返回的数据。

我不明白的是,为什么etag和其他缓存标题行为不端?

如何让他们正确缓存?

1 个答案:

答案 0 :(得分:0)

除非服务器在其响应中包含Access-Control-Expose-Headers标头,其值为“ETag”,否则客户端代码将无法访问跨源响应中存在的ETag标头。任何“非简单”响应标头都是如此。

来自CORS

  

7.1.1处理对跨源请求的响应用户代理必须过滤掉除简单响应头之外的所有响应头,或者其中一个值的字段名称是ASCII不区分大小写的匹配在将响应头暴露给CORS API规范中定义的API之前,Access-Control-Expose-Headers头(如果有的话)。

简单的响应标头仅限于:

  1. 缓存控制
  2. 内容的语言
  3. 内容类型
  4. 过期
  5. 上次修改
  6. 附注
  7. 客户端需要在响应中访问的所有其他标头必须通过我上面提到的响应标头“公开”。