Web与HTTP
对象:web页中其实是对象链接
URL:通用资源定位符【任何对象都可以使用URL来唯一标识】
用户名:口令【支持匿名访问,用户名和口令不计】
端口:HTTP:80 FTP:21【使用默认端口号,无特殊情况不需要手动输入】
HTML【baseHTML,图片链接URL…】–》浏览器解析–》服务器拉去URL资源–》访问web页面
HTTP目前已经是HTTP3
HTTP1.0 HTTP1.1 HTTP2 HTTP3
HTTP概况
HTTP超文本协议【不是线性的文本,是文本与文本之间任意地指向关系】
建立连接-》发送HTTP请求-》服务器收到请求后,把客户端请求的对象封装为HTTP响应的报文发送回来
不同厂商生产的浏览器能够进行通信:彼此都遵守HTTP协议
HTTP跑在TCP之上,建立连接之后有一个TCP Socket
守候的Socket【等待连接建立请求的Socket】,连接的Socket
建立连接之后,使用HTTP请求–》服务器
HTTP:无状态,服务器不需要维护客户的状态【无状态服务器】
HTTP连接
web应用通信需要下层的实体依次交互才能完成
有些文件传输跑在HTTP上
HTTP/1.0非持久
TCP连接请求-》TCP连接确认–》http请求–》交换http报文–》TCP连接关闭
HTTP1.1 【持久连接】
TCP连接请求-》TCP连接确认–》http请求–》交换http报文–》连接不关闭,如果还有其他的对象请求,仍然在此连接中进行
调用Socket Api的函数去建立连接【需要一次往返】
RTT往返时间:请求,请求确认
【客户端到服务器,再到服务器传输回来的时间】
因为分组很小,所以传输时间不计算,但传播需要时间
非持久HTTP【1.0】:
1个RTT用来连接建立【一次返转】
1次对象的传输时间
持久HTTP:
1)非流水方式:
在前一个对象回来之后再发送另外一个请求【一次请求和返转回来的对象只有一个】
2)流水方式:
第一个对象请求发出去,还没有回来的时候;就接着发出第二个,第三个。。。
减少客户端请求时间
HTTP请求报文
早期:ASCII码可读
现在:二进制
请求报文通常没有实体行【空】
GET:客户端从服务器请求资源
POST:客户端向服务器上载(上传)资源
Head命令:请求头,用来建立索引或用来维护
Host:主机名/主机域名
User-agent:用户代理的程序【浏览器版本】
Connection:连接
+:与符号
HTTP响应报文
Last-Modefied:上一次修改日期,相当于版本号
采用TCP,需要自己维护报文和报文的界限,【应用进程需要自己区分哪一个是前面的Message,哪一个是后面的Message(报文)】
HTTP通过报文头告诉客户端需要读取多少个字节,才能读完整个报文
用户-服务器状态:Cookies
HTTP协议:是无状态的协议
服务器不维护客户端状态,为了满足用户需求【打补丁】
小饼干:Cookie,用来维护客户端状态
客户端:在本地文件夹中保存下来
客户端第一次访问时,没有Cookies,由服务器为它生成一个Cookies【set-cookie】
Cookie与隐私相违背
Web缓存(代理服务器)
1.直接访问web原始服务器
2.通过代理服务器访问
这次请求中,缓存的东西被用上了【叫做:被命中了hit】
客户端:快
服务器:负载更轻
网络:流量更少
互联网二八分布:
80%的人使用20%的热点信息【访问具有一定的趋同性】
缓存示例
15个对象/s:每秒钟会带来15bit的流量回来
单位时间内的流量为1.5Mbps=15请求/s*100kb
RTT往返时间=2s
I:流量强度
t:接入延迟
ISP:更高的带宽的接入链路
安装本地缓存(代理服务器):
1)本地访问0.4-代理服务器
2) 远程访问0.6-原始服务器
0.4t1+0.6t2=t【加权平均】
t1=10ms
t2=10ms+2s+接入延迟【取决于流量强度】
条件GET方法
conditional get:条件式获取
在请求报文中加入头部if-modified-since