http&restful&post-get
: 记录我学习到的关于post&get&rest的相关知识 ------ @author 爱跳舞的小码农 Bboy_fork
rest
什么是rest?
representational state transfer 表述性状态转移,是一种架构风格。
rest原则?
① 网络上的所有事物都被抽象为资源
② 每个资源都有一个唯一的资源标识符
③ 同一个资源具有多种表现形式(xml,json等)
④ 对资源的各种操作不会改变资源标识符
⑤ 所有的操作都是无状态的
restful?
遵守了rest原则的web服务
翻译: “rest式的”
rest式的应用,rest风格的web服务也是rest式的应用,
rest式的web服务是一种ROA
(The Resource-Oriented Architecture) 面向资源的架构
restful是由rest派生出来的
用法
在Restful之前的操作:
http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据
http://127.0.0.1/user/save POST 新增用户
http://127.0.0.1/user/update POST 修改用户信息
http://127.0.0.1/user/delete GET/POST 删除用户信息
RESTful用法:
http://127.0.0.1/user/1 GET 根据用户id查询用户数据
http://127.0.0.1/user POST 新增用户
http://127.0.0.1/user PUT 修改用户信息
http://127.0.0.1/user DELETE 删除用户信息
HTTP根本
HTTP请求报文解剖:
HTTP请求报文由3部分组成(请求行+请求头+请求体)
① 请求方法:GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。
② 为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL。【URL】
③ 是协议名称及版本号。 【没啥好说】
④ 是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。【即header】
⑤是报文体【不多逼逼】
所以 懂了!
那么 我们总用post&get 面试也总会问…
post&get区别
菜逼回答:
get在浏览器回退时是无害的,而POST会再次提交请求。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求在URL中传送参数是有长度限制的,而POST没有限制。
GET比PSOT更不安全,所以不能用来传递铭感信息。
GET参数通过URL传递,PSOT放在Request body中。
正常回答:
HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
而HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行得通的。
post和get还有一个重大区别,
GET产生一个数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会吧http header和data一并发送出去,服务器响应ok(返回数据)。
而对于POST,浏览器先发送header,服务器响应100continue,浏览器在发送data,服务器响应200 ok(返回数据)。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?
- GET与POST都有自己的**语义**,不能随便混用。 DELETE、PUT也是语义 是吧。
- 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
- 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
实际上:
get虽然理论上可以跟无限的参数,但是大多数浏览器通常限制在2k个字节,而大多数服务器最多处理64个字节的url, 超过的,恕不处理。 使用GET,在request body中偷偷藏了数据,有的服务器会读取,有的会忽略,不保证能够接到。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同
—— 好 这篇就到这。稳