【发布时间】:2018-03-22 18:05:41
【问题描述】:
<body>
<a href="index.html">Home</a>
<form action="index.html" method="get">
<button>Home</button>
</form>
</body>
上面创建的两个锚点之间有什么逻辑上的区别吗?任何性能差异或如何调用 GET 方法?
我查看了两个锚点的请求/响应标头,它们几乎相同,只有额外的“?”在使用 <button> 时的请求 URL 中。
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
编辑 1:在尝试深入了解 GET 时,我在 RFC 文档中遇到了以下语句。
GET 请求消息中的有效负载没有定义的语义; 在 GET 请求上发送有效负载正文可能会导致一些现有的 拒绝请求的实现。 https://www.rfc-editor.org/rfc/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 程序以不同的方式接收?
【问题讨论】:
-
不是性能差异,而是语义差异。当您意思是创建超链接时,请勿使用
<button>。 -
不,HTTP 标头注入是服务器端漏洞。
标签: javascript html http hyperlink get