HTTP协议
概念
- 即超文本传输协议。规定浏览器与服务器之间的通讯规则。
- 基于请求-响应模式,分为请求协议与响应协议
请求
- 请求内容就是客户端发给服务器的内容
- 请求格式
- 请求首行
- 请求头
- 空行
- 请求体(正文)
- 请求方法
- 常见请求方法有GET和POST
- 在浏览器地址栏中发送请求,以及点击超链接都是GET请求
- 提交表单可以发送GET请求,以及POST请求
- GET请求没有请求体,但空行是存在的
- POST请求是存在请求体的
请求体
GET方法没有请求体,POST才有请求体,请求体内容为:参数名=参数值&参数名=参数值,其中参数值为中文,会使用URL编码。常见请求头
- Host:请求的服务器主机名
- User-Agent:客户端浏览器与操作系统相关信息
- Accept-Encoding:客户端支持的数据压缩格式
- Connection:客户端支持的连接方式
- Cookie:客户端发送给服务器的“小甜点”,它服务器寄存在客户端的。如果当前访问的服务器没有在客户端寄存东西,那么就不会存在它!
- Content-Length:请求体的长度
- Referer:当前发出请求的地址,例如在浏览器地址栏直接访问服务器,那么没有这个请求头。如果是在www.baidu.com页面上点击链接访问的服务器,那么这个头的值就是www.baidu.com
- 作用1:统计来源
- 作用2:防盗链
- Content-Type:如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码。
响应
响应就是服务器发送给客户端的数据!
响应格式:
- 响应首行
- 响应头
- 空行
- 响应体(或称之为响应正文)
状态码
- 响应首行的结构:协议及版本 状态码 状态码说明,例如:HTTP/1.1 200 OK
- 200:请求成功
- 302:请求重定向
- 304:请求资源没有改变
- 404:请求资源不存在,属性客户端错误
- 500:服务器内部错误
响应头
- Content-Type:响应正文的MIME类型,例如image/jpeg表示响应正文为jpg图片,例如text/html;charset=utf-8表示响应正文为html,并且编码为utf-8编码。浏览器会通过这一信息来显示响应数据
- Content-Length:响应正文的长度
- Set-Cookie:服务器寄存在客户端的“小甜点”,当客户端再次访问服务器时会把这个“小甜点”还给服务器
Date:响应时间,可能会有8小时的误差,因为中国的时区问题
通知客户端浏览器不要缓存页面的响应头:
- Expires:-1
- Cache-Control: no-cache
Pragma: no-cache
自动刷新响应头,浏览器会在3秒钟后自动重定向到传智主页
Refresh: 3;url=http://www.itcast.cn
- 状态码304
相关头信息
- 状态码304
- Last-Modified:响应头,表示当前资源的最后修改时间;
If-Modified-Since:请求头,表示缓存的资源最后修改时间;
状态码304:表示访问的资源没有改变
- 客户端首次访问服务器的静态资源index.html,服务器会把index.html响应给客户端,而且还会添加一个名为Last-Modified的响应头,它说明了当前index.html的最后修改时间
- 客户端收到响应后,会把index.html缓存在客户端上,而且还会把Last-Modified缓存起来。
- 客户端第二次请求index.html时,会添加名为If-Modified-Since的请求头,它的值是上次服务器响应头Last-Modified,服务器获取到客户端保存的最后修改时间,以及当前资源的最后修改时间进行比较,如果相同,说明index.html没有改动过,那么服务器不会发送index.html,而是响应状态码304,即通知客户端资源没有改变,你可以使用自己的缓存。