如何让浏览器使用缓存而不是从服务器重新加载?

时间:2016-06-23 18:57:24

标签: django http http-headers request-headers response-headers

我有一个搜索结果页,当用户点击结果时,然后点击后退按钮,我希望它从缓存加载搜索结果而不是去服务器,有点像谷歌这样做。我发送HTTP标头:

Date: Thu, 23 Jun 2016 18:53:05 GMT
Server: WSGIServer/0.1 Python/2.7.9
Vary: Cookie
Last-Modified: Wed, 22 Jun 2016 00:00:00 GMT
ETag: a
Cache-Control: public, max-age=300
X-Frame-Options: SAMEORIGIN
Content-Type: text/html; charset=utf-8

但是当我使用后退按钮导航回结果时,它从服务器检索页面,在这种情况下,它是在我的笔记本电脑上运行的开发Django服务器。

1 个答案:

答案 0 :(得分:0)

你试过.htaccess吗? 在.htaccess中设置Expires和Cache-Control可以解决这个问题。 失效:

<ifModule mod_headers.c>
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(css)$">
    Header set Cache-Control "public"
  </filesMatch>
  <filesMatch "\.(js)$">
    Header set Cache-Control "private"
  </filesMatch>
  <filesMatch "\.(x?html?|php)$">
    Header set Cache-Control "private, must-revalidate"
  </filesMatch>
</ifModule>

和缓存控制:

import React from 'react';
require('./Headings.css');

let HeadingMixin = HeadingComponent => class extends React.Component {
  constructor(props){
    super(props)
  }
  render() {
    return <HeadingComponent {...this.props} />
  }
}

function Heading(props){
  return (<h1 className={`${props.type}Heading`}>{props.text}</h1>)
}

Heading.propTypes = {
  text: React.PropTypes.oneOfType([
      React.PropTypes.string,
      React.PropTypes.element,
  ]),
  type: React.PropTypes.oneOf(['page', 'modal', 'sub', 'section']).isRequired,
}

export default Heading;