Можно ли кешировать POST-методы в HTTP?

this является ссылкой на текущий объект. Он используется в конструкторе для различения локальной и текущей переменных класса, имеющих одно и то же имя. например ::

public class circle {
    int x;
    circle(int x){
        this.x =x;
        //class variable =local variable 
    }
} 

this также может использоваться для вызова одного конструктора из другого конструктора. например:

public class circle {
    int x;

    circle() { 
        this(1);
    }

    circle(int x) {
        this.x = x; 
    }
}
143
задан Nayuki 26 October 2015 в 22:33
поделиться

5 ответов

Соответствие RFC 2616 в разделе 9.5 (POST) позволяет кэширование ответ к сообщению POST при использовании соответствующих заголовков.

Ответы на этот метод не являются кэшируемыми, если ответ не включает соответствующее Управление Кэша или Истекает поля заголовка. Однако 303 (См. Другой) ответ могут использоваться для направления агента пользователя для получения кэшируемого ресурса.

Примечание, которое тот же RFC указывает явно в разделе 13 (Кэширующийся в HTTP), что кэш должен делать недействительным соответствующий объект после запроса POST .

Некоторые методы HTTP ДОЛЖНЫ заставить кэш делать недействительным объект. Это - или объект, упомянутый URI запроса, или заголовками Местоположения или Довольного Местоположения (если есть). Эти методы:

  - PUT
  - DELETE
  - POST

мне не ясно, как эти спецификации могут позволить значимое кэширование.

93
ответ дан Diomidis Spinellis 27 October 2015 в 08:33
поделиться
  • 1
    Право. Я думаю если it' s случай that' s, который усложнил, я буду, вероятно, просто заботиться о том, было ли конкретное ответвление уже слиянием в другой и использует инструменты командной строки для исследования этого. Я думаю, что кто-то, возможно, удалил комментарий к Вашему вопросу, который предложил использовать git branch --contains C с этой целью, который действительно очень полезен - он показывает Вам все ответвления, которые включают подсказку ответвления C (и тем самым содержите полную историю ответвления C). – Mark Longair 14 March 2011 в 13:38

Если это - что-то, что на самом деле не изменяет данные по Вашему сайту, это должен быть ПОЛУЧИТЬ запрос. Даже если это - форма, можно все еще установить его как получить запрос. В то время как, как другие указывают, Вы могли кэшировать результаты POST, он не будет иметь семантического смысла, потому что POST по определению изменяет данные.

4
ответ дан Kibbee 27 October 2015 в 08:33
поделиться

В целом:

В основном POST не является идемпотентной операцией . Таким образом, Вы не можете использовать его для кэширования. ДОБЕРИТЕСЬ должна быть идемпотентная операция, таким образом, это является наиболее часто используемым для кэширования.

посмотрите раздел 9.1 из , RFC 2616 S. 9.1 .

HTTP 1.1 Кроме ПОЛУЧАЕТ семантику метода:

сам метод THE POST семантически предназначен для регистрации чего-то на ресурс. POST не может кэшироваться, потому что, если Вы делаете что-то однажды по сравнению с дважды по сравнению с тремя разами, тогда Вы изменяете ресурс сервера каждый раз. Каждый запрос вопросы и должен быть поставлен серверу.

сам ПОМЕЩЕННЫЙ метод семантически предназначен, чтобы поместить или создать ресурс. Это - идемпотентная операция, но это не будет использоваться для кэширования, потому что УДАЛЕНИЕ, возможно, произошло тем временем.

сам УДАЛИТЬ метод семантически предназначен для удаления ресурса. Это - идемпотентная операция, но это не будет использоваться для кэширования, потому что ПОМЕЩЕННЫЙ, возможно, произошел тем временем.

Относительно клиентского кэширования:

веб-браузер А будет всегда передавать Ваш запрос, даже если он будет иметь ответ от предыдущей операции POST. Например, можно послать электронные письма с Gmail пара дней независимо. Они могут быть тем же предметом и телом, но оба электронных письма должны быть посланы.

Относительно кэширования на прокси-сервере:

А проксируют сервер HTTP, который передает Ваше сообщение к серверу, ничего никогда не кэшировал бы кроме ПОЛУЧЕНИЯ или ГЛАВНОГО запроса.

Относительно кэширования сервера:

сервер А по умолчанию автоматически не обработал бы запрос POST через проверку его кэша. Но конечно запрос POST может быть отправлен к Вашему приложению или дополнению, и у Вас может быть свой собственный кэш, который Вы читаете из того, когда параметры являются тем же.

Лишение законной силы ресурса:

Проверка RFC 2616 S. 13.10 HTTP 1.1 показывает, что метод POST должен делать недействительным ресурс для кэширования.

31
ответ дан Brian R. Bondy 27 October 2015 в 08:33
поделиться
  • 1
    Это выглядит очень полезным, я, несомненно, дам ему попытку в понедельник. Спасибо. – Bjarke Freund-Hansen 19 March 2011 в 12:57

Конечно, это возможно. Если Вы хотите поймать запросы POST, отправленные к Вашему серверу и кэшировать данные, переданные обратно, чтобы быть снова посланными позже - никакой пот.

хитрая часть прибывает в оценку "состояния". Как Вы решаете данные, которые Вы хотите передать обратно пользователю, действительно должно быть то же? Что, если его cookie изменились - который изменяет данные, которые Вы хотите передать обратно?

Что было бы, если пользователь выполнил запрос POST к Вашей домашней странице, и с прошлого раза, когда он сделал это, другой пользователь отправил ему сообщение (использующий некоторую систему в Вашем сайте.) Необходимо было бы определить, что как изменение состояния, и отправляют новую версию домашней страницы, с уведомлением о сообщении пользователю в следующий раз, когда он загружает домашнюю страницу. Даже если параметры POST являются тем же.

1
ответ дан Shalom Craimer 27 October 2015 в 08:33
поделиться
  • 1
    То же здесь, инкапсуляция повреждений решения, проверка должны произойти вне функции. – markus 2 May 2011 в 16:11

According to RFC 2616 Section 9.5:

"Responses to POST method are not cacheable, UNLESS the response includes appropriate Cache-Control or Истекает срок действия полей заголовка. "

Итак, ДА, вы можете кэшировать ответ на запрос POST, но только если он приходит с соответствующими заголовками. В большинстве случаев вы не хотите кэшировать ответ. Но в некоторых случаях - например, если вы не сохранять никаких данных на сервере - это совершенно нормально.

Обратите внимание, однако, что многие браузеры, включая текущий Firefox 3.0.10, не кэшируют POST-ответ независимо от заголовков. IE в этом отношении ведет себя более умно.

Теперь , я хочу прояснить некоторую путаницу в отношении RFC 2616 S. 13.10. Метод POST для URI не «делает недействительным ресурс для кэширования», как некоторые заявили здесь. Он делает ранее кэшированную версию этого URI устаревшей, даже если его заголовки управления кешем указывали на более длительную свежесть.

65
ответ дан 23 November 2019 в 22:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: