Рекомендуется ли использовать пустой URL-адрес для атрибута действия HTML-формы? (действие="")

Мне интересно, может ли кто-нибудь дать ответ "лучшие практики" на использование пустых действий HTML-формы для публикации на текущей странице.

здесь сообщение с вопросом, что здесь делает пустое действие HTML-формы и некоторые страницы, как этот предлагаю это нормально, но я хотел бы знать, что думают люди.

10 ответов


лучшее, что вы можете сделать, это полностью исключить атрибут действия. Если вы оставите его, форма будет отправлена на адрес документа, т. е. на ту же страницу.

также можно оставить его пустым, и любой браузер реализации алгоритм представления формы HTML будет рассматривать его как эквивалент адреса документа, что он делает в основном потому, что именно так браузеры в настоящее время работают:

8. давайте действий заявителя элемент действие.

9. Если action-пустая строка, пусть action будет адрес документа.

Примечание: этот шаг является злостное нарушение RFC 3986, что потребует обработки базового URL-адреса здесь. Это нарушение мотивировано желанием совместимости с устаревшим контентом. [RFC3986]

Это, безусловно, работает во всех текущих браузеры, но могут работать не так, как ожидалось в некоторых старых браузерах ("браузеры делают странные вещи с пустым действием= "" атрибут"), который является, почему спецификация настоятельно рекомендует авторам не оставлять ее пустой:

на action и formaction атрибуты содержимого, если они указаны, должны иметь значение допустимый непустой URL-адрес, потенциально окруженный пробелами.


на самом деле форма представления подраздел текущего проекта HTML5 не позволяет action="". Это противоречит спецификации.

на action и formaction атрибуты содержимого, если они указаны, должны иметь допустимое значение непустой URL потенциально окружен пробелами. (курсив добавлен)

цитируемый раздел Меркатора является требованием о реализации, не авторы. Авторы должны следовать требованиям автора. Цитата как прочитать эту спецификацию:

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

изменение из HTML4-что позволило пустой URL-адрес-было сделано, потому что"браузеры делают странные вещи с пустой action="" атрибут". Учитывая причину изменения, вероятно, лучше не делать этого и в HTML4.


это будет проверяться с помощью HTML5.

<form action="#">

Не включая атрибут action открывает страницы iframe clickjacking атаки, которые включают в себя несколько простых шагов:

  • злоумышленник обертывает вашу страницу в iframe
  • URL-адрес iframe включает параметр запроса с тем же именем, что и поле формы
  • при отправке формы значение запроса вставляется в базу данных
  • идентифицирующей информации пользователя (электронная почта, адрес и т. д.) скомпрометирован!--6-->

ссылки


В HTML 5 action="" НЕ ПОДДЕРЖИВАЕТСЯ, ПОЭТОМУ НЕ ДЕЛАЙТЕ ЭТОГО. ПЛОХАЯ ПРАКТИКА.

если вместо этого вы полностью отрицаете действие в целом, оно будет отправлено на ту же страницу по умолчанию, я считаю, что это лучшая практика:

<form>This will submit to the current page</form>

если вы sumbitting форму, используя php, вы можете рассмотреть следующее. подробнее об этом здесь.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

в качестве альтернативы вы можете использовать # имейте в виду, что это будет действовать как якорь и прокрутите страницу вверх.

<form action="#">

обычно я использую action="", который является XHTML действительным и сохраняет данные GET в URL.


Я думаю, что лучше явно укажите, где размещается форма. Если вы хотите быть в полной безопасности, введите тот же URL-адрес, что и форма, в атрибуте action, если вы хотите отправить его обратно. Хотя основные браузеры оценивают "" на той же странице, вы не можете гарантировать, что не связанные с основной браузеров.

и, конечно, весь URL, включая получение данных, таких как Juddling указывает.


Я часто делал это, когда работал с классическим ASP. Обычно я использовал его, когда серверная проверка была необходима для ввода (до дней AJAX). Главный недостаток, который я вижу, заключается в том, что он не отделяет логику программирования от презентации на уровне файла.


просто использовать

?

<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">

он не нарушает стандарты HTML5.


Я использую, чтобы вообще не указывать атрибут действия. На самом деле, как моя структура разработана, все страницы возвращаются точно по одному адресу. Но сегодня я обнаружил проблему. Иногда я заимствую значение атрибута действия, чтобы сделать некоторый фоновый вызов (я думаю, некоторые люди называют их AJAX). Поэтому я обнаружил, что IE сохраняет значение атрибута действия как пустое, если атрибут действия не указан. Это немного странно в моем понимании, так как если атрибут действия не указан, аналог JavaScript имеет по крайней мере неопределенным. В любом случае, прежде чем вы выберете наилучшую практику, вам нужно понять больше контекста, например, будете ли вы использовать атрибут в JavaScript или нет.