Skip to main content

请求方法 GET 和 POST

一、GET

1、GET 特点

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

2、GET 示例

一个简单的 GET 请求:

xmlhttp.open("GET", "demo_get.asp", true);
xmlhttp.send();

在上面的例子中,可能得到的是缓存的结果。

为了避免这种情况,需要向 URL 添加一个唯一的 ID:

xmlhttp.open("GET", "demo_get.asp?t=" + Math.random(), true);
xmlhttp.send();

如果通过 GET 方法发送信息,要为 URL 添加信息:

xmlhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true);
xmlhttp.send();

二、POST

1、POST 特点

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 请求不能被收藏为书签
  • POST 请求对数据长度没有要求

2、POST 示例

一个简单 POST 请求:

xmlhttp.open("POST", "demo_post.asp", true);
xmlhttp.send();

如果像 HTML 表单那样 POST 数据,要用 setRequestHeader() 来添加 HTTP 头,然后在 send() 方法中规定所要发送的数据:

xmlhttp.open("POST", "ajax_test.asp", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");

这里 setRequestHeader() 包含两个参数 header 和 value,前者用来规定头的名称,后者规定头的值。

为什么 open 方法第三个参数 Async = true ?

该参数规定请求是否异步处理:

  • 如果是异步通信方式(true),客户机就不等待服务器的响应;
  • 如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。

3、与 GET 的区别

  • GET 在 URL 中传输的参数有长度限制,而 POST 没有。
  • GET 的 URL 可见,而 POST 的 URL 不可见,存放在请求体中。
  • GET 的请求参数会被保留在浏览记录中,安全性低,而 POST 不会,安全性更高,易于防止 CSRF。
  • GET 请求会被浏览器主动缓存,而 POST 不会,需要手动设置。
  • GET 在浏览器回退是无害的,而 POST 会再次提交请求。

三、选 GET 还是选 POST

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用,然而,在以下情况中,必须用 POST 请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠。