Является ли хорошей практикой использовать пустой 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 или нет.