协议(二)
HTTP协议
概念
HTTP:超文本传输协议,属于应用层协议,是Web通信的基础
URL
URL: 统一资源定位符
组成:
1. http://(协议)1. www.baidu.com(主机, 也可以是IP地址)1. :80(端口)1. /path(资源路径)1. ?k=v&k=v(查询参数)1. #hash(锚点)
请求响应模型
浏览器访问页面,或者点击页面上的按钮,会发送请求到服务器,服务器根据请求参数返回响应给浏览器,这就是请求响应模型。
HTTP工作过程(从浏览器输入URL点击回车,到浏览器显示内容,中间发生了什么?)
-
浏览器输入URL,点击回车
-
域名解析(DNS解析):将域名转化为IP地址
- 先去查找浏览器DNS缓存
- 查找本地计算机的hosts映射记录
- 查看DNS服务器获取
-
建立TCP连接(三次握手)
-
浏览器发送HTTP请求给服务器,服务器根据请求参数进行逻辑处理,然后返回结果给浏览器
-
根据实际情况断开或者维持TCP连接(connection:keep-alive)
-
浏览器根据响应内容,渲染页面
-
ajax异步请求,根据结果局部刷新页面
HTTP报文
-
请求报文
-
请求行(请求方式 URL 协议版本 回车换行)
-
请求头(字段名:字段值 回车换行)
-
空行
-
请求正文
-
-
响应报文
- 响应行(协议版本 响应码 响应码的描述 回车换行)
- 响应头(字段名:字段值 回车换行)
- 空行
- 响应正文
HTTP特点
- 客户端/服务器模式(请求响应模式)
- 简单快速:请求只需要请求方式和请求URL,结构简单,响应快速
- 灵活:支持多种数据格式,只要声明Content-Type值
- 无连接:每次连接只处理一个请求,服务器收到客户端的应答之后,就会断开连接
- 无状态:每次请求服务器都会把它当作一个独立请求,不会记录之前的连接信息
- 明文传输:HTTP不支持数据加密,会带来安全问题
有状态的HTTP(HTTP状态保持)
-
cookie:在客户端保存用户信息
客户端携带登录信息发送请求到服务器,服务器验证通过之后生成用户cookie返回给客户端,客户端将cookie存储下来,在之后的请求中携带cookie数据,达到身份验证的目的。
缺点:
1. 存储在浏览器本地的cookie可能泄露用户信息 2. cookie数据过多会影响网络传输效率
-
session:在服务端保存用户信息
客户端携带登录信息发送请求到服务器,服务器验证通过之后在服务端生成用户的session,然后将sessionid返回给客户端,客户端将sessionid存储下来,在之后的请求中携带sessionid,服务端通过服务器存储的session信息验证用户身份。
缺点:
1. 用户登录信息过多时,会影响服务器性能 2. 后台服务多个实例运行的情况下,需要考虑共享session的问题
-
token:令牌
客户端携带登录信息发送请求到服务器,服务器验证通过之后会生成一个token字符串,然后将token字符串返回给客户端,客户端将token存储下来,在之后的请求中携带token,服务端可以验证token是否可用,如果token可用,就返回正常响应结果。
HTTP操作方式
- GET:获取指定资源的数据
- POST: 向指定的资源提交数据,数据放在请求正文中
- PUT:提交数据到指定资源取代之前的数据
- DELETE:申请删除指定资源的数据
- HEAD:等同于GET,但是只获取响应头,不获取响应正文
- OPTIONS:允许客户端查看服务器性能
- TRACE:回显服务器收到的请求,用作测试
POST提交数据方式(编码方式)
- application/x-www-form-urlencoded:post默认提交方式
- multipart/form-data:键值对的数据类型
- application/json:json数据
- text/xml:xml数据
GET与POST的区别
- GET请求数据,POST提交数据
- GET数据放在URL中,POST数据放在请求正文中
- GET数据只支持URL编码,POST数据支持多种编码方式
- GET请求数据受URL长度限制,POST数据没有限制
- GET请求数据在URL中显示,并不安全;POST数据相对安全
- GET请求数据会被浏览器缓存,但是POST请求数据不会
HTTP响应码
-
1xx:信息响应
-
2xx:成功响应
- 200:请求成功
- 201:请求成功,并且创建了资源
-
3xx:重定向响应
- 301:请求的URL地址永久发生了改变
- 302:请求的URL地址暂时发生了改变
- 304:请求的资源响应保持不变,可以使用缓存
-
4xx:客户端错误
- 400:请求的语法,参数错误,服务器不处理
- 401:用户未认证
- 403:没有访问权限
- 404:找不到资源
- 405:请求方式错误
-
5xx:服务端错误
HTTP + SSL/TLS,位于应用层和传输层之间
目的是解决HTTP通信安全问题,为通信提供保密性和数据完整性
HTTP:80,HTTPS:443
HTTPS工作过程
-
客户端发送HTTPS请求
-
服务器将公钥和证书发送给客户端
-
客户端验证证书,验证未通过,浏览器会显示“不安全的连接”提示;验证通过,客户端会产生一个随机数,然后通过公钥将随机数加密之后,发送给服务器
-
服务器通过私钥将密文解密,获得随机数;之后将随机数作为私钥进行数据加密
-
客户端获得密文之后,通过随机数进行解密
-
客户端发送HTTPS请求
-
服务器将公钥和证书发送给客户端
-
客户端验证证书,验证未通过,浏览器会显示“不安全的连接”提示;验证通过,客户端会产生一个随机数,然后通过公钥将随机数加密之后,发送给服务器
-
服务器通过私钥将密文解密,获得随机数;之后将随机数作为私钥进行数据加密
-
客户端获得密文之后,通过随机数进行解密
-
安全连接建立