HTTP
文章目录
一、HTTP协议详述
HTTP(HyperText Trasfer Protocol)超文本传输协议,规范数据如何打包传输。在HTTP客户端与服务器间传递是通过消息/报文(Message)来完成,并且消息必须符合特定的格式才能互相传输。
- Request Messages : 客户端向服务器发送的请求消息
- Response Message : 服务器根据请求返回客户端的响应消息
1.1 HTTP消息
1.1.1 Request请求消息
客户端向服务器发送的消息,由请求起始行、请求头信息、请求主体三部分组成。
-
请求起始行
-
请求的方法
- GET 客户端向服务器获取数据时使用,明文传输,无请求主体(Form Data)
- POST 客户端向服务器提交数据时使用,隐式传输,有请求主体(Form Data)
- DELETE 客户端要删除服务器内容
- PUT 客户端放数据到服务器
- CONNECT 测试连接
- TRACE 追踪请求路径
-
请求的URL
-
协议的版本
-
-
请求头信息
- Host 告诉服务器请求的主机
- Connection:keep-alive 告诉服务器进行持久连接
- User-agent 用户代理,告诉服务器浏览器类型
- Accept-Encoding:gzip 告诉服务器能接受的压缩文件类型
- Accept-Language:zn-CN,zh 告诉服务器能接收的自然语言类型
- Referer 引用/引荐人,告诉服务器请求来自哪个页面
-
请求主体
- From Data
1.1.2 Response响应信息
服务器想客户端响应的消息,由响应起始行、响应头信息、响应主体三部分组成。
-
响应起始行
-
协议版本
-
响应状态码
1XX: 100-199 提示信息
2XX:200 OK 成功响应
301:永久重定向
301:临时重定向
304:请求未被修改,命中缓存
4XX:客户端请求错误
404:Not Found 请求资源不存在
403:Forbidden 权限不够
405:Method Not Allowed 请求方法不被允许
5XX:服务器运行错误
500:服务器内部错误 -
原因断句 对状态码的简短解释说明
-
-
响应头信息
- Data 告诉浏览器服务器响应的时间 (格林威治时间 北京+8 小时)
- Connection:keep-alive 告诉浏览器已经启动持久连接
- Content-Type 显示响应主体类型
- text/html 响应回来数据是HTML文本
- text/plain 响应回来数据是普通文本 (不含特殊符号)
- text/css 响应回来数据是层叠样式表
- application/javascript 响应回来数据是JavaScript文件
- application/xml 响应回来数据是XML文件
- application/json 响应回来数据是JSON文件
- images/jpg 响应回来数据是图片文件
-
响应主体
1.2 缓存
客户端将服务器响应回来的数据进行自动保存,当再次访问时,直接使用已经保存的数据
1.2.1 缓存优点
- 减少冗余的数据传输节省流量
- 节省服务器带宽
- 降低了对服务器资源的消耗和运行要求
- 降低了由于远程传输而造成的延时加载
1.2.2 缓存新鲜度
- 请求–>无缓存–>连服务器–>存缓存–>客户端得到数据
- 请求–>有缓存–>够新鲜–>使用缓存–>客户端得到数据
- 请求–>有缓存–>不新鲜–>连接服务器查询是否过期–>没过期–>更新鲜度–>客户端得到数据
- 请求–>有缓存–>不新鲜–>连接服务器查询是否过期–>已过期–>连服务器–>存缓存–>客户端得到数据
1.2.3 缓存消息头
- Cache-Contorl 用于HTTP/1.1版本,服务器的文档传输到客户端的计时器,表示此文档处于新鲜的秒数
- Expires 用于HTTP/1.0版本,指定过去的准确的具体时间点
1.2.4 添加缓存
- 格式
<meta http-equiv = "消息头" content="max-age=值">
- 示例:
<meta http-equiv="Cache-Control" content="max-age=3600">
1.3 HTTP性能优化
1.3.1 HTTP连接的过程
1.3.2 HTTP连接性能的优化
- 减少连接的创建次数 开启持久连接
- 减少请求次数
- 提高服务器端运行速度
- 减少响应数据的长度
1.4 HTTPS安全协议
HTTPS协议是安全版的HTTP,其中SSL为数据通信提供安全支持
- 客户端发送请求消息时在SSL层加密,服务器接收加密文件在SSL层解密,得到请求明文对请求进行处理
- 服务器发送响应消息时在SSL层加密,客户端接受加密文件在SSL程解密,得到响应明文解析相应的内容