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

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

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

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

<form action="#">

Ответ 4

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

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

Ссылки

Ответ 5

IN 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="#">

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

?

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

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

Ответ 10

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