http协议其实就是超文本传输协议。
http协议是建立在tcp/ip协议之上的应用层协议,主要包括三个部分,状态行,头部信息,消息主体。对应一个http请求就是:请求行,请求头,请求体。
通信流程:
用户输入url地址,发送一个request ----- >
从离自己最近的ip地址开始向外寻找(这就是外国网站比较满的原因之一),找到服务器 ------>
服务器处理完成后request返回响应的response给浏览器 ----->
浏览器处理。
关于request:
url:请求地址
method:请求的方式
header:请求头,key:value形式
请求体:请求数据
关于response:
状态行:详见:https://www.runoob.com/http/http-status-codes.html
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
header:响应头,key:value形式
响应体:响应数据
header中我们关注的:
content-type:
--- application/x-www-form-urlencoded, 在最开始的请求方式中,请求参数都是放在url中,表单提交的时候,都是以key=&value=的方式写在url后面。这也是浏览器表单提交的默认方式。
--- multipart/form-data,此种方式多用于文件上传,表单数据都保存在http的正文部分,各个表单项之间用boundary分开。
--- application/json,现在越来越多的应用使用application/json,用来告诉服务端消息主体是序列化的json字符串。由于json规范的流行,各大浏览器都开始原生支持JSON.stringfy。
content-encoding:如gzip,响应的编码格式
Cache-Control:浏览器缓存机制,一般会有max-age=值,或者no-cache或者public、private;
--- no-cache ---- 不要读取缓存中的文件,要求向WEB服务器重新请求
--- public ---- 数据内容皆被储存起来,就连有密码保护的网页也储存,安全性很低
--- private ---- 数据内容只能被储存到私有的cache,仅对某个用户有效,不能共享
--- no-store ---- 请求和响应都禁止被缓存
--- max-age: ---- 表示当访问此网页后的max-age秒内再次访问不会去服务器请求;
--- max-stale ---- 允许读取过期时间必须小于max-stale 值的缓存对象。
--- min-fresh ---- 接受其max-age生命期大于其当前时间 跟 min-fresh 值之和的缓存对象
--- only-if-cached ---- 告知缓存者,我希望内容来自缓存,我并不关心被缓存响应,是否是新鲜的.
--- no-transform ---- 告知代理,不要更改媒体类型,比如jpg,被你改成png.
Last-Modified:作用: 用于指示资源的最后修改日期和时间。一般都用来处理缓存;
持久链接:Keep-live
http协议采用’请求-应答’模式,当使用普通模式,即非Keep-live模式,每个请求/应答客户端都要建立一个新的连接,完成之后立即断开,俗称短连接。
当使用keep-live模式,使客户端和服务端的连接持续有效,当出现对服务器的后继请求时,keep-live功能避免的了建立或者重新建立新的连接,俗称长连接。
管线化:
正常:在使用持久连接的情况下,某个连接上消息的传递类似与 请求1->响应1->请求2->响应2…..
管线化:请求打包一起发送 请求1->请求2->请求3->响应1->响应2->响应3
只有get和head请求可以管线化,post有所限制
初次创建连接不应启动管线机制,因为对方服务器不一定支持http/1.1版本协议
管线化不会影响响应到来的顺序