[是什么]
我们先来重温一下web应用模式。
打电话——HTTP(超文本传输协议)
Http的存在是为了客户机和服务器之间的通信。客户机“请求”,服务器“应答”。读者请看上上图,“HttpRequest”的中文意思就是:Http请求。
get和post是请求的2种方法。
[其他http的请求方法]
名称 | 作用 |
Head | 与get相同,但只返回HTTP报头,不返回文档主体 |
put | 上传指定的URI表示 |
delete | 删除指定资源 |
options | 返回服务器支持的http方法 |
connect | 把请求连接转换到透明的TCP/IP通道 |
其中,put、 delete、post、get对应着对请求进行“增删改查”。今天我们只来说说get和post
[获取/查询——get]
get方法最常用,其是从指定的资源请求数据。
其形式为:URL?传输数据;参数&参数。
传输规则为:
数据 | 发送形式 |
英文字母/数字 | 原样 |
空格 | + |
中文/其它字符 | 用Base64加密 |
例子如下:
login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD
[更新——post]
post是向指定的资源提交要被处理的数据,比如完成表单数据的提交,将数据提交给服务器处理。
例子如下:
POST/test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
在以下情况中,一般使用 POST请求:
(1)无法使用缓存文件(更新服务器上的文件或数据库)
(2)向服务器发送大量数据(POST没有数据量限制)
(3)发送包含未知字符的用户输入时(POST比 GET更稳定也更可靠)
[两者比较]
比较项 | get | post |
作用 | 获取数据 | 提交数据 |
是否有数量限制 | 是 | 否 |
传参方式(一般) | url | request body |
限制长度因素 | 浏览器或服务器配置 | 服务器配置和内存大小 |
是否改变服务器的状态 | 否 | 是 |
是否幂等 | 是 | 否 |
提供的资源 | 参数 | 表单 |
是否有缓存 | 是 | 否 |
服务端获取请求参数用 | Request.QueryString() | Request.Form() |
什么叫做幂等?
同一个请求方法执行多次和仅执行一次的效果完全相同。举个栗子,你第一次说脏话,你妈打你,你第十次说脏话,你妈依旧打你,这就是“不管执行几次,其结果是一样的”。
什么叫做URL?
用来描述信息资源的字符串。
get更安全——不会改变数据
由上表可知,因为get没有改变服务器的状态,所以不管执行多少次,其都不会改变页面呈现的数据,相反,post会。
post更安全——非明文传输
get是明文传输:通过Url方式请求,用户名和密码将明文出现在URL上,可以直接看到。
get的安全和post的安全有什么区别呢?
就像你想借朋友的一本书,朋友之所以会把书借给你,是因为认为你是“安全的”。
第一,你不会在书上乱写乱画——get安全;
第二,你不会拿着它时,在半路遇到抢劫的,书被歹徒抢走——post安全
[小结]
1.一句话总结get和post的区别:get更简单更快,更常用,post更安全。
2.记得听“得到”的时候,万维钢老师说过,大概意思是:怎么才算真正理解了这个知识?你讲的能让一个10岁儿童听懂就行。如此,我正在努力。加油