Как кэшировать ответ HTTP POST? - PullRequest
9 голосов
/ 06 октября 2010

Я хотел бы создать кэшируемый HTTP-ответ для запроса POST.

Моя фактическая реализация отвечает на запрос POST следующим образом:

HTTP/1.1 201 Created
Expires: Sat, 03 Oct 2020 15:33:00 GMT
Cache-Control: private,max-age=315360000,no-transform
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 9
ETag: 2120507660800737950
Last-Modified: Wed, 06 Oct 2010 15:33:00 GMT

.........

Но похоже, что браузеры(Safari, протестированный Firefox) не кэширует ответ.

В HTTP RFC соответствующая часть говорит:

Ответы на этот метод не кэшируются,если ответ не включает соответствующие поля заголовка Cache-Control или Expires.Однако ответ 303 (см. «Другое») можно использовать для того, чтобы пользовательский агент мог извлечь кэшируемый ресурс.

Так что я думаю, что он должен быть кэширован.Я знаю, что могу установить переменную сеанса, установить cookie и выполнить перенаправление 303. Но я хочу кэшировать ответ на запрос POST.

Есть ли способ сделать это?

PS: я начал с простого 200 OK, поэтому он не работает.

Спасибо,

Ответы [ 2 ]

3 голосов
/ 26 декабря 2010

Я бы также отметил, что кэширование всегда необязательно (это МОЖЕТ в HTTP / 1.1 RFC).Поскольку в большинстве случаев успешный POST делает недействительной запись в кэше , вероятно, это просто тот случай, когда кеши браузера, которые вы просматриваете, просто не реализуют кеширование POST-ответов (поскольку это было бы довольно редко -обычно это достигается форматированием GET, что звучит так, как будто вы это сделали).

0 голосов
/ 07 октября 2010

Можете ли вы попробовать изменить Cache-Control на public вместо private и посмотреть, работает ли он?

...