ToB企服应用市场:ToB评测及商务社交产业平台

标题: 说一下GET哀求和POST哀求的区别 [打印本页]

作者: 怀念夏天    时间: 2024-12-11 16:45
标题: 说一下GET哀求和POST哀求的区别
面试官常常会问到的一个题目就是:GET哀求和POST哀求的区别。因为一个看似简单的题目就能观察出面试者对网络协媾和通讯的掌握程度以及对前后端开发底子知识是否相识、安全性意识是否充足强,以及综合分析与总结能力等。
所以答的好可以让面试官对你刮目相看,答不好很可能立刻就被面试官心里pass掉了。
所以接下来我们就来好好回答一下这个题目!!
1.欣赏器回退体现不同:GET在欣赏器回退时是无害的,而POST会再次提交哀求。

当我们在欣赏器中利用GET方法进行页面哀求时,欣赏器会将哀求参数附加到URL的查询字符串中,并通过HTTP协议发送给服务器。由于GET是一种幂等的操作,即多次执行同一个GET哀求不会产生副作用或改变服务器状态。
因此当我们点击欣赏器的回退按钮后重新加载之前访问过的页面时,欣赏器会主动从缓存中获取该页面并显示出来。
相反地,当我们利用POST方法提交表单数据或执行某些非幂等操作时,欣赏器会将哀求参数包含在HTTP哀求体中,并发送给服务器。POST可能导致对服务器状态进行更改、资源创建、更新或删除等重要操作。
因此,在当我们点击回退按钮返回到之前访问过的页面时,欣赏器默认行为是再次向服务器发送相同的POST哀求以保证执行谁人特定操作。
当然这种区别是由欣赏器和HTTP规范所决定的默认行为。但我们必要注意的是,并非所有情况下都遵循这样的原则。具体而言:

2.GET产生的URL地址可以被Bookmark(即书签保存),而POST不可以。

当我们利用GET发送哀求时,所有的参数都会附加在URL背面,并以键值对形式进行转达。比方:
  1. http://example.com/page?param1=value1&param2=value2
复制代码
这意味着欣赏器中会显示的完整URL,URL中包含了全部的参数信息,因此我们可以将该URL添加到书签大概通过复制粘贴方式共享给其他人。
相比之下,当我们利用POST哀求时,参数数据并没有直接附加在URL上。相反,在HTTP消息体中以表单形式发送给服务器。由于POST哀求不会把参数袒露在URL上,所以无法直接被我们保存为书签。
固然POST不能直接哀求保存为书签,但仍然有一些其他的方法来共享一个包含POST哀求的链接。我们可以通过电子邮件、即时通讯应用程序等本领将链接分享给他人,并且他们可以点击该链接打开页面并进行相干操作。
3.欣赏器对哀求地址的处理不同:GET哀求会被欣赏器主动cache,而POST不会,除非手动设置。

当欣赏器发送GET哀求时,假如该哀求的URL和参数与之前已经访问过的URL和参数相匹配,则欣赏器会尝试从本地缓存获取响应结果。
这是因为GET哀求通常被以为是无副作用(不改变服务器状态或资源)且幂等(多次执行产生同样结果)的操作。
由于幂等性,欣赏器以为可以安全地利用上次获取到的响应结果,并避免再次向服务器发起哀求。
相反,当欣赏器发送POST哀求时,默认情况下不会将其结果缓存。
这是因为POST通常具有副作用(可能会更改服务器状态或资源),而且不具备幂等性。假如每次都直接利用缓存结果,则可能导致数据不同等或意外操作。
然而,在某些特别情况下我们渴望可以或许对POST哀求进行缓存以进步性能或减少网络流量斲丧。
在这种情况下, 我们可以通过设置 Cache-Control 和 Expires 等HTTP头字段来告诉欣赏器是否可以对POST响应进行缓存,并指定有效期限。
比方:
  1. POST /api/submit HTTP/1.1
  2. Host: example.com
  3. Cache-Control: max-age=3600
复制代码
在上面这个例子中,通过设置 Cache-Control 为 max-age=3600,我们告诉欣赏器可以将该POST哀求的响应结果缓存,并且有效期限是3600秒。
必要注意的是,固然可以手动设置POST哀求进行缓存,但仍需谨慎利用。
因为对于具有副作用和非幂等性的操作,默认不进行缓存是出于安全数据同等性方面的思量。
假如确实必要对特定范例的POST哀求进行缓存,我们必要确保相识其影响,并在设计时思量清楚相干风险与利益。
4.编码方式不同:GET哀求只能进行url编码,而POST支持多种编码方式。

我们在利用GET哀求时会将参数附加到URL的查询字符串中,以便将其发送给服务器。
GET哀求会把参数进行URL编码(也称为百分号编码或URL转义),以确保特别字符不会干扰URL结构。以及URL编码会利用%符号后跟两个十六进制数字来体现非ASCII字符或某些特别字符。
比方
  1. GET /search?query=hello%20world HTTP/1.1
  2. Host: example.com
复制代码
hello world这个查询词被进行了URL编码(%20代表空格)并作为参数转达给服务器。
POST哀求:
POST哀求将数据作为消息正文发送到服务器,并且我们可以利用多种不同的数据编码方式来对消息体进行格式化。
最常用的POST数据编码方式是 application/x-www-form-urlencoded ,它与GET相似,也会对非ASCII字符和特别字符进行URL编码。
这种方式下,参数按照键值对形式出如今消息正文中,并用&符号连接起来。
  1. POST /submit HTTP/1.1
  2. Host: example.com
  3. Content-Type: application/x-www-form-urlencoded
  4. name=John+Doe&age=25
复制代码
5.欣赏器对响应的处理不同:GET哀求参数会被完整保留在欣赏器历史记载里,而POST中的参数不会被保留。

当我们利用GET哀求时,参数会附加在URL的查询字符串中,并显示在欣赏器地址栏中。比方:
  1. https://example.com/search?q=keyword
复制代码
这意味着GET哀求的参数将作为查询字符串一部分出如今URL上。
由于欣赏器通常会将访问过的网址保存到历史记载中,因此包含参数的URL也会被完整地保留下来。
相比之下,POST哀求通过HTTP消息主体转达参数,并不直接袒露给用户或显示在地址栏上。因此,在用户检察欣赏器历史记载时,并没有POST哀求所携带的具体参数信息可见。
6.参数巨细不同:GET哀求在URL中传送的参数是有长度限定的,而POST没有。

GET哀求自己是没有长度限定的,但是URL有。不同的欣赏器对于GET的长度限定也不一样。
  1.     IE:对IE浏览器URL的最大长度为2083个字符。
  2.     Firefox:对Firefox浏览器URL的最大长度为65536个字符。   
  3.     Safari: 对Safari浏览器URL的最大长度为80000个字符。   
  4.     Opera:  对Opera浏览器URL的最大长度为190000个字符。
  5.     Google(chrome):对Google浏览器URL的最大长度为8182个字符。  
复制代码
所以,在必要兼容IE的情况下,URL哀求的长度最长只能有2083个字符。
7.参数的数据范例不同:对参数的数据范例,GET只担当ASCII字符,而POST没有限定。

GET方法通常用于从服务器获取数据,并且将参数附加到URL的查询字符串中。由于URL是以ASCII字符编码体现的,因此GET哀求只担当ASCII字符作为参数值。
比方,在下面的URL中:
  1. http://example.com/search?keyword=hello&category=1
复制代码
keyword 和 category 是两个参数名,而 hello 和 1 是它们对应的值。这些值必要进行URL编码,以确保它们只包含有效的ASCII字符,并且不会粉碎URL结构。
而POST方法与GET不同,POST哀求将参数放置在HTTP哀求正文(body)中发送给服务器。正文可以包含任何范例的数据,并没有限定为ASCII字符。
通过POST方法发送数据时,通常利用表单(form)来构造数据并将其封装在表单字段(field)中。
比方,在HTML登录表单中:
  1. <form action="http://example.com/submit" method="post">
  2.     <input type="text" name="username" value="John Doe">
  3.     <input type="password" name="password">
  4.     <input type="submit" value="Submit">
  5. </form>
复制代码
当用户填写用户名和密码后点击提交按钮时,欣赏器会向服务器发送一个POST哀求,并将用户名和密码作为非限定性ASCII字符一起发送到服务器。
所以GET方法只担当ASCII字符作为参数值,并将参数附加到URL的查询字符串中。而POST方法没有限定数据范例,并且通过HTTP哀求正文发送数据给服务器。
8.安全性不同:GET参数通过URL转达,POST放在Request body中,GET比POST更不安全,因为参数直接袒露在URL上,所以不能用来转达敏感信息。

我们在利用GET哀求时,参数会直接附加在URL背面,在欣赏器地址栏中可见。
而利用POST哀求时,参数通过HTTP消息体进行传输,并不会直接显示在URL上。
所以可以说,在网络环境下(如公共Wi-Fi),GET哀求可能更容易遭受恶意截获或拦截。
并且GET哀求将参数作为查询字符串明文展示在URL中,这些URL很容易被缓存、保存到历史记载大概日志文件中。
假如包含敏感信息的URL被走漏、共享大概留存在公开场合,则可能带来安全隐患。
但是这些缺陷与不同其实都不是它们天生就是云云的,而是后天人为造成的。为什么这么说呢?接下来听让我扒开GET和POST的外衣,让你好好看清楚就知道了。
首先我们要知道GET和POST是什么?
   GET和POST是HTTP哀求的两种方法
  那HTTP又是什么?
   HTTP是基于TCP/IP的关于数据应该怎样在互联网中传输的协议。
  既然HTTP的底层是TCP和IP。那么我们的GET和POST的底层也应该是TCP和IP,也就是说,GET哀求和POST哀求底层都是通过TCP链接的。GET和POST的功能是一样的。假如我们要给GET加上request body,给POST带上url参数,技能上是完全行的通的。
既然云云,那么我们上面所说的那些区别又是怎么回事呢?你是否也很矛盾?
其实很好理解
   在我们广阔的互联网世界中,TCP就像是汽车一样。我们利用TCP来传输数据,它非常可靠,从不会发生丢失或损坏的情况。
  但是假如所有行驶在路上的汽车看起来都完全相同,那这个世界将变得一片杂乱。
  比方,急需送货品的汽车可能会被前面满载货品的汽车拦截在路上,整个交通体系可能会瘫痪。为了避免这种情况发生,在这个互联网世界中诞生了一个叫做HTTP的交通规则。
  HTTP给予汽车运输设定了多种服务类别,此中包括GET、POST、PUT和DELETE等方法。
  根据HTTP规则,在执行GET哀求时,必要给汽车贴上GET标签(设置method为GET),并要求将要转达的数据放置在车顶位置(URL中)以便记载和查找。而对于POST哀求,则必要贴上POST标签,并将货品放置在车厢内部。
  当然,在执行GET哀求时也可以偷偷地把一些货品藏进车厢里面去,但这显然是不道德的行为;同样地,在执行POST哀求时也可以把一些数据放置到URL中去让人感觉有点愚笨。
  值得注意的是,HTTP仅仅是一套行为准则,而TCP才是实际上实现GET和POST等方法的底子。
  所以,这些缺陷与不同其实都不是它们天生就是云云的,而是后天人为规定造成的。所以劈面试官问我们get和post有什么不同时我们应该回答上面所说的8种不同,但是我们脑子里要清晰的知道它们其实是一样的,只是后天的人为规定造成了它们之间的不同和缺陷

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4