HTTP协议
HTTP协议,即超文本传输协议,用来规定服务端和客户端的信息传递规范。主要由HTTP请求报文和响应报文组成
- 一个响应对应一个请求
- 响应是被动的,不能主动发起
- 是建立再TCP协议之上
- HTPP默认端口80、HTTPS默认端口443
HTTP协议特点:
- 无连接:服务器每次只处理一个请求,收到客户端应答后,立即断开连接
- 无状态:服务器不会保存请求的任何痕迹
- 简单快速:传输的报文格式简单、内容少
- 灵活:允许传输的数据类型多,如html、json、xml、text
HTTP请求报文
由以下四部分组成:
1、请求行
- 请求的第一行,且独占一行
- 包含请求方法、请求路径、请求协议及版本
2、请求头
- 第二行开始到N行,由键值对组成
- User-Agent:告诉服务器客户端的相关信息
- Cookie:带给服务器的cookie信息
- Referer:告诉服务器,此请求是从哪个页面上发出来
- Content-Type :
① 表示客户端向服务端传输数据的格式
② 常见的Content-Type值有:x-www-form-urlencoded、JSON、XML 等,
浏览器默认 x-www-form-urlencoded 格式
3、空行
4、请求消息体
- 即请求正文,Get请求一般没有请求正文
HTTP响应报文
由以下四部分组成:
1、状态行
- 协议及版本、状态码及状态描述组成
- 状态码:
1xx:消息类,一般告诉客户端,请求已收到,正在处理
2xx:处理成功
3xx:重定向
4xx:客户端的错误,如请求不存在的资源
5xx:服务端的错误
2、响应头
- 第二行开始到N行,由键值对组成
- Content-Type :服务端向客户端传输数据的格式
3、空行
4、响应消息体
- 响应内容(文件、json)
HTPP请求方法
主要的请求方法有GET、POST、DELETE、PUT,最常用的是前两个。
GET方法特点:
- 不安全,数据置于请求行,浏览器地址栏可见
- URL长度会被浏览器限制,一般在2000字符内
- 请求响应速度快
- 是默认的请求方法,不需要提交大量数据、无敏感、无保密数据时使用
- 可能会被缓存
- 请求可能被保留在浏览器的历史记录中
POST:
- 安全,数据置于请求体中,浏览器地址栏不可见
- 提交的数据大小不受限制
- 请求响应速度慢
- 需要提交大量数据,有敏感、保密数据时使用
- 不会被缓存
- 请求不会被保留在浏览器历史记录中
Cookie和Session
因为HTTP协议是无连接状态,所以服务器不会保留请求的状态,但是当我们需要服务器记住状态,这就需要Cookie、Session或Token
Cookie
Cookie由服务端生成,发送给客户端,浏览器会将Cookie的key/value存储在本地,下次请求同一网站时就发送这个Cookie给服务器
用处:利用cookie记住用户名
Session
Session由服务端产生,存在服务器内存中
- Session是一个对象,由SessionID属性和invalidate()等方法
- 有自己的管理急支,包括Session创建、销毁、超时机制
- 销毁Session的方式
① 客户端调用Session的注销方法invalidate()
② 服务器宕机
③ Session超时,服务器自动销毁
注:关浏览器不会销毁session
Cookie和Session实现登录原理
- 服务器产生Session,并把SessionID通过响应头返回给客户端
- 浏览器把这个SessonID存储在Cookie中,以后的每次请求,都会把Cookie中的所有内容通过请求发送给服务端
- 服务端从请求中获取SessionID的值,再把该SessionID与内存中的SessionID比较,相同则允许访问,否则拒绝访问