GET,POST — 简述

本文主要对GET与POST基础区分举行汇总并控制,若有毛病与脱漏的地方,请指出。

1. HTTP

HTTP(即超文本传输协定)是当代收集中最罕见和经常运用的协定之一,
设想它的目标是保证客户机和服务器之间的通讯。
HTTP 的工作体式格局是客户端与服务器之间的 “要求-相应” 协定。
客户端可所以 Web 浏览器,服务器端可所以盘算机上的某些收集应用程序。
通常情况下,由浏览器向服务器提议 HTTP 要求,服务器向浏览器返回相应。
相应包含了要求的状况信息以及能够被要求的内容。

2.要求体式格局

HTTP要领有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT

个中两种罕见的 HTTP 要求就是:GET 和 POST。
区分: _GET_是从服务器上猎取数据,_POST_则是向指定的资本提交要被处置惩罚的数据

3.花样

要求报文的花样:
  < request line >
  < headers >
  < blank line >
  < request-body >

GET要求数据依据查询字符串(称号/值对)体式格局,安排在HTTP要求协定头(headers)中,也就是URL以后;

而POST提交的数据则放在实体的主体(request-body)中。

4. 缓存,书签,汗青纪录,默许method

  _4.1 缓存:_ GET会被缓存,POST不能。

  _4.2 书签:_ GET可珍藏为书签,POST不可珍藏为书签

  _4.3 汗青纪录:_ GET要求的URL,参数会被浏览器保留在汗青中,POST参数不会。

  _4.4 默许要求:_ 在from提交的时刻,假如不指定Method,则默许为get要求。

5. 相应速度

GET要求是能够被客户端缓存的。会比POST高效。

AJAX环境中GET相应疾速,POST须要先发送HTTP头部(headers) 再发送报文实体的主体(request-body)中的数据。

6. 范例限定

6.1 GET限定数据集的值必需为ASCII字符;

GET提交的数据将会附加在url以后,以?离开与url离开。

1.以 ? 来分开URL和数据;
2.以& 来分开参数;
3.假如数据是英文或数字,原样发送;
4.假如数据是中文或别的字符,则举行BASE64编码
5.GET将数据的依据variable=value的情势,添加到URL背面;
如:http:// www.abc.com/?username=yt&id=123

6.2 POST没有限定,许可二进制数据。

POST是将数据放在要求的数据体(request-body)中,依据查询字符串(称号/值对)相对应的体式格局,通报到所指向URL;

7. 大小限定

7.1.GET体式格局提交的数据最多只能是1024字节,POST支撑较大数据传输

7.2HTTP协定对GET和POST都没有对长度的限定

RFC 2616 中明白对 uri 的长度并没有限定。
不过虽然在RFC中并没有对uri的长度举行限定,然则各大浏览器厂家完成上限定了URL的长度。

 IE对URL长度的限定是2083字节(2K+35)
而关于URL长度上的限定,有两方面的缘由形成 ( 平安斟酌 ):
 浏览器:听说初期的浏览器会对URL长度做限定。IE对URL长度会限定在2083个字符内,Chrome会崩溃。
 服务器:URL长了,对服务器处置惩罚也是一种累赘。
 底本一个会话就没有若干数据,如今假如有人歹意地组织几个几M大小的URL,
 并不停地接见你的服务器。服务器的最大并发数显然会下落。
 另一种攻击体式格局是:把通知服务器Content-Length是一个很大的数,
 然后只给服务器发一点儿数据,嘿嘿,服务器你就傻等着去吧。
 哪怕你有超时设置,这类有意的次次接见超时也能让服务器吃不了兜着走。
 有鉴于此,多半服务器出于平安啦、稳固啦方面的斟酌,会给URL长度加限定。
 然则这个限定是针对一切HTTP要求的,与GET、POST没有关系。

8. 现实中 — POST比GET「相对平安」

GET所发送的数据是 URL 的一部分,
有时刻会直接反应在浏览器的地址栏,
如今的浏览器大多会记着曾输入过的URL(在发送暗码或敏感信息时毫不要运用 GET !)。
试想假如你曾在他人电脑上填过一个很私密的表单,那末你的这份纪录极能够被连没什么电脑基本知识的人都一览无遗。

然则被抓包以后的POST要乞降GET要求是一样袒露的,所以这里是相对的。

9. 语义上 — GET比POST「相对平安」

说 POST 比 GET 平安 也不完全对的。
依据HTTP范例,POST示意能够修转变服务器上的资本的要求。
在语义上(restful视角):
GET的是猎取指定URL上的资本,是读操纵。
主要的一点是不管对某个资本GET若干次,它的状况是不会转变的,
在这个意义上,我们说GET是平安的(不是被暗码学或许数据庇护意义上的平安)。
由于GET是平安的,所以GET返回的内容能够被浏览器,Cache服务器缓存起来。

POST的语义是修转变服务器上的资本的要求,所所以不平安的,
每次提交的POST,代码都邑以为这个操纵会修正资本的状况,
因而,浏览器在你按下F5的时刻会跳出确认框,缓存服务器不会缓存POST要求返回内容。

参考:
GET要乞降POST要求的区分
不再耳食之言,GET和POST的真正区分
浅谈HTTP中Get与Post的区分
HTTP要求Get和Post的区分总结

    原文作者:user杨涛
    原文地址: https://segmentfault.com/a/1190000004829968
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞