JQuery XmlHttpRequest Cache-Control игнорируется - PullRequest
16 голосов
/ 17 марта 2012

Я использую Google Chrome, и я заметил, что каждый раз, когда я делаю запрос XHR, я получаю следующие заголовки на запрос:

Cache-Control: no-cache
Pragma: no-cache

Если вы читаете спецификацию в http://www.w3.org/TR/XMLHttpRequest/ он говорит следующее

Если пользовательский агент реализует HTTP-кэш, он должен учитывать заголовки Cache-Control в заголовках запросов автора (например, Cache-Control: no-cache обходит кэш).Он не должен отправлять заголовки запросов Cache-Control или Pragma автоматически, если только конечный пользователь явно не запрашивает такое поведение (например, путем перезагрузки страницы).

Хорошо, я пытаюсь сделать следующее:

$.ajax(myUrl, {
    type: 'get',
    dataType: 'json'
    cache: true,
    headers: {
      'Cache-Control': 'max-age=200' 
    }
  })

Как видите, я явно устанавливаю заголовок Cache-Control в надежде получить кэшированную копию моего ресурса.Ну, похоже, Chrome игнорирует заголовок Cache-Control.

Можно ли не отправлять заголовок Cache-Control: no-cache при выполнении запроса XHR?

Ответы [ 2 ]

47 голосов
/ 26 марта 2012

Это была глупая ошибка. У меня были Инструменты разработчика для "Отключить кэш". Вот почему всегда добавлялся заголовок кеш-контроля. Если это когда-либо случится с вами, убедитесь, что флажок не установлен.

Raul

4 голосов
/ 17 марта 2012

Я только что проверил, и ваш код работает нормально, за исключением пропущенной запятой.

Откройте вкладку сети, затем попробуйте это в консоли на этой странице:

$.ajax('http://stackoverflow.com/', {
    type: 'get',
    dataType: 'json',
    cache: true,
    headers: {
        'Cache-Control': 'max-age=123' 
    }
})

Снова проверьте вкладку сети, щелкните только что сделанный запрос и перейдите на вкладку «Заголовки». Вы увидите, что запрос был отправлен с указанным вами заголовком Cache-Control.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...