网络知识 娱乐 [ 网络协议篇 ] 一篇文章让你掌握 GET 和 POST 的区别(非常全面)

[ 网络协议篇 ] 一篇文章让你掌握 GET 和 POST 的区别(非常全面)

  🍬 博主介绍  

  • 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
  • ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
  • 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
  • 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
  • 🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

在前面我们已经讲了,什么是 HTTP,什么是 HTTPS,HTTP 和 HTTPS 的区别等内容。

这篇文章我们从原理和表象两个方面来谈一谈 HTTP 的 POST 请求和 GET 请求两种请求方式的区别。理解这个两个的区别是很重要的,这个也是面试常问的。

干货:

表象区别:

1. 概念:GET 是获取数据; POST 是提交/修改数据

2. 位置:GET 把请求的数据放在url上,以?分割URL和传输数据,参数之间以&相连,所以GET不太安全;而POST把数据放在HTTP的包体内(request body)

3. 大小:GET 提交的数据最大限制实上取决于浏览器和后端服务 ; POST数据长度取决于服务器的处理能力。

4. 安全:POST更安全

本质区别:

5. GETPOST最大的区别主要是GET请求是幂等性的,POST请求不是。

其他区别:

6. GET产生一个TCP数据包,浏览器会把http header和data 一并发送出去,服务器响应200(返回数据); POST 产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)

7. GET请求会被浏览器主动缓存;而POST不会,除非手动设置

8. GET在浏览器回退时是无害的,而POST会再次提交请求。

9. 服务器获取GET和POST数据方式不同

目录

  🍬 博主介绍  

干货:

一、请求方式所在请求报文中的位置

请求方法请求报文请求行里面

二、HTTP 的请求方法

三、GET 和 POST 区别

1. get

2. POST

3. 表面现像上面看看GET和POST的区别

1. 请求的数据所在的位置不同

2. 请求数据的大小不同

3. 服务端获取请求数据方面

4. 安全性方面

四、从原理方面看GET和POST的区别

1. 根据HTTP规范,GET用于信息获取,是安全的和幂等的。

2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。

五、HTML中GET请求数据的大小限制

1. 浏览器

2. 服务器

六、专栏分享


一、请求方式所在请求报文中的位置

HTTP 报文由从客户机到服务器的请求和从服务器到客户机的响应构成。

请求方法请求报文请求行里面

请求报文格式如下:

请求行、请求头、空行、请求体

二、HTTP 的请求方法

HTTP 规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序号方法描述
1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

三、GET 和 POST 区别

1. get

请求指定的页面信息,并返回实体主体。

2. POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。

数据被包含在请求体中。

POST 请求可能会导致新的资源的建立和/或已有资源的修改。

3. 表面现像上面看看GET和POST的区别

HTTP 定义了上述九种与服务器交互的不同方法,但最基本的方法有4种,分别是GET,POST,PUT,DELETE。

URL全称是资源描述符,可以这样理解:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

那也就是说:GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

1. 请求的数据所在的位置不同

GET请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连

举例来说:

?进行分割  &连接参数

https://so.csdn.net/so/search?q=网络&t=&u=&urw=

POST把提交的数据则放置在是HTTP包的包体中

2. 请求数据的大小不同

GET方式请求数据最多只能是1024字节

URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制

GET请求数据的长度取决于URL的长度,URL的长度取决于浏览器和服务器对URL的限制

注意:这是限制是整个URL长度,也就是说GET请求数据 < URL长度。

详细请看第五点:HTML中GET请求数据的大小限制

理论上POST没有限制,可传较大量的数据

POST是没有大小限制的,HTTP协议规范也没有进行大小限制

POST请求数据大小限制取决于服务器的处理程序的处理能力

如: IIS 6.0默认ASP POST数据量最大为200KB,每个表单域限制是100KB。
        IIS 6.0默认上传文件的最大大小是4MB。
        IIS 6.0默认最大请求头是16KB。
   IIS 6.0之前没有这些限制。

3. 服务端获取请求数据方面

服务端获取GET请求数据和POST请求数据的方式不同

举例来说:

在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。

4. 安全性方面

POST的安全性要比GET的安全性高

举例来说:

通过GET提交数据,用户名和密码将明文出现在URL上

登录页面有可能被浏览器缓存,其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。

除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。

四、从原理方面看GET和POST的区别

1. 根据HTTP规范,GET用于信息获取,是安全的和幂等的。

1. 所谓安全的意味着该操作用于获取信息而非修改信息。

说白了,GET 请求一般不应产生副作用。

也就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

 注意:这里安全的含义仅仅是指是非修改信息。

2. 幂等的意味着对同一URL的多个请求应该返回同样的结果。

幂等是一个数学或计算机学概念,常见于抽象代数中。

对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。

对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等。

应用在这里:幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果。

幂等性也没有那么的严格,举个例子:

同一个URL请求的时同一篇博客文章,即使文章被修改了请求的还是这篇文章,这个资源。

2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。

举个例子:

博客评论通过POST实现,因为在评论提交后站点的资源已经不同了,也就是说说资源被修改了。

五、HTML中GET请求数据的大小限制

1. 浏览器

1. IE:

IE浏览器(Microsoft Internet Explorer) 对url长度限制是2083(2K+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。

2. firefox

firefox(火狐浏览器)的url长度限制为 65 536字符,但实际上有效的URL最大长度不少于100,000个字符。

3. chrome

chrome(谷歌)的url长度限制超过8182个字符返回本文开头时列出的错误。

4. Safari

Safari的url长度限制至少为 80000 字符。

5. Opera

Opera 浏览器的url长度限制为190 000 字符。Opera 9 地址栏中输入190 000字符时依然能正常编辑。

2. 服务器

1、Apache

Apache能接受url长度限制为8 192 字符

2. IIS

Microsoft Internet Information Server(IIS)能接受url长度限制为16 384个字符。

IIS7中这个是可以通过修改的。

3. Perl HTTP::Daemon

Perl HTTP::Daemon 至少可以接受url长度限制为8000字符。

Perl HTTP::Daemon中限制HTTP request headers的总长度不超过16384字节(不包括post,file uploads等)。

但当url超过8000字符时会返回413错误。

这个限制可以被修改,在Daemon.pm查找16×1024并更改成更大的值。

4. ngnix

可以通过修改配置来改变url请求串的url长度限制。

client_header_buffer_size 默认值:client_header_buffer_size 1k

large_client_header_buffers默认值 :large_client_header_buffers 4 4k/8k

六、专栏分享

每个专栏都在持续更新中~~~

渗透测试自学篇        web基础知识点

网络基础                   面试总结

网络工程师                python

操作系统篇                通讯安全

闲聊                           漏洞复现篇

代码审计                    SSM

docker                        环境搭建篇

python爬虫                 靶场

心理学

系列文章:

[ 网络协议篇 ] 一篇文章让你掌握什么是 HTTPS ?

[ 网络协议篇 ] 一篇文章让你掌握什么是 HTTP ?

[ 网络协议篇 ] 一篇文章让你掌握什么是 数字证书 ?什么是SSL ?什么是 TLS ?

HTTP状态码表

参考文章:

html中get请求方式发送数据的大小限制详解 - cheng825 - 博客园 (cnblogs.com) 

 (8条消息) HTTP请求方式GET和POST的区别详解_buliedian-CSDN博客

(9条消息) [ 网络协议篇 ] 一篇文章让你掌握什么是 HTTP ?__PowerShell的博客-CSDN博客

(8条消息) http请求的post和get方式的区别_编程小咯喽的博客-CSDN博客_post和get请求的区别POST与GET的区别 - 知乎 (zhihu.com)
(8条消息) http请求的post和get方式的区别_编程小咯喽的博客-CSDN博客_post和get请求的区别