post请求,程序员:我终于知道post和get的区别了
温馨提示:这篇文章已超过499天没有更新,请注意相关的内容是否还可用!
定义了三种请求方法:GET、POST 和 HEAD 方法。添加了五个新的请求方法:OPTIONS、PUT、DELETE、TRACE 和 CONNECT 方法。我们很熟悉其中的差异。http协议最常见的两种方法是GET和POST。事实上,其中一些答案并不准确。曾听过这样的说法:get代替post来优化网站性能,虽然这个说法是正确的,也确实get经常被用来检索数据,但是post也被一些ui框架用来检索数据,比如kendo ui中的grid使用post来接收数据。所以结论是get和post的使用也是因地制宜。get是querystring,post放在body中。http协议中url的长度没有限制。通过get提交的数据会显示在url上,页面会被浏览器缓存。此外,获取提交的数据也可能引发CSRF攻击。从另一个角度来看,TCP是传输层协议。
HTTP。 定义了三种请求方法:GET、POST 和 HEAD 方法。
HTTP。 添加了五个新的请求方法:OPTIONS、PUT、DELETE、TRACE 和 CONNECT 方法。
。 我们很熟悉其中的差异
http协议最常见的两种方法是GET和POST。 事实上,其中一些答案并不准确。
常见错误
获取并发布误解
鉴于以上常见的差异,如果你在面试时说出这样的话,那肯定有很大的问题。 我在学校面试的时候也大言不惭地说过这句话。 现在回想起来,想想以前的误区,又有了很多新的误区。 理解。
。 误区1
“用途:get常用于检索数据,post用于提交数据”
曾听过这样的说法:get代替post来优化网站性能,虽然这个说法是正确的,也确实get经常被用来检索数据,但是post也被一些ui框架用来检索数据,比如kendo ui中的grid使用post来接收数据。 所以结论是get和post的使用也是因地制宜。 如果你用过kendo UI,你会发现分页、过滤、自定义参数都包含在表单数据中。
请求参数
get是querystring(仅支持urlencode编码),post放在body中(支持多种编码)
查询参数是URL的一部分,GET、POST等都是请求方式之一。 无论使用哪种请求方式,都必须有一个URL,并且URL的查询是可选的,可有可无。
。 误区2
“请求参数长度限制:get请求长度最大为kb,post请求数据无限制”
这句话看上去没什么毛病,菜鸟教程也是这么说的。 虽然字面意思没有错误,但是理解一定是正确的。我想说的是,GET方法提交的url参数数据的大小是没有限制的。 http协议中url的长度没有限制(不仅仅是querystring的长度)。 此限制是特定浏览器和服务器施加的限制。
以下是各种浏览器和服务器最大处理能力的说明
所以为了遵守所有标准,最好不要超过url的最小标准字符(k+)。 当然,做客户端程序时,url并不会显示给用户,只是程序调用,长度只受web服务器的影响。 对于中文传输来说,一个汉字的最终编码字符长度是字符。
最常见的form表单,浏览器默认的form表单,默认的content-type是
application/x-www-form-urlencoded,提交的数据会是key value的形式,jquery的ajax默认就是这种content-type。 当然,在post方法中添加querystring一定能接收到,但在get方法中添加body参数却不一定能成功接收。
。 误区3
“发布比获取更安全”
这里的安全是相对的,不是真正意义上的。 通过get提交的数据会显示在url上,页面会被浏览器缓存。 其他人在查看历史记录时会看到提交的数据,但post不会。 。 此外,获取提交的数据也可能引发CSRF攻击。
误区四:“GET 生成一个 TCP 数据包;POST 生成两个 TCP 数据包”。
这一点还是很难理解的。 事实上,无论什么样的浏览器在发送POST时,都不包含Expect头,服务器自然不会发送Continue。 通过抓包发现,虽然会被分成两部分,但是body是在header之后立即发送的,不存在“等待服务器响应”的情况。
从另一个角度来看,TCP是传输层协议。 有人问你应用层协议中GET和POST有什么区别,你回答说在传输层发送数据时不同。 你确定别人不会抽烟吗?
参考: