get 与 post的区别?application json 与form表单的区别?

1.背景介绍

GET和POST是什么?

GET和POST是 HTTP协议中的两种发送请求的方法。

HTTP又是什么?

HTTP是hypertext transfer protocol(超文本传输协议)的简写, 它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。 一个完整的HTTP请求包括如下内容:一个请求行、若干消息头、以及实体内容

请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有: GET、 POST

application json与原生form表单是什么?

这是两种编码方式。当使用POST请求向服务器发送数据时,需要使用send()方法 。 而使用send()方法传入数据时,需要使用xml.setRequestHeader设置头部信息, 其中原生form表单(即application/x-www-form-urlencoded)和application/json就是两种常用的编码方式。

                    
    xml.open('POST','http://localhost:12/carrots-admin-ajax/a/login',true);
    xml.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xml.send(totalValue);//使用POST设置请求头内容类型,传输数据//使用原生FORM内容类型
                    
                

2.知识剖析

get和post的区别?

get: 主要用于从服务器上获取数据。如果需要传输数据,将数据按照variable=value的形式,添加到行为所指向的URL后面,并且两者使用“?”连接, 而各个变量之间使用“&”连接。

post: 向服务器传送数据,将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

get 和 post只是一种传递数据的方式,get也可以把数据传到服务器,他们的本质都是发送请求和接收结果。只是组织格式和数据量上面有差别。

GET和POST长度的限制问题

GET
    1.GET是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系。
    2.实际上HTTP协议对URL长度是没有限制的;限制URL长度大多数是浏览器或者服务器的配置参数。
POST
    1.同样的,HTTP协议没有对POST进行任何限制,一般是受服务器配置限制或者内存大小。
    2.PHP下可以修改php.conf的postmaxsize来设置POST的大小。

GET和POST的安全性

1.GET是通过URL方式请求,可以直接看到,明文传输。
2.POST是通过请求header请求,可以开发者工具或者抓包可以看到,同样也是明文的。
3.GET请求会保存在浏览器历史纪录中,还可能会保存在Web的日志中。

GET幂等,POST不幂等

幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。
1.按照RFC规范,PUT,DELETE和安全方法都是幂等的。虽说是规范,但服务端实现是否幂等是无法确保的。
2.引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。 这也是浏览器在后退/刷新时遇到POST会给用户提示的原因: POST语义不是幂等的,重复请求可能会带来意想不到的后果。

总结

Get是向服务器发索取数据的一种请求。GET的语义是请求获取指定的资源。GET方法是相对安全、幂等、可缓存的。

而Post是向服务器提交数据的一种请求。POST的语义是根据请求负荷(报文主体)对指定的资源做出处理, 具体的处理方式视资源类型而不同。POST相对不安全,不幂等,(大部分实现)不可缓存。

application/x-www-form-urlencoded

这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性, 那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样

                    
    xml.open('POST','http://localhost:12/carrots-admin-ajax/a/login',true);
    xml.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xml.send(bbcuihua);//使用原生FORM内容类型传输数据
                    
                
application/json

JSON 格式支持比键值对复杂得多的结构化数据 用来告诉服务端消息主体是序列化后的 JSON 字符串。
由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify, 服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
Google 的 AngularJS 中的 Ajax 功能,默认就是提交 JSON 字符串。

总结:
当需要传输的数据简单,平面的时候可以使用原生form表单 
当需要传输的数据复杂,繁多的时候可以使用application/json

3.常见问题

4.解决方案

5.代码实战

6.拓展思考

PUT:用于新增资源或者使用请求中的有效负载替换目标资源的表现形式。
PUT 与 POST 方法的区别在于,PUT方法是幂等的:调用一次与连续调用多次是等价的(即没有副作用)。 而连续调用多次POST方法可能会有副作用,比如将一个订单重复提交多次。

DELETE:请求方法用于删除指定的资源。

PUT,DELETE操作是幂等的。

7.参考文献

参考一:get和post区别?—— 知乎

参考二:HTTP 方法:GET 对比 POST

8.更多讨论

9.提问互动:

1.能使用post进行增删查改吗?

语法上能使用pst进行增删查改,但是这不符合这个method的语义规范。也就是用可以,但不符合规范。  自己选择吧

2.使用get进行传递数据?

首先第一点,使用的method要符合接口的要求,如果要求只能用post发送请求,你却用get。那就没得说了。

语法上能使用get进行传递数据但是这不符合这个method的语义规范。也就是用可以,但不符合规范。  自己选择吧

3.application/json在各大浏览器和后台服务器的支持度怎么样?

除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值