大话HTTP
TCP三次握手
开辟对应的资源就是连接; 三次握手交付的资源就是socket
四次挥手
http特点
- 无连接
- 无连接的含义是限制每次连接只处理一个请求
- 服务器处理完客户的请求,并收到客户的应答后,就断开连接
- 采用这种方式可以节省传输时间
- 无状态
- 无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传输数据量增大。
URI和URL区别
- url是URI的一种,但不是所有的URI都是urL
- URI和URL最大的差别是访问机制
- URN是唯一标识的一部分,是身份信息
HTTP报文头
- 通用报文头(请求和响应都可以使用)
- Cache-Control no-store:所有内容都不缓存 no-cache:缓存,但是浏览器使用缓存前,都会请求服务器判断缓存资源是否是最新 max-age=x(s):请求缓存后x秒不在请求 s-maxage:代理服务器请求源站缓存后X秒不再发起请求,只对CDN缓存有效 public:客户端和代理服务器(cdn)都可以缓存 private:只能客户端缓存
- Date
- Connection
- Transfer-Encoding
- Upgrade:升级为其它协议
- via:代理服务器相关
- Pragma: 报文指令
- 请求报文头
- Accept: 浏览器可以接收的媒体类型 406: 服务器无法返回浏览器可以接收的类型
- Accept-Charset
- Accept-Language
- Host:指定请求资源的Internet主机和端口号
- if-Match
- if-Modified-Since
- if-none-match
- proxy-Authorization: 代理服务器要求客户端认真信息
- Range:实体的字节的范围请求 bytes=0~499;bytes=500-;
- referer
- 响应报文头
- accept-Range: 是否接收字节范围请求
- Age
- Etag
- location:命令客户端重定向至指定URI
- proxy-Authorization: 代理服务器要求客户端认真信息
- server:HTTP服务器安装的信息
- vary: 代理服务器缓存的管理信息
- WWW-Authenticate: 服务器对客户端认证信息
- 实体报文头
- allow: 资源可支持的http方法
- Content-Encoding:实体主体适用的编码方式
- Content-Language:实体主体的自然语言
- Content-Length:实体主体的大小(单位:字节)
- Content-Range: 实体主体的位置范围 bytes:500-/1024000(全部文件大小)
- Content-type: 实体主体的媒体类型
- Expires: 实体主体的过期时间
- last-Modified: 资源最后的修改时间
Http状态码
- 202(Accepted): 已接收,已经接收请求,但未处理完成
- 206(Partial Content): 部分内容,服务器成功处理了部分GET请求
- 301(Moved Permanently):永久移动
- 302(Found): 临时移动,资源只是临时被移动
- 400(bad Request): 客户端请求的语法错误,服务器无法理解(比如:传参错误)
- 401:请求要求用户的身份认证
- 403:服务器理解请求客户端的请求,但是拒绝执行此请求
- 404:服务器无法根据客户端的请求找到资源
- 500:服务器内部错误,无法完成请求
- 502(bad Gateway):充当网关或代理服务器,从远端服务器接收到了一个无效的请求。
cookie && session
- session工作原理
- cookie传递
- 地址栏传递
- 表单隐藏传递
代理的作用
- 抓包
- FQ(翻墙)
- 匿名访问
- 过滤器
HTTP中介之网关
网关是资源和应用程序之间的粘合剂; 网关扮演的是协议转换器的角色。
- 服务器端网关(http/*):通过HTTP协议与客户端对话,通过其他协议与服务器通信
- 客户端网关(*/http): 通过其他协议与客户端对话,通过http协议与服务器通信
- 服务器端安全网关(http/https)
- 客户端安全加速器网关(https/http)
- 资源网关
Http缓存
缓存改进方案
文件在未过期时间内修改了无法获取到最新文件内容
- MD5/hash缓存 通过不缓存html,为静态文件添加MD5或者hash标题,解决浏览器无法跳过缓存过期时间主动感知文件变化的问题
- CDN缓存
浏览器操作对HTTP缓存的影响
https协议
- https:http+TLS(传输层加密协议)
- Https使用成本
- 证书费用以及更新维护
- HTTPS降低用户访问速度(多了TLS层)
- 消耗CPU资源,需要增加大量机器(非对称加解密)
- HTTPS对性能的影响
- 协议交互所增加的网络RTT
- 加解密所带来的耗时
- http协议瓶颈
- 一个连接上只可发送一个请求
- 请求只能从客户端开始。客户端不可以接受除响应以外的指令
- 请求头/响应头不经压缩就发送
- 每次互相发送相同的头部造成的浪费较多
- 非强制压缩发送
- SPDY的改进
- 多路复用请求优化(还有优先级)
- 支持服务器推送技术
- 压缩了HTTP头
- 强制使用TSL加密传输
宏观视角下的浏览器
tcp协议:如果保证页面文件能够被完整送达浏览器
- FP(First Paint)是指从页面加载到首次开始绘制的时长
- 通过IP地址信息把数据包发送给指定的电脑,而UDP通过端口号把数据包分发给正确的程序
- UDP不能保证数据可靠性,但是传输速度却非常快。UDP并不提供重发机制,UDP在发送之后也无法知道是否能达到目的地。UDP协议并不知道如何组装这些数据包。
- TCP(传输控制协议)是一个面向连接、可靠的、基于字节流的传输层通信协议。
- TCP提供重传机制;引入数据包排序机制,用来保证乱序的数据包组合成一个完整文件
- TCP为了保证数据可靠性,牺牲了数据包的传输速度,因为三次握手和数据包校验机制等把传输过程中的数据包的数量提高了一倍。
http请求流程
- 在真正发起网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件。
- 浏览器缓存是一种在本地保存资源副本,以供下次请求时直接使用的技术。
浏览器中的网络
http/0.9三个特点
- 只有一个请求行,没有请求头和请求体
- 服务器也没有返回头信息
- 返回的文件内容是以ASCII字符流传输的,因为都是HTML格式文件所以使用ASCII字符码传输是最合适的。
http/1.0
浏览器中展示的不单是HTML文件了,还包括了javascript、css、图片音频、视频等不同类型文件 http1.0 默认采用短连接 不允许断点续传 没有HOST头域 支持多种类型文件下载是http/1.0一个核心述求
- 新增了请求头和响应头
- 引入了状态码
- 提供了Cache机制:用来缓存已经下载过的数据 提供了expires if-modified-since做为缓存机制
- 请求头还加入用户代理的字段
http/1.1
引入Entity Tag if-Match 添加了range头域
- 支持的方法
- get,post,put,delete,options,head,trace,connect
- 增加持久连接(长连接)
- 不成熟的http管道化:如果tcp通道中某个请求因为某些原因没有及时返回,那么就会堵塞后面所有请求,造成队头堵塞。http/1.1管线化将多个HTTP请求整批提交给服务器,虽然整批发送请求,不过服务器依然需要根据请求顺序来回复浏览器请求。
- 提供虚拟主机的支持:HTTP/1.1请求头中增加了Host字段,用来表示当前域名地址,服务器可以根据不同的Host值做不同处理。
- 引入Chunk transfer机制,服务器会将数据分割成若干个任意大小的数据块
- 客户端Cookie、安全机制
- 浏览器为每个域名最多同时维护6个TCP持久连接
- 使用CDN的实现域名分片机制 缺点:对带宽的利用率却并不理想 原因: 1.TCP的慢启动;2.同时开启了多条TCP连接,那么这些连接会竞争固定的带宽;3.队头阻塞
HTTP/2
http/2的思路就是一个域名只使用一个TCP长连接来传输数据,这样整个页面资源下载过程只需要一次慢启动,同时避免了多个TCP连接竞争带宽所带来的问题。 http/2实现资源并行请求、
特性
- 可以设置请求的优先级
- 服务端推送
- 首部压缩(压缩解决首部大小+维护了一个首部表,只发送发生变化的首部)
多路复用实现
http/2添加了一个二进制分帧层 缺陷:1.TCP队头堵塞;2.建立连接的握手延迟大 在TCP传输过程中,由于单个数据包的丢失造成的阻塞称为TCP上的队头堵塞
QUIC协议
- 没有队头堵塞的多路复用