今天给大家分享:【JS-Task05】get 与 post的区别?application json 与form表单的区别?
分享人:聂义中
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
1.背景介绍
首先我们要了解HTTP协议,这是一种通信协议,不同的联机方式与所使用的网络服务而定, 会有不同的通信协议,发送邮件的时候要使用SMTP,传输文件会使用FTP,下载信件时会 使用POP3等,而浏览器跟WEB服务器之间的沟通方式则是HTTP。
HTTP是一种基于请求响应的通信协议,客户端对服务器发出一个取得资源的请求,服务器 将要求的资源响应给客户端,每次的联结只作一次请求/响应,是一种很简单的通信协议, 没有请求就没有响应
HTTP协议之下,服务器是个健忘的家伙,服务器响应客户端之后,就不会记得客户端的信息, 更不会去维护与客户端有关的状态,因此http又称为无状态的通信协议
URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源, 而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。 到这里,大家应该有个大概的了解了,GET一般用于获取/查询 资源信息,而POST一般用于更新 资源信息
2.知识剖析
get
get请求,顾名思义,就是向服务器取得指定的资源,在发出get请求时必须一并告诉服务器所请求资源的URL,以及一些标头信息
post
POST请求,顾名思义,就是在请求的时候发布信息给服务器,对于大量或复杂的信息发送,基本都会采用POST来进行发送
3.常见问题
get 与 post的区别?
4.解决方案
post和get之间的差别?
1. get是从服务器上获取数据,post是向服务器传送数据。
get 和 post只是一种传递数据的方式,get也可以把数据传到服务器, 他们的本质都是发送请求和接收结果。只是组织格式和数据量上面有差别, http协议里面有介绍
2.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中) ,以?分割URL和传输数据,参数之间以&相连,如: login.action? name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。 如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是 中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD, 其中%XX中的XX为该符号以16进制表示的ASCII。
因为get设计成传输小数据 ,而且最好是不修改服务器的数据,所以浏览器一般都在地址栏里面可以看到, 但post一般都用来传递大数据,或比较隐私的数据,所以在地址栏看不到, 能不能看到不是协议规定, 是浏览器规定的。
3. 对于get方式,服务器端用Request.QueryString获取变量的值, 对于post方式,服务器端用Request.Form获取提交的数据。
怎么获得变量和你的服务器有关,和get或post无关,服务器都对这些请求做了封装 4. get传送的数据量较小,不能大于2KB。post传送的数据量较大 ,一般被默认为不受限制。
post基本没有限制,我想大家都上传过文件,都是用post方式的。只不过要修改 form里面的那个type参数
5. get安全性非常低,post安全性较高。
5.编码实战
6.扩展思考
application json 与form表单的区别?
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上, 现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。 由于 JSON规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify, 服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。angular中默认的就是这个格式
application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性, 那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样 ( 无关的请求头在本文中都省略掉了): POST http://www.example.com HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3 首先,Content-Type 被指定为 application/x-www-form-urlencoded; 其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val都进行了 URL 转码。 大部分服务端语言都对这种方 式有很好的支持。例如 PHP 中,$_POST['title'] 可以获取到 title 的值,$_POST['sub'] 可以得到 sub 数组。
这两种方式也是经常被互相转换的使用的,一般情况从json转换成form的情况会相对多一些。
7.参考文献
https://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
https://www.zhihu.com/question/51359933?from=profile_question_card
8.更多讨论
1 post可以修改数据吗?
答: 按照HTTP规范来说是不可以的,但是实际上可以用 post来修改数据
2 get 和 post 在实际应用中怎么选择
答: get只能提交少量的数据,而post几乎对提交的数据大小无限制,所以用post 总是没错的。
3 还有哪些其他的提交表头的方法?
答: multipart/form-data,这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值。
鸣谢
感谢大家观看
BY :聂义中
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~