В этом вопросе я говорю о методах HTTP-запроса. Для подробного объяснения методов HTTP-запроса см. RFC 2616 , особенно Раздел 5.1.1 и Раздел 9.
Обычным способом запроса ресурса (URI, URL, веб-страница) является метод GET (или HEAD, если вам нужны только заголовки).
Обычно метод POST используется только в том случае, если данные, отправляемые клиентом на сервер, не должны отображаться в URI. Имена учетных записей и пароли или другие конфиденциальные данные часто передаются таким образом. (Конечно, вам все еще нужен SSL, так как он сам по себе не обеспечивает шифрование.)
Большинству моих ресурсов (URI) не нужен метод POST. Например, страницы, содержащие мои статьи, должны быть получены с помощью GET. Примеры правильных строк запроса:
GET /myarticles HTTP/1.1
GET /copyrightnotice HTTP/1.1
GET /blog/2011/03/14/something.html HTTP/1.1
Единственными, кому требуется POST, являются страницы входа (где учетная запись и пароль, введенные в форму, отправляются в теле POST) и некоторые другие специальные страницы. Примеры:
POST /performlogin HTTP/1.1
POST /formtarget HTTP/1.1
POST /savevote HTTP/1.1
У меня вопрос, должен ли я запретить метод POST на страницах, которые ему не нужны (например, / myarticles, / copyrightnotice и т. Д.)?
Другими словами, если я получу эту строку запроса:
POST /blog/2011/03/14/something.html HTTP/1.1
я должен
a) отправить код ошибки 405 (метод не разрешен) вместе с заголовком Allow:, например:
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Date: ...
b) -ИЛИ- мне следует просто обработать запрос POST, как если бы это был запрос GET?
HTTP/1.1 200 OK
Date: ...
HTML-content-here
Имеет ли это значение или полностью зависит от меня? Есть ли какие-либо предостережения / угрозы безопасности при использовании варианта б)? Я стараюсь соблюдать как можно больше стандартов.