Полезно ли использовать пустой URL-адрес для атрибута действия формы HTML? (Действие = "") - PullRequest
264 голосов
/ 15 июля 2009

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

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

Ответы [ 10 ]

256 голосов
/ 15 июля 2009

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

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

8. Пусть action будет действием элемента отправителя .

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

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

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

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

72 голосов
/ 13 марта 2012

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

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

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

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

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

16 голосов
/ 17 августа 2012

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

  • Злоумышленник упаковывает вашу страницу в iframe
  • URL-адрес iframe содержит параметр запроса с тем же именем, что и у поля формы
  • Когда форма отправлена, значение запроса вставляется в базу данных
  • Идентификационная информация пользователя (адрес электронной почты, адрес и т. Д.) Была взломана

Ссылки

16 голосов
/ 25 апреля 2012

Это будет подтверждено HTML5.

<form action="#">
6 голосов
/ 08 сентября 2016

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

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

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

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

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

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

<form action="#">
4 голосов
/ 15 июля 2009

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

4 голосов
/ 15 июля 2009

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

И, конечно же, весь URL, включая GET-данные, такие как Juddling, указывает.

2 голосов
/ 08 сентября 2015

Просто используйте

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

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

1 голос
/ 13 апреля 2013

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

1 голос
/ 15 июля 2009

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

...