post(美团面试官,一上来,就叫我说Post和Get的区别?我慌了)

美团口试官,一上去,就叫我说Post和Get的区别?我慌了

作者:zhanglinblog

泉源:
https://blog.csdn.net/kebi007/article/details/103059900

IT界着名的步骤员曾说:关于那些月薪三万以下,自称IT工程师的码农们,但是我们向来没有把他们归为我们IT工程师的步队。他们固然总是以IT工程师自居,但只是他们一厢宁愿罢了。

此话一出,不知激起了几多(码农)步骤员的恼怒,却又无可怎样,于是码农问步骤员。

码农:你晓得get和post哀求毕竟有什么区别?

步骤员:你看这篇就晓得了。

码农:你月薪三万了?

步骤员:嗯。

码农:你是怎样做到的?

步骤员:我做梦做到的

这个成绩几乎口试的时分都市问到,是一个老生常谈的话题,但是随着不休的学习,关于从前的熟悉有很多误区,以是照旧必要不休地总结的,学而时习之,不亦说乎。

关于get和post假如你有条件上百度的话,最少有200百万条后果,每一局部都有每一局部的思索,固然,这篇也是我的思索,假如有些结论有错误,渴望可以喷起来。在批评中不休改良,与诸君共勉一句话:若批评偶然义,则称赞偶然义。

# http的特点

  • 基于tcp/ip、一种网络使用层协议、超文本传输协议HyperText Transfer Protocol
  • 事情办法:客户端哀求办事端应对的形式
  • 快速:无形态毗连
  • 机动:可以传输随意目标,目标典范由Content-Type标志
  • 客户端哀求request消息包含以下格式:哀求行(request line)、哀求头部(header)、空行、哀求数据


办事端呼应response也由四个局部构成,分散是:形态行、消息报头、空行、呼应要文

# 哀求办法

http哀求可以使用多种哀求办法。


HTTP1.0界说了三种哀求办法:GET, POST 和 HEAD办法。

HTTP1.1新增了五种哀求办法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 办法。


HTTP2.0 新的二进制格式(Binary Format),HTTP1.x的剖析是基于文本

基于文本协议的格式剖析存在天然缺陷,文本的体现情势有多样性,要做到健壮性思索的场景一定很多,二进制则不同,只认01的组合。基于这种思索HTTP2.0的协议剖析决定接纳二进制格式,完成便利且健壮。

多路复用(MultiPlexing),即毗连共享,即每一个request都是是用作毗连共享机制的。一个request对应一个id,如此一个毗连上可以有多个request,每个毗连的request可以随机的稠浊在一同,吸收方可以依据request的 id将request再归属到各自不同的办事端哀求内里。

header紧缩,如上文中所言,对前方提到过HTTP1.x的header带有多量信息,并且每次都要反复发送,HTTP2.0使用encoder来变小必要传输的header轻重,通讯两边各自cache一份header fields表,既制止了反复header的传输,又减小了必要传输的轻重。

办事端推送(server push),同SPDY一样,HTTP2.0也具有server push功效。
参考链接:
https://baike.baidu.com/item/HTTP%202.0/12520156?fr=aladdin

1 GET 哀求指定的页面信息,并前往实体主体。

2 HEAD 相似于get哀求,只不外前往的呼应中没有具体的内容,用于获取报头

3 POST 向指定资源提交数据举行处理哀求(比如提交表单大概上传文件)。

数据被包含在哀求体中。

POST哀求约莫会招致新的资源的创建和/或已有资源的修正。

4 PUT 从客户端向办事器传送的数据代替指定的文档的内容。

5 DELETE 哀求办事器删除指定的页面。

6 CONNECT HTTP/1.1协议中预留给可以将毗连改为管道办法的署理办事器。

7 OPTIONS 允许客户端查察办事器的功能。

8 TRACE 回显办事器收到的哀求,主要用于测试或诊断。

# 我们耳熟能详的的区别

http协议最稀有的两种办法GET和POST,这几点答案但是有几点并禁绝确

  • 哀求缓存:GET 会被缓存,而post不会
  • 保藏书签:GET可以,而POST不克不及
  • 保存欣赏器汗青纪录:GET可以,而POST不克不及
  • 用处:get常用于取回数据,post用于提交数据
  • 宁静性:post比get宁静
  • 哀求参数:querystring 是url的一局部get、post都可以带上。get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)
  • 哀求参数长度限定:get哀求长度最多1024kb,post对哀求数据没仅限定

# get和post误区


针对外表稀有的区别,假如口试的时分这么说,一定是有很大的弊端,刚在学校口试的时分也以前囫囵吞枣地如此说过,如今回过头再想从前的错误认知,又有很多新的熟悉。

误区一

“用处:get常用于取回数据,post用于提交数据”

曾听到过如此一种说法:get交换post来优化网站功能,固然这种说法没错,也的确get常被用于取回数据,但是post也被一些ui框架使用于取回数据,好比kendo ui中的grid,就是用post来承受数据的。以是结论是get、post用处也是量体裁衣。假如你有使用过kendo UI,会发觉分页、过滤、自界说的参数都包含在form data内里。

哀求参数


get是querystring(仅支持urlencode编码),post是放在body(支持多种编码)

query参数是URL的一局部,而GET、POST等是哀求办法的一种,不管是哪种哀求办法,都必需有URL,而URL的query是可选的,不关紧急。

误区二

“哀求参数长度限定:get哀求长度最多1024kb,post对哀求数据没仅限定”

这句话看上去真实没弊端啊,菜鸟教程也是如此说的啊。固然字面意思上没有错误,但是了解一定要准确。我想说的是GET办法提交的url参数数据轻重没仅限定,在http协议中没有对url长度举行限定(不仅仅是querystring的长度),这个限定是特定的欣赏器及办事器对他的限定

底下就是对种种欣赏器和办事器的最大处理才能做一些分析

  • IE欣赏器对URL的最大限定为2083个字符
  • Firefox (Browser):关于Firefox欣赏器URL的长度限定为65,536个字符。
  • Safari (Browser):URL最大长度限定为 80,000个字符。
  • Opera (Browser):URL最大长度限定为190,000个字符。
  • Google (chrome):URL最大长度限定为8182个字符。
  • Apache (Server):能承受最大url长度为8,192个字符。
  • Microsoft Internet Information Server(IIS):能承受最大url的长度为16,384个字符。

以是为了切合一切标准,url的最好不佳凌驾最低标准的2083个字符(2k+35)。固然在做客户端步骤时,url并不展现给用户,只是个步骤调用,这时长度只收web办事器的影响了。关于中文的转达,一个汉字终极编码后的字符长度是9个字符。

最稀有的form表单,欣赏器默许的form表单,默许的content-type是
application/x-www-form-urlencoded,提交的数据会依照key value的办法,jquery的ajax默许的也是这种content-type。固然在post办法中添加querystring一定是可以吸收的到,但是在get办法中加body参数就不一定能告捷吸收到了。

误区三

“post比get宁静性要高”

这里的安满是相对性,并不是真正意义上的宁静,经过get提交的数据都将体现到url上,页面会被欣赏器缓存,其他人查察汗青纪录会看到提交的数据,而post不会。别的get提交数据还约莫会形成CSRF打击。

误区四:

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

这一点了解起来照旧有一定难度的,实践上,不管哪一种欣赏器,在发送 POST 的时分都没有带 Expect 头,server 也天然不会发 100 continue。经过抓包发觉,只管会分两次,body 就是紧随在 header 后方发送的,基本不存在『等候办事器呼应』这一说。


从另一个角度说,TCP 是传输层协议。他人问你使用层协议里的 GET 和 POST 有啥区别,你回复说这俩在传输层上发送数据的时分不一样,确定他人不抽你?


参考材料:
https://zhuanlan.zhihu.com/p/25028045

# 形态码1xx

  • 100 Continue:办事器仅吸收到局部哀求,但是一旦办事器并没有回绝该哀求,客户端应该持续发送其他的哀求。
  • 101 Switching Protocols:办事器转换协议:办事器将服从客户的哀求转换到别的一种协议。
  • 102: 由WebDAV(RFC 2518):扩展的形态码,代表处理将被持续实行

# 形态码2xx:告捷

  • 200 OK:请哀告捷(自后是对GET和POST哀求的应对文档。)
  • 201 Created:哀求被创建完成,同时新的资源被创建。
  • 202 Accepted:供处理的哀求已被承受,但是处理未完成。
  • 203 Non-authoritative Information:文档以前正常地前往,但一些应对头约莫不准确,由于使用的是文档的拷贝。
  • 204 No Content:没有新文档。欣赏器应该持续体现原本的文档。假如用户定期地改造页面,而Servlet可以确定用户文档充足新,这个形态代码是很有效的。
  • 205 Reset Content:没有新文档。但欣赏器应该重置它所体现的内容。用来欺压欣赏器扫除表单输入内容。
  • 206 Partial Content:客户发送了一个带有Range头的GET哀求,办事器完成了它。

# 形态码3xx:重定向

  • 300 Multiple Choices:多重选择。链接列表。用户可以选择某链接抵达目标地。最多允许五个地点。
  • 301 Moved Permanently:所哀求的页面以前转移至新的url
  • 302 Found:所哀求的页面以前暂且转移至新的url。
  • 303 See Other:所哀求的页面可在别的url下被找到。
  • 304 Not Modified:未按预期修要文档。客户端有缓冲的文档并发射了一个条件性的哀求(寻常是提供If-Modified-Since头表现客户只想比指定日期更新的文档)。办事器报告客户,原本缓冲的文档还可以持续使用。
  • 305 Use Proxy:客户哀求的文档应该经过Location头所指明的署理办事器提取。
  • 306 Unused:此代码被用于前一版本。现在已不再使用,但是代码仍然被保存。
  • 307 Temporary Redirect:被哀求的页面以前暂且移至新的url。

# 形态码4xx:客户端错误

  • 400 Bad Request:办事器未能了解哀求。
  • 401 Unauthorized:被哀求的页面必要用户名和暗码。
  • 401.1:登录失败。
  • 401.2:办事器设置招致登录失败。
  • 401.3:由于 ACL 对资源的限定而未取得受权。
  • 401.4:挑选器受权失败。
  • 401.5:ISAPI/CGI 使用步骤受权失败。
  • 401.7:拜候被 Web 办事器上的 URL 受权战略回绝。这个错误代码为 IIS 6.0 所自用。
  • 402 Payment Required:此代码尚无法使用。
  • 403 Forbidden:对被哀求页面的拜候被克制。
  • 404 Not Found:办事器无法找到被哀求的页面。
  • 405 Method Not Allowed:哀求中指定的办法不被允许。
  • 406 Not Acceptable:办事器天生的呼应无法被客户端所承受。
  • 407 Proxy Authentication Required:用户必需起首使用署理办事器举行验证,如此哀求才会被处理。
  • 408 Request Timeout:哀求超出了办事器的等候时间。
  • 409 Conflict:由于分歧,哀求无法被完成。
  • 410 Gone:被哀求的页面不成用。
  • 411 Length Required:“Content-Length” 未被界说。假如无此内容,办事器不会承受哀求。
  • 412 Precondition Failed:哀求中的条件条件被办事器评价为失败。
  • 413 Request Entity Too Large:由于所哀求的实体的太大,办事器不会承受哀求。
  • 414 Request-url Too Long:由于url太长,办事器不会承受哀求。当post哀求被转换为带有很长的查询信息的get哀求时,就会产生这种情况。
  • 415 Unsupported Media Type:由于前言典范不被支持,办事器不会承受哀求。
  • 416 Requested Range Not Satisfiable:办事器不克不及满意客户在哀求中指定的Range头。
  • 417 Expectation Failed:实行失败。
  • 423:锁定的错误。

# 形态码5** 办事端错误

  • 500 Internal Server Error:哀求未完成。办事器碰到不成预知的情况。
  • 501 Not Implemented:哀求未完成。办事器不支持所哀求的功效。
  • 502 Bad Gateway:哀求未完成。办事器从高明办事器收到一个没效的呼应。
  • 503 Service Unavailable:哀求未完成。办事器暂且过载或宕机。
  • 504 Gateway Timeout:网关超时。
  • 505 HTTP Version Not Supported:办事器不支持哀求中指明的HTTP协议版本。

内容底部广告位(手机)
标签:

管理员
草根站长管理员

专注网站优化+网络营销,只做有思想的高价值网站,只提供有担当的营销服务!

上一篇:go(看完这份手册,还学不会Go语言,我倒立洗头!(建议收藏))
下一篇:返回列表