Get&&Post

文章详细介绍了HTTP协议中的GET和POST方法,包括它们的基本概念、区别和使用场景。GET主要用于获取资源,是幂等的,可缓存,数据在URL中;POST用于提交数据,可能产生副作用,数据在请求体中。此外,还讨论了HTTPS的安全性、TCP/IP的基础以及GET和POST在数据传输、安全性和效率上的差异。
摘要由CSDN通过智能技术生成

GET和POST是HTTP请求的两种基本常见方法
1.补充知识:

  1. url: 模式(或称协议)、服务器名称(或IP地址)、路径和文件名 
  2. http https  
  3. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。
  4. HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  5. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。
  6. HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  7. HTTP 的端口号是 80,HTTPS 的端口号是 443。
  8. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
  9. 幂等:在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

 

 2.get和post的概念

get
“读取“一个资源。比如Get到一个html文件,这是幂等的。

因为GET因为是读取,就可以对GET请求的数据做缓存。
这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),或者做到server端(用Etag,至少可以减少带宽消耗)


post 
在页面里<form> 标签会定义一个表单。点击其中的submit元素会发出一个POST请求让服务器做一件事。


这件事往往是有副作用的,不幂等的(多次执行的效果是不一致的),因此是无法缓存的。


3.表单提交中get和post方式的区别有5点

1.get是从服务器上获取数据,post是向服务器传送数据。

2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。


(翻译一下:get post请求参数都能放在url里的 post请求参数是放在请求体里的)


get不是只能用url而是通过浏览器直接发出的get只能由一个url触发,所以GET上要在url之外带一些参数就只能依靠url上附带querystring  而post接受多种编码方式


3.得到值的方式不同

对于get方式,服务器端用Request.QueryString获取变量的值,

对于post方式,服务器端用Request.Form获取提交的数据。

4.从运输数据的数据量上比

get传送的数据量较小,不能大于2KB。

(这里是因为url里的字符长度是受限的 <=2048个字符 post长度是不受限制的)

post传送的数据量较大,一般被默认为不受限制。

但理论上,IIS4中最大量为80KB,IIS5中为100KB。

(这里有看到其他文章介绍get和post的传送数据大小跟各个浏览器、操作系统以及服务器的限制有关)

5.get安全性非常低,post安全性较高。 


(get的请求参数放在url里比较不安全 post放在body里更安全一些)

6.从数据刷新角度

get请求是可以被浏览器缓存的
 post请求不能被缓存(刷新之后数据会被重新发送)


4.最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

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

2)GET产生的URL地址可以被标记,而POST不可以。

3)GET请求会被浏览器主动缓存,而POST不会,除非手动设置。

4)GET请求只能进行url编码,而POST支持多种编码方式。

(这里的前半句我个人是不怎么认同的 get请求是可以进行多种的编码的 )

5)GET请求在URL中传送的参数是有长度限制的,而POST没有。

6)对参数的数据类型,GET只接受ASCII字符,而POST没有限制。


 
5.解释更加本质的区别


HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。
GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。 

E.G.这里举个例子通俗理解一下

将这个HTTP作为交通规则

TCP就像汽车,但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱。
HTTP就像交通规则,HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,
当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。
如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里,也可以在POST的时候在车顶上也放一些数据。
HTTP只是个行为准则,而TCP才是GET和POST实现准则。

(简而言之:HTTP规定的准则 get参数放车顶 post车厢车顶都能放)



GET产生一个TCP数据包;POST产生两个TCP数据包。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值