什么是协议?
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议),用于客户端和服务器之间的通信, 目前使用的版本为1.1。属于网络七层协议中的应用层协议。(应用层,表示层,会话层,传输层,网络层,链路层, 物理层)。
http协议特点
无状态。指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息, 则它必须重传。
基于http协议层面的前后端的交互
1.客户端发起http请求,通过 socket与服务器端建立tcp连接(三次握手)。
2.发送请求报文。
3.服务端接收到请求后,进行相应处理并以报文的形式返回。
4.断开连接(四次挥手)。
请求和响应头共有的头字段
Remote Address:请求的远程地址
Request URL:请求的域名
Request Method:页面请求的方式:GET/POST
Status Code:请求的返回状态
请求报文
请求头
origin:页面的来源,跨域时使用。 当服务器返回时,浏览器将检查response中是否包含Access-Control-Allow-Origin字段,当缺少这个字段时,浏览器将abort, 就好像没有请求过。当存在这个header时,浏览器将检查当前请求所在域是否在这个access-control-allow-origin所允许的域内, 如果是,继续下去,如果不存在,abort! 跨域的时候get,post都会显示origin,同域的时候get不显示origin,post显示origin。
referer:显示页面来源。使用场景: 1、统计访问量。例如百度中某个网站的访问量。从百度发起对目标服务器请求 2、防盗链。如果是来源是允许的,则允许访问,否则需要直接跳转到原页面进行访问。不允许从其他网站直接访问本站内容。
connection :浏览器与服务器之间的连接,keep-alive(长连接)。
proxy-connection:通过代理去请求,由connection转变成。是否使用了代理。
Host: 请求服务器的网址。
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0 ——浏览器版本信息
BUTONG FANGSHI Accept: application/json, text/plain, / ——希望服务器提供的内容的数据类型。
origin:页面的来源,跨域时使用。
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2——支持的语言。
Accept-Encoding: gzip, deflate —浏览器支持的压缩格式。
请求行
请求方法
GET:获取资源;
POST:传输实体主体;
OPTIONS:预检,询问支持的方法;
PUT:传输文件;
HEAD:获得报文首部;
DELETE:删除文件
TRACE:追踪路径(Max-Forwards);
CONNECT:要求在与代理服务器通信时建立隧道, 实现用隧道协议进行TCP通信。(SSL/TLS)
请求体
例如:
响应报文
响应行
HTTP/1.1 200 OK
响应头
Date: Mon, 07 Jan 2019 15:34:41 GMT —此条消息被发送时的日期时间
Content-Type: text/html; charset=UTF-8 —返回的数据类型
Transfer-Encoding: chunked —传输编码:分块编码
Connection: keep-alive —连接为长连接
Vary: Accept-Encoding —告诉代理服务器/缓存/CDN,如何判断请求是否一样
Content-Encoding: gzip —内容支持的压缩格式
Server: 服务器名称
Access-Control-Allow-Methods:GET,POST,OPTIONS,PUT,DELETE ——服务器支持的方法
Access-Control-Allow-Credentials: true —是否允许发送cookie
Access-Control-Allow-Origin: 解决跨域问题,值为请求可允许的域
Access-Control-Allow-Headers: prelogid,Authorization,DNT,User-Agent, Keep-Alive,Content-Type,accept,origin,X-Requested-With,x-xsrf-token ——允许的头
Age:响应对象在代理缓存中存在的时间,以秒为单位
Refresh:自动刷新响应头 例如:refresh:3;url=http://baidu.com
告诉浏览器不要缓存的响应头:Expire、Cache-Control、Pragma
Expire:-1;(服务器使用Expires头来通知浏览器,它能够使用当前缓存版本一直到指定的某一个时间点)
Cache-Control:no-cache;
Pragma: no-cache;
响应体
响应状态码
1XX:还没完成;
2XX:请求成功;
3XX: 重定向 ;
4XX:客户端错误;
5XX:服务端错误