IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。码农:你知道get和post请求到底有什么区别?程序员:你看这篇就知道了。码农:你月薪三万了?程序员:嗯。码农:你是怎么做到的?程序员:我做梦做到的前
IT界著名的程序猿曾说:针对这些月薪三万下列,自称为IT技术工程师的程序员们,实际上大家从来没有把她们归到大家IT技术工程师的团队。她们尽管一直以IT技术工程师自诩,但仅仅她们一厢情愿而已。
这话一出,不知道激发了是多少(程序员)程序猿的恼怒,却又万般无奈,因此程序员问程序猿。
程序员:你了解get和post要求究竟有什么不同?
程序猿:你看看这篇就知道。
程序员:你月薪三万了?
程序猿:嗯。
程序员:你是怎么保证的?
程序猿:我作梦保证的
引言
这个问题几乎招聘面试的过程中一定会问起,是一个老调重弹的话题讨论,殊不知伴随着持续的学习培训,针对之前的了解有很多错误观念,因此也是要不断汇总的,学而时习之,不亦说乎。
有关get和post假如您有标准上百度搜索得话,最少有200百万条結果,每个人有每一个人的思索,自然,这篇也就是我的思索,假如有一些结果有不正确,期待可以喷起来。在指责中不断完善,与诸位共勉之一句话:若指责无意义,则赞扬无意义。
01 特性
1.1 http的特点
根据tcp/ip、一种互联网应用层协议、HTML文件传输协议HyperText Transfer Protocol
工作方式:手机客户端要求服务器端回复的方式
迅速:无状态联接
灵便:可以传送随意目标,对象种类由Content-Type标识
手机客户端要求request信息包含下列文件格式:要求行(request line)、请求头顶部(header)、空白行、要求数据信息
服务器端回应response也由四个一部分构成,分别是:情况行、消息报头、空白行、回应文章正文
1.2 要求方式
http要求可以采用多种多样要求方式。
HTTP1.0界定了三种要求方式: GET, POST 和 HEAD方法。
HTTP1.1新增加了五种要求方式:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP2.0 新的二进制文件格式(Binary Format),HTTP1.x的分析是根据文字。根据文字协议书的文件格式分析存有自然缺点,文字的表达形式有多元性,要保证可扩展性考虑到的情景必定许多,二进制则不一样,只认0和1的组成。根据这类考虑到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 2.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 回显网络服务器接到的要求,适用于检测或确诊。
1.3 大家广为人知的的差别
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对要求数据信息沒有限定
02 普遍的错误观念
get和post误区
对于上边常用的差别,假如招聘面试的情况下这样说,肯定是有较大的问题,刚校园内招聘面试的情况下也以前不求甚解地那样说过,如今转过头再想之前的问题认知能力,又有很多新的了解。
2.1 错误观念一
“用途: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是供选择的,无关紧要。
2.2 错误观念二
“要求主要参数长短限定: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主要参数就不一定能顺利接受到了。
2.3 错误观念三
“post比get安全系数要高”
这儿的安全防护是相对,并非真实的意义上的安全性,根据get递交的统计数据都将表明到url上,网页页面会被浏览器缓存,别人查看历史记录会见到上传的数据信息,而post不容易。此外get递交数据信息还有可能会导致CSRF进攻。
2.4 错误观念四:“GET造成一个TCP数据;POST造成2个TCP数据。”
这一点了解的时候依然有一定困难的,事实上,无论哪一种电脑浏览器,在推送 POST 的情况下也没有带 Expect 头,server 也肯定不容易发 100 continue。根据抓包软件发觉,虽然会分2次,body 便是紧跟在 header 后边推送的,压根不会有『等候网络服务器回应』这一说。
从另一个角度来说,TCP 是网络层协议书。他人询问你应用层协议里的 GET 和 POST 有啥差别,你回应说这个在网络层上传送数据的情况下不一样,明确他人不抽你?
参考文献:https://zhuanlan.zhihu.com/p/25028045
3 http状态码附则
3.1 状态码1xx
100 Continue:
网络服务器仅接受到一部分要求,可是一旦网络服务器并没回绝该要求,手机客户端应当再次推送其他的要求。
101 Switching Protocols:
网络服务器变换协议书:网络服务器将遵循顾客的要求变换到此外一种协议书。
102: 由WebDAV(RFC 2518):
拓展的状态码,意味着解决将被执行
3.2 状态码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要求,网络服务器完成了它。
3.3 状态码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。
3.4 状态码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:
锁住的不正确。
3.5 状态码5** 服务器端不正确
500 Internal Server Error:
要求没完成。网络服务器碰到不能预见的状况。
501 Not Implemented:
要求没完成。网络服务器不兼容所要求的作用。
502 Bad Gateway:
要求没完成。网络服务器从上下游网络服务器接到一个失效的回应。
503 Service Unavailable:
504 Gateway Timeout:
网关ip请求超时。
505 HTTP Version Not Supported:
网络服务器不兼容要求中指出的HTTP协议书版本号。
文章正文:鲁大师seo
<!– 文章来源:不明 –>
标题:程序猿:我终于了解post和get的差别
原创文章,作者:鲁大师seo,如若转载,请注明出处:http://www.luseo.cn/archives/8753.html