GET和POST之间的区别,你记得多少?

1,108 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

虽然天天都在和get、post打交道,但是对他们的书面认识越来越淡忘了~

GET和POST,两者都是HTTP协议中发送请求的方法,本质上都是TCP链接,并无差别,,但是由于HTTP的规定和浏览器服务器的限制,导致他们在应用过程中会体现出一些区别。

GET请求:

    var httpRequest = new XMLHttpRequest(); //第一步:建立所需的对象
    httpRequest.open('GET', 'url', true); //第二步:打开连接  将请求参数写在url中  ps:"./Ptest.php?name=test&nameone=testone"
    httpRequest.send(); //第三步:发送请求  将请求参数写在URL中
    /**
     * 获取数据后的处理程序
     */
    httpRequest.onreadystatechange = function () {
      if (httpRequest.readyState == 4 && httpRequest.status == 200) {
        var json = httpRequest.responseText; //获取到json字符串,还需解析
        console.log(json);
      }
    };

POST请求:

    var httpRequest = new XMLHttpRequest(); //第一步:创建需要的对象
    httpRequest.open('POST', 'url', true); //第二步:打开连接
    httpRequest.setRequestHeader(
      'Content-type',
      'application/x-www-form-urlencoded'
    ); //设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
    httpRequest.send('name=teswe&ee=ef'); //发送请求 将情头体写在send中
    /**
     * 获取数据后的处理程序
     */
    httpRequest.onreadystatechange = function () {
      //请求后的回调接口,可将请求成功后要执行的程序写在其中
      if (httpRequest.readyState == 4 && httpRequest.status == 200) {
        //验证请求是否发送成功
        var json = httpRequest.responseText; //获取到服务端返回的数据
        console.log(json);
      }
    };

参数位置

在携带参数的时候,GET的参数是放在url中,POST的参数是放在body中。

这里只是约定,并不属于 HTTP 规范,相反的,我们可以在 POST 请求中 url 中写入参数,或者 GET 请求中的 body 携带参数

参数长度

HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。

IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。

这里限制的是整个 URL 长度,而不仅仅是参数值的长度;

服务器处理长 URL 要消耗比较多的资源,为了性能和安全考虑,会给 URL 长度加限制。

数据包

  • GET:浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);
  • POST:浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200。

注意: 不是所有浏览器都会在 POST 中发送两次包,Firefox 就只发送一次。

安全性

POST 比 GET 安全,因为数据在地址栏上不可见,然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文,只有使用 HTTPS 才能加密安全