代码之家  ›  专栏  ›  技术社区  ›  Matt Mitchell

将空URL用于HTML表单的操作属性是一个好的实践吗?(动作=“”)

  •  259
  • Matt Mitchell  · 技术社区  · 15 年前

    我想知道是否有人可以对使用空白HTML表单操作回发到当前页面给出“最佳实践”响应。

    a post asking what a blank HTML form action does here 还有一些像 this one 建议可以,但我想知道人们怎么想。

    10 回复  |  直到 8 年前
        1
  •  251
  •   mercator    13 年前

    你能做的最好的事情就是完全忽略action属性。如果您不填,表格将被提交到文件的地址,即同一页。

    也可以将其保留为空,并且任何浏览器实现 HTML's form submission algorithm 将其视为等同于文档的地址,这主要是因为浏览器当前的工作方式:

    8. 让操作成为提交者元素的 action .

    9. 如果action为空字符串,则让action为 the document's address .

    注意:此步骤是 willful violation 在RFC3986中,这里需要基本的URL处理。这种违反是由对与遗留内容兼容的渴望所导致的。 [RFC3986]

    这在所有当前的浏览器中都是有效的,但在某些较旧的浏览器中可能无法正常工作。( browsers do weird things with an empty action="" attribute 这就是为什么 the spec strongly discourages authors from leaving it empty :

    这个 action formaction 如果指定了内容属性,则其值必须是 valid non-empty URL potentially surrounded by spaces .

        2
  •  70
  •   Community CDub    7 年前

    事实上, Form Submission subsection 当前HTML5草案不允许 action="" . 不符合规格。

    这个 action formaction 如果指定了内容属性,则其值必须是有效的 非空的 URL可能被空格包围。(增加了强调)

    中引用的部分 mercator's answer 是否要求 实现方式 不是 作者 . 作者必须遵守作者的要求。引用 How to read this specification :

    特别是,有适用于生产者的一致性要求,例如作者及其创建的文档,还有适用于消费者的一致性要求,例如Web浏览器。它们可以通过它们所要求的来区分:对生产者的要求说明了什么是允许的,而对消费者的要求说明了软件是如何工作的。

    从HTML4_,允许空URL_,进行了更改,因为__ browsers do weird things with an empty action="" attribute 艾斯。考虑到变化的原因,最好不要在HTML4中这样做。

        3
  •  16
  •   Paul Sweatte    10 年前

    不包括“操作”属性将打开最多 iframe clickjacking 攻击,包括几个简单步骤:

    • 攻击者将页面包装在iframe中
    • iframe url包含与表单字段同名的查询参数
    • 提交表单时,查询值将插入到数据库中
    • 用户的身份信息(电子邮件、地址等)已被泄露。

    工具书类

        4
  •  15
  •   user152949    11 年前

    这将通过HTML5验证。

    <form action="#">
    
        5
  •  5
  •   GeorgeButter    8 年前

    在HTML 5中 action="" 不支持,因此不要这样做。不好的练习。

    如果您完全否定了操作,那么默认情况下它将提交到同一页,我认为这是最佳做法:

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

    如果您使用PHP来汇总表单,您可能需要考虑以下内容。 read more about it here.

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

    或者你可以使用 # 不过请记住,这将像一个锚,滚动到页面的顶部。

    <form action="#">
    
        6
  •  4
  •   Juddling    15 年前

    我通常使用action=“”,它是XHTML有效的,并将get数据保留在URL中。

        7
  •  4
  •   GEOCHET S.Lott    15 年前

    我想最好是 明确地 声明表单的发布位置。如果您希望完全安全,请在“操作”属性中输入表单所在的相同URL(如果您希望表单提交回自身)。尽管主流浏览器评估 "" 对于同一个页面,您不能保证非主流浏览器会这样做。

    当然,包括get数据在内的整个URL都指出了这一点。

        8
  •  2
  •   M_R_K    9 年前

    只使用

    ?

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

    它不会违反HTML5标准。

        9
  •  1
  •   busse    15 年前

    当我使用经典ASP时,我经常这样做。通常我在需要某种类型的服务器端验证来进行输入时使用它(在Ajax出现之前)。我看到的主要回顾是,它并没有在文件级别将编程逻辑与表示分离。

        10
  •  1
  •   Singagirl    11 年前

    我以前根本不指定动作属性。实际上,我的框架是如何设计的,所有页面都会被提交回相同的地址。但今天我发现了问题。有时我借用动作属性值来进行一些后台调用(我猜有些人会将其命名为Ajax)。所以我发现如果没有指定action属性,那么ie将action属性值保持为空。在我的理解中,这有点奇怪,因为如果没有指定任何动作属性,那么javascript对应的部分必须至少是未定义的。无论如何,我的观点是,在选择最佳实践之前,您需要了解更多的上下文,比如您是否会在JavaScript中使用该属性。