HTTP中请求GET/POST的使用与区别

1. HTTP(Hyper Text Transfer Protocol)超文本传输协议

设计目的: 保证客户端与服务端之间的请求-相应协议(相当于交互)

注:web可能是客户端,计算机上的网络应用(QQ,百度)也可能作为服务器

客户端(浏览器)向服务器提交HTTP请求,服务器收到请求后向客户端返回响应(响应包含关于请求的状态信息以及请求的内容)

2. 请求方法

1) GET 它用于获取信息,它只是获取、查询数据,也就是说它不会修改服务器上的数据,从这点来讲,它是数据安全的,Post它是可以修改数据的,这是两者差别之一了。

2) Post 它是可以向服务器发送修改请求,从而修改服务器的,比方说,我们要在论坛上回贴、在博客上评论,这就要用到Post了,当然它也是可以仅仅获取数据的。

3) Delete 删除数据。可以通过Get/Post来实现。

4) Put,增加、放置数据,可以通过Get/Post来实现。

3. 常用的两种请求方法GET POST

CET  从服务器请求数据后获取服务器端数据 只读数据不能修改

常见发起GET请求的方式有:

URL 、src/href、表单(form)

格式:

index.php?userName=jack&password=123
语法 (key=value&key=value): userName=jack&password=123 叫做查询字符串

特点:

参数名与参数值之间没有空格
参数值不需要使用单双引号包括

具体情况使用GET方法:

1.客户端与服务端的交互像是一个提问(如查询操作、搜索操作、读操作)

2.请求是为了查找资源,HTML表单数据仅用来帮助搜索

3.请求结果无持续性的副作用(如进行搜索)

4.收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符

5.获取参数或者短小的内容时用GET,如 ?id=5 或者 ?title=abc&url=http...

GET方式提交数据特点:

1、get方式在url后面拼接参数,只能以文本的形式传递参数

2、传递的数据量小,4kb左右(不同浏览器会有差异)

3、安全性低,会将信息显示在地址栏

4、速度快,通常用于对安全性要求不高的请求

举例 :
GET方法可以携带交互需要的所有数据,当搜索百度或谷歌的时候,点击搜索形成的URL包含了刚才的搜索关键字及相关内容,没有安全需求的请求把信息放URL里是没关系的

POST 就是发送、提交。向服务器提交/发送要被处理的数据。

格式:

注意:与GET不同的是,查询字符串(名称/值)是在 POST 请求的 HTTP 消息主体中发送的:

POST /test/demo_form.asp HTTP/1.1
Host:  http://w3schools.com
name1=value1&name2=value2

具体情况使用POST方法:

1.交互是一个命令或订单(order),比提问包含更多信息

2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务

3.用户需要对交互产生的结果负责

4.请求的结果有持续性的副作用,例如,数据库内添加新的数据行

5.GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制,所以使用POST

7.获取大断的内容用POST,通常表单用 POST 方式提交数据,表单的method必须设置为POST

8.对数据有变更的请求(增删)用post;(比如发贴,回复的form 用的是 POST)

POST方式提交数据特点:

1、post提交数据相对于get的安全性高一些。(注意:抓包软件也会抓到post的内容,安全性要求高可以进行加密)

2、传递数据量大,请求对数据长度没有要求

3、请求不会被缓存,也不会保留在浏览器的历史记录中

4、用于密码等安全性要求高的场合,提交数据量较大的场合,如上传文件,发布文章等

5、POST方式提交数据上限默认为8M(可以在PHP的配置文件post_max_size选项中修改)

举例 :
访问银行网站或请求带有个人隐私的时候,把账户、密码这些放在URL里被人拦截是不安全的, 所以HTTP设计了POST请求,他可以把请求信息(创建资源,资源的内容)放在HTTP请求里

总结:

GET在浏览器回退时是无害的,而POST会再次提交请求
GET产生的URL地址可以被Bookmark,而POST不可以
GET请求会被浏览器主动cache,而POST不会,除非手动设置
GET请求只能进行url编码,而POST支持多种编码方式
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
GET请求在URL中传送的参数是有长度限制的,而POST没有
对参数的数据类型,GET只接受ASCII字符,而POST没有限制
GET参数通过URL传递,POST放在Request body中
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

GET和POST还有一个重大区别,简单的说:

GET产生一个TCP数据包;POST产生两个TCP数据包

1. 在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视

2.而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点

2. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次


版权声明:本文为Y_I_M_I_l_u_c_k原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。