<a> and </a> <按钮> <a> when used to create link?

时间:2018-03-22 18:05:42

标签: javascript html5 http hyperlink get

  <body>
        <a href="index.html">Home</a>
    
        <form action="index.html" method="get">
            <button>Home</button>
        </form>        
  </body>

Is there any logical difference between the two anchors created above? Any performance difference or how GET method is invoked?

I looked the request/ response headers for both anchors, and they are almost same, only extra '?' in request URL when <button> is used.

Request URL:http://localhost:30272/index.html
Request Method:GET
Status Code:304 Not Modified
Remote Address:[::1]:30272
Referrer Policy:no-referrer-when-downgrade
Accept-Ranges:bytes

Request URL:http://localhost:30272/index.html?
Request Method:GET
Status Code:304 Not Modified
Remote Address:[::1]:30272
Referrer Policy:no-referrer-when-downgrade
Accept-Ranges:bytes

Edit 1: While trying to understand the GET in-depth, I encountered the following statement in RFC documentation.

A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request. https://tools.ietf.org/html/rfc7231#section-4.3.1

之间是否有任何性能差异

使用<button>调用GET方法是否会对缓存和/或代理产生任何影响?

编辑2:由于<button>无意创建主播,是否更容易受到HTTP header injection的攻击?

编辑3:关于CGI的维基百科文章说,

  

简而言之,CGI程序通过Unix / Linux接收HTTP表单数据   标准输入和大多数其他数据(例如URL路径,URL参数,   和HTTP头数据)通过众所周知的Unix / Linux进程环境   变量

这是否意味着来自<button><a>的GET请求将由CGI计划以不同方式接收?

2 个答案:

答案 0 :(得分:2)

我相信不。标记是为了给文档提供结构。告诉浏览器如何显示元素以及它们中的一些像表单标记一样用于提交信息。可以通过css为Html标签赋予相同的显示类型,例如,可以使按钮看起来像链接,同时可以使链接看起来像按钮。

语义有助于文档的可读性。

答案 1 :(得分:2)

  

上面创建的两个锚点之间是否有任何逻辑差异?

是的:其中只有一个是锚。另一种是形式,而不是锚。锚是超链接,表单是表单。由于它们在逻辑上是不同的,因此无法比较性能。

但是,表面上看,这不是你在这里要求的。你问的是,当没有涉及表单数据时,通过HTTP GET的超链接导航和表单提交是否无法区分,答案是肯定的。

在我继续回答你的其他问题之前,我现在也可以说,如果你真的想像Neopets那样在90年代末/ 00年代早期做,并使用表格中的按钮进行链接,那么就要警惕搜索引擎不会很容易跟踪您的链接。当然不比使用<a>元素更容易。

  

使用<button>调用GET方法是否会对缓存和/或代理产生任何影响?

不,与超链接导航相比,它不会导致不同的缓存行为。只有通过HTTP POST提交表单的方式才会以不同方式缓存(通常,根本不缓存)。

  

由于<button>不是为了创建锚,它是否更容易受到HTTP头注入?

不,除非您的表单接受用户输入或者其他方式非常糟糕,否则它链接到的URL本身就很脆弱,这不是这里讨论的内容。

  

这是否意味着来自<button><a>的GET请求将由CGI计划以不同方式接收?

是的,如果<button>有一个name属性将其指定为表单数据。但是如果CGI脚本没有对表单数据做任何事情,那么差异就无关紧要了。