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就只发送一次