-
从应用层看微博应用
在cs架构中,虽然有什么springboot等,从应用层来看,本质上都是http的请求-响应,请求-响应… -
什么是http
超文本传输协议
协议: 两个以上的参与者之间行为的约定和规范(http中是两点之间,cs 或ss)
传输: 双向协议,以请求-应答形式呈现,允许中间接力,例如代理
超文本: 除文本外,图片 音频 视频 超链接的混合体
计算机世界中两点之间双向传输超文本的行为约定和规范
http是无状态的,即不会记忆之前的请求和响应,例如登录之后,再次请求如果没有cookie是不会记住上次的登录请求的。 -
http常见的状态码
状态码是服务端向客户端回应的
1: 提示信息,接收的请求正在处理
101: 转换协议,配合upgrate字段使用
2:成功
200: 成功
204:成功,但是没有报文主体 例如 put delete
206:响应的body不是资源的全部,而是请求报文 content-range指定的内容,与range选项配合 83: 重定向 与location字段使用
301:永久重定向
302:临时重定向
303:重定向,使用GET请求
304:服务端资源未改变,可直接使用客户端未过期的缓存 (比对摘要相同,缓存可继续使用)
4:客户端错误 (请求报文)
400:客户端请求报文有误(笼统)
401:需要认证 告诉客户端,该页面需要认证,请携带认证信息 authoration 与www-authenticate配合
403:请求资源的访问被服务端拒绝(例如权限)
404:无法找到请求的资源
412:先验条件失败 与if-xxx配合使用
417: 期望失败 配合except字段使用5:服务端错误
500: 服务器执行请求时错误
501:客户端请求的功能暂不支持 “即将开业,敬请期待”
502:服务器作为网管或者代理,服务器正常,访问后端服务器发生错误
503: 当前服务器忙,稍后重试 一般与retry-after配合使用
504:网关超时,例如代理服务器在if-only-cache下找不到本地缓存 -
客户端请求方法
(1)Get: 获取资源
主要目的是获取服务器的资源(响应内容)
(2)Post:传输实体主体
(3)Put:传输文件 –>204
(4)Head: 只获取报文的首部 一般用于确认URI的有效性等
(5)DELETE:–>删除文件 204
(6)OPTIONS: 询问针对请求URI支持的方法
(7)TRACE: 追踪报文
4.HTTP常连接
不是tcp长连接,早期http,每发送一次http请求,就会连接,断开tcp请求一次。(这次http请求可以有多个数据包)
优点:
(1)减少重复建立断开tcp连接的网络开销
(2)减轻服务端负载
我的理解是(1)重复建立连接 (2)松开连接会有time_wait时间消耗内存和端口资源
(3)节省的时间处理请求,使网页变快 -
管线化
不需要等待上一个http响应就可以发送下一个http请求
-
使用cookie进行状态管理
第一次请求: 没有cookie
第一次响应: set-cookie字段
第二次请求:Cookie字段 -
http报文的格式
-
如何提升传输速率
(1)对报文进行编码
报文主体----编码---->实体主体---->传输
(1)压缩 gzip compress(UNIX 标准压缩)
(2)分块传输编码
按照功能等分类,让浏览器逐步渲染,而不是等到响应完全接收解码后再渲染 -
发送多种类型的数据
Mutipart: 多部分对象集合
contentType:
mutipart/form-data 表单
mutipart/byteRange 只要部分内容 -->206
如果可以传部分,返回206,如果不能,返回200,传输所有
-
代理服务器
代理服务器分为缓存代理和服务代理
浏览器网络部分只是http报文 -
通用首部字段
见下文 -
cache-control 对缓存操作进行控制
第一次请求时,查看有没有缓存,没有,向服务器发送请求,服务器相应数据,并带有一个服务器估计的过期时间和唯一标识(资源摘要) Etag:XXXX
第二次请求,查看有没有缓存,有,查看是否过期,如果没有过期,直接使用该缓存,如果已过期,发送请求报文 并带有if-None-Match:原先的Etag值,服务端接收后,会使用最新Etag与if-none-match值进行比较,如果不同,返回最新资源,如果相同,返回304
cache-control: 缓存指令
缓存指令分为缓存请求指令和缓存响应指令
(1) none-cache:1,2
请求:告诉缓存服务器,我不要缓存过的,给我向服务器请求一份最新的
响应:服务器告诉缓存服务器,这个资源不能缓存
(2)no-store:1,2暗指请求或响应中包含机密信息
不能缓存
(3)s-maxage =xxx 2
缓存的期限,适用于代理服务器
(4)maxage=xxx 1,2
客户端发送的请求带有该字段时,代理会将该值与缓存资源已缓存的时间与该值比较,如果缓存时间<该值,缓存有效,直接返回缓存
当该字段在相应中时,代表该缓存的最长有效时间
与expire字段有一个竞争关系
(5)min-fresh =xxx 1
再过xxx时间,缓存过期吗,如果不过期,返回缓存,如果过期,向服务端请求
(6)max-stale=xxx 1
即使过期了XXX,我还是可以照常接收
(7)only-if-cache 1
我只要你本地缓存的响应,如果没有,返回504
(8) must-revalidate 2
代理会向源服务器再次验证返回的响应是否仍然有效
(9) proxy-revalidare 2
???再次确认有消息
(10)no-transform 2
无论是请求还是响应,代理不能更改实体主体的媒体类型,例如 压缩
12. connection 控制不再转发给首部的字段 和 管理持久的连接
(1)connection:代理不再转发的首部字段
(2)connection:close 或 keepalive
13. Date 创建http报文的日期和时间
14. Pragra :no-cache 规定,为兼容http1.1而设定
15. Trailer 报文主体后有很重要的内容
16. Transfer-Encoding 规定传输报文主体时采用的编码方式
17. Upgrarte
当客户端法送时,询问是否可以用更高版本的协议进行通信。服务端回复,表示可以使用更高版本的协议。
回复报文状态码 101 转换协议
18. via 追踪客户端与服务器之间的请求和响应报文传输路径
19. 请求首部字段
(1)accept
告诉服务器,我能接收什么类型的响应进而其优先级
(2)Accept-charset
我支持的字符集(例如utf-8,定义字符与二进制之间的映射)以及优先顺序,收到响应后,客户端使用特定字符集解码方式进行解码
(3)Accept-Encoding
告诉服务器我支持的报文主体编码方式,例如gzip
(4)Accept-Language
客户端支持的语言
(5)Authorization
携带认证信息,如果不懈怠,服务器返回401
(6)Expect
客户端期望的行为,当服务端不能理解其期望时,会返回 417 期望失败
(7)Form
我的电子邮箱是xxx,有事联系我
(8)Host
服务器的主机名(域名)和端口,存在的意义是当一台服务器(一个ip)虚拟出多台(多个域名),host字段就有意义了
(9)IF-xxxx
只有服务器满足if后面的条件后才会执行请求,否则返回412 匹配失败
(10)max-forward
http报文最大的转发次数,如果此值为0,直接返回响应
作用:当代理服务器出现某种错误,不能继续转发,是不会响应任何错误信息的,使用该选项,判断在哪出了故障
(11)proxy-authorization
代理服务器需要验证时,使用该字段
(12)range
我只要请求资源的range范围内的响应,如果成功响应 206,否则200
(13)refer
告诉服务器这个http请求是在哪个ur中(a标签在哪个页面中),直接从浏览器输入不会有该字段,处于安全考虑页可以不加该字段
(14)TE
传输编码方式 ????
(15)user-agent
客户端信息和代理信息
19. 相应的首部字段
(1)accept-range:byte或none
告诉客户端服务器是否能处理范围请求
(2)age
服务器:多久前建立了这个响应
缓存服务器:多久前缓存了这个响应
(3)ETag
实体标签(摘要) 服务器向客户端(或缓存服务器)返回该响应的唯一标识
(4)Location
重定向,与3xx响应配合使用
(5)proxy-authenticate
代理服务器需要认证时,代理服务器所需的认证信息会由该字段返回给客户端
(6)Retry-after:xxx
xxx后再来访问,一般与503配合使用
(7)vary
???缓存控制
(8)www-authenticate
告诉客户端服务器认证的相关信息,与 401配合使用
(9)content-encoding
实体主体的编码(压缩)方式
(10)content-language
实体主体的语言
(11)content-length
不编码时实体主体的长度,单位字节
(12)content-location
报文主体这个资源的uri地址,可能与请求uri不同
(13)content-md5
实体主体的MD5值,客户端收到报文后,会同样对实体主体进行md5计算,验证实体主体传输过程是否完整,不能保证是否被篡改,因为可以篡改实体主体同时篡改content-MD5值
(14)content-range
请求资源的该范围被响应
(15) content-type: 实体类型;字符集
回应Accept-charset与accept请求头字段
(16)expires
该资源的过期时间
HTTP 1.1 优先处理max-age
(17)last-modified
该资源最后一次被修改的时间
- cookie相关字段
请求: cookie=xxx;xxx;xxx
响应时
setcookie: