4

I would like my Spring Controller to cache the content which returns. I have found a lot of questions how to disable caching. I would like to know how to enable caching. My Controller looks like this one:

@Controller
public class SimpleController {

    @RequestMapping("/webpage.htm")
    public ModelAndView webpage(HttpServletRequest request, 
                                HttpServletResponse response) {
        ModelAndView mav = new ModelAndView("webpage");
        httpServletResponse.setHeader(“Cache-Control”, “public”);
        //some code
        return mav;
    }
}

As you can see I have added the line: httpServletResponse.setHeader(“Cache-Control”, “public”); to set caching but in my browser when I refresh this page I am still getting the same status result: 200 OK. How can I achieve result 304 not modified? I can set annotation @ResponseStatus(value = HttpStatus.NOT_MODIFIED) on this method but will it be only status or also actual caching?

4

1 に答える 1

8

14.9.1 キャッシュ可能なものを引用:

public- 通常は非共有キャッシュ内でのみキャッシュ不可またはキャッシュ可能であっても、応答が任意のキャッシュによってキャッシュされる場合があることを示します。

基本的にこれCache-Control: publicでは十分ではありません。HTTPS など、通常はキャッシュされていないリソースをキャッシュするようブラウザに要求するだけです。

HTTP でのキャッシングは実際には非常に複雑で、他にもいくつかのヘッダーが関係しています。

  • Cache-Control- 上記で説明

  • Expires- 指定されたリソースが古いと見なされる場合

  • Last-Modified- リソースが最後に変更されたのはいつか

  • ETag- リビジョンごとに変更される、リソースの一意のタグ

  • Vary- 異なるヘッダーに基づく個別のキャッシング

  • If-Modified-SinceIf-None-Match、 ...

Caching Tutorialはかなり包括的であることがわかりました。すべてのヘッダーが一緒に使用されるわけではなく、何をしているのかを本当に確認する必要があります。したがって、 EhCache web cachingなどの組み込みソリューションを使用することをお勧めします。

また、そのような低レベルの詳細でコントローラーを汚染することはお勧めできません。

于 2012-10-21T11:55:50.743 に答える