method 属性
method 属性定义了数据发送的方式。HTTP 协议提供了几种执行请求的方式;HTML 表单数据可以通过多种不同的方法传输,最常见的是 GET 方法和 POST 方法。
要理解这两种方法之间的区别,让我们回顾一下 HTTP 的工作原理。每次您想访问 Web 上的资源时,浏览器都会向 URL 发送请求。HTTP 请求由两部分组成:头部包含一组关于浏览器功能的全局元数据,以及可以包含服务器处理特定请求所需信息的主体。
GET 方法
GET 方法是浏览器请求服务器返回给定资源的方法:“嘿,服务器,我想获取这个资源。”在这种情况下,浏览器发送一个空的主体。由于主体是空的,如果使用此方法发送表单,则发送到服务器的数据将附加到 URL。
考虑以下表格
html
由于使用了 GET 方法,当您提交表单时,您将在浏览器地址栏中看到 URL www.foo.com/?say=Hi&to=Mom 出现。
数据作为一系列名称/值对附加到 URL。在 URL 网址结束之后,我们包含一个问号(?),后面是名称/值对,每个名称/值对都由一个和号(&)分隔。在这种情况下,我们向服务器传递两段数据
say,其值为 Hi
to,其值为 Mom
HTTP 请求看起来像这样
httpGET /?say=Hi&to=Mom HTTP/2.0
Host: foo.com
注意:您可以在 GitHub 上找到此示例 — 请参阅 get-method.html(也可以在线查看)。
注意:如果 action URL 方案无法处理查询(例如 file:),则数据将不会被附加。
POST 方法
POST 方法略有不同。这是浏览器在请求考虑 HTTP 请求正文中提供的数据的响应时与服务器通信的方法:“嘿,服务器,看看这些数据并给我发回一个适当的结果。”如果使用此方法发送表单,数据将附加到 HTTP 请求的正文。
让我们看一个例子——这与我们在上面的 GET 部分看到的表单相同,但是 method 属性设置为 POST。
html
当使用 POST 方法提交表单时,URL 中不会附加任何数据,HTTP 请求看起来像这样,数据包含在请求正文中:
httpPOST / HTTP/2.0
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
say=Hi&to=Mom
Content-Length 标头表示正文的大小,Content-Type 标头表示发送到服务器的资源类型。我们稍后将讨论这些标头。
注意:您可以在 GitHub 上找到此示例 — 请参阅 post-method.html(也可以在线查看)。
注意:如果 action URL 方案无法处理请求正文(例如 data:),则将使用 GET 方法。