内容类型没有缓存文本/HTML


Content-Type Text/HTML is not cached

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

当我提到"api。在url,我得到适当的响应头与etag,缓存控制等。内容类型也是"application/json"

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

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

我不明白的是,为什么etag和其他缓存头行为不当?

如何使它们能够正确缓存?

客户端代码无法访问跨域响应中的ETag报头,除非服务器在其响应中包含一个Access-Control-Expose-Headers报头,其值为"ETag"。对于任何"非简单"的响应头都是如此。

从歌珥

7.1.1处理跨域请求的响应在将响应头暴露给CORS API规范中定义的API之前,用户代理必须过滤掉所有的响应头,除了那些简单的响应头或字段名与Access-Control-Expose-Headers头(如果有的话)的值之一匹配的ASCII大小写不敏感的响应头。

简单的响应头限制为:

  1. cache - control
  2. 内容语言
  3. 内容类型
  4. last - modified
  5. 杂注

客户端需要在响应中访问的所有其他报头必须通过我上面提到的响应报头"公开"。