GET,POST — 简述

本文主要对GET与POST基本区别进行汇总并掌握,若有错误与遗漏之处,请指出。html

1. HTTP

HTTP(即超文本传输协议)是现代网络中最多见和经常使用的协议之一,
设计它的目的是保证客户机和服务器之间的通讯。
HTTP 的工做方式是客户端与服务器之间的 “请求-响应” 协议。
客户端能够是 Web 浏览器,服务器端能够是计算机上的某些网络应用程序。
一般状况下,由浏览器向服务器发起 HTTP 请求,服务器向浏览器返回响应。
响应包含了请求的状态信息以及可能被请求的内容。segmentfault

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)中。restful

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的区别总结

相关文章
相关标签/搜索