В порядке ли параметры URL в запросах HTTP POST? - PullRequest
0 голосов
/ 18 июля 2011

Я работаю с некоторыми формами HTML, и я просто хочу знать, нормально ли использовать параметры URL в атрибуте действия, даже если атрибут метода POST?

<form action="index.php?somefield=someval" method="post">
    <input name="anotherfield" value="anothervalue" type="text" />
    <input type="submit" />
</form>

Ну, это отлично работает, я могу получить все поля и их значения на моей странице обратной передачи, но я хочу знать, нарушаю ли я какие-то правила, стандарты или что-то подобное, делая это? Пожалуйста, если можете, покажите какой-нибудь ресурс, который может доказать, что это нормально, потому что я не могу найти его на W3.org.

Ответы [ 4 ]

1 голос
/ 18 июля 2011

Как указано в спецификациях RFC1866, раздел 8.2.3 , говорится:

Если служба, связанная с обработкой формы, имеет побочные эффекты (например, изменение базы данных)или подписка на услугу), метод должен быть «POST».

Для обработки формы, URL-адрес действия которой является HTTP-URL, а метод «POST», пользовательский агент выполняет транзакцию HTTP POST, используяURI действия и тело сообщения в формате «application / x-www-form-urlencoded», как указано выше.Пользовательский агент должен отображать ответ от взаимодействия HTTP POST так же, как он отображал бы ответ от HTTP GET выше.

При отправке запроса POST данные формы фактически отправляются вТело запроса, а не в шапке.Таким образом, URL-адрес запроса (action) формы отличается от тела запроса.

Данные, отправляемые на сервер в фоновом режиме, выглядят так:

POST /path/script.php?somefield=somevar HTTP/1.1
User-Agent: User-Agent-String/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

home=Cosby&favorite+flavor=flies
0 голосов
/ 18 июля 2011

Это работает, но иногда может сбивать с толку. Если ваше поле somefield = someval имеет отношение к вашей форме, вероятно, лучше сделать это:

<form action="index.php" method="POST">
    <input name="somefield" value="someval" type="hidden" />
    <input name="anotherfield" value="anothervalue" type="text" />
    <input type="submit" />
</form>

Но если ваше somefield = someval не имеет отношения к форме, вы должны оставить его как GET, чтобы оно не стало частью данных вашей формы.

0 голосов
/ 18 июля 2011

вы можете использовать $ _REQUEST ["name"] для получения значений как из режима получения, так и из режима публикации. Проверьте для получения более подробной информации

0 голосов
/ 18 июля 2011

Пока ваш код непротиворечив и работает, у вас все должно быть в порядке. Разделяйте параметры только в том случае, если у вас есть для этого причина, а затем документируйте их, чтобы было понятно, почему кто-либо придет позже.

И, конечно, протестируйте его, чтобы убедиться, что он работает. Это, вероятно, не стандартно, но если у вас есть какая-то причина, то нечего сказать, что вы не можете это сделать.

...