字符集与编码
常见编码规范
- ASCII码
一个字节的存储位 - GBK
汉字内码扩展方式,俩个字节的存储位 - ISO-8859-1
除了ASCII收纳了其他的小语种 - Unicode
32个二进制字符集表示
URL是采用ASCII字符集进行编码的,所以如果URL中含有非ASCII字符集中的字
符,要对其进行编码。
URL中一些保留字符,如"&"表示参数分隔符,如果想要在URL中使用这些保留字
那就需要编码
"%编码"规范
对URL中属于ASCII字符集非保留字不做编码;对URL中的保留字需要取其ASCII
内码,然后加上"%"前缀将该字符进行编码;对于URL中的非ASCII字符需要取其Un
icode内码,然后加上"%"前缀将该字符进行编码。
身份认证
- 密码
- 动态令牌
- 数字证书
- 生物认证
- IC卡
- 常见认证方式
- BASIC认证(基本认证)
- DIGEST认证(摘要认证)
为弥补BASIC认证存在的弱点,从HTTP/1.1起就有了DIGEST认证。
DIGEST认证同样使用质询/响应的方式,但不会像BASIC认证那样直接发送明文密码。
- SSL客户端认证
SSL客户端认证是由HTTPS的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确定访问是否来自已登录的客户端。 - FormBase认证 (基于表单认证)
基于表单的认证方式并不是在HTTP协议中定义的。
使用由Web应用程序各自实现基于表单的认证方式。
通过Cookie和Session的方式来保持用户的状态。
HTTP的长连接和短连接
- HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP请求就结束了。
- HTTP的长连接和短连接本质上是TCP长连接和短连接
- HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,结束就中断。
- HTTO/1.1起,默认使用长连接,用以保持连接特性。
- 短连接:
建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接 - 长连接:
建立连接——数据传输…(保持连接)…数据传输——关闭连接
HTTP中介代理
在这里,自己的电脑充当客户端WEB代理扮演服务器,而在第二层,代理扮演客户端。
为什么要使用代理
- 抓包(拦截服务器)
- FQ
- 匿名访问
- 过滤器
网关又是啥
- 网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是资源和应用程序之间的粘合剂。
- 网关扮演的是“协议转换器”的角色。
- WEB网关在一侧使用HTTP协议,在另一侧使用另一种协议。
<客户端协议>/<服务器端协议>
1、(HTTP/)服务器端网关:通过HTTP协议与客户端对话,通过其他协议与服务器通信。
2、(/HTTP)客户端网关:通过其他协议与客户端对话,通过HTTP协议与服务器通信。
网关(翻译)类型
- (HTTP/*)服务器WEB网关
- (HTTP/HTTPS)服务器端安全网关
客户端发送HTTP到网关然后网关发送加密到服务器端 - (HTTPS/HTTP)客户端安全加速器网关
客户端发送加密HTTP到网关然后网关解密发送到服务器端 - 资源网关
HTTP缓存
http缓存,第一次加载后自动缓存到电脑,下次打开就会很快。
HTTP缓存头部
- Cache-Control
请求/响应头,缓存控制字段
no-store:所有内容都不缓存
no-cache:缓存,但是浏览器使用缓存前,都会请求服务器判断缓存资源是否是最新
max-age=x(单位秒)请求缓存后的x秒不再发起请求
s-maxage=x(单位秒)代理服务器请求源站缓存后的x秒不再发起请求,只对CDN缓存有效
public客户端和代理服务器 (CDN)都可缓存
private只有客户端可以缓存 - Expires
响应头,代表资源过期时间,由服务器返回提供,是http1.0的属性,在与max-age共存的情况下,优先级要低 - Last-Modified
响应头 ,资源最新修改时间,由服务器告诉浏览器 - if-Modified-Since
请求头,资源最新修改时间,由浏览器告诉服务器,和Last-Modified是一对,它倆会进行对比 - Etag
响应头,资源标识,由服务器告诉浏览器 - if-None-Match
请求头,缓存资源标识 ,由浏览器告诉服务器(其实就是上次服务器给的Etag)和Etag是一对,他俩会进行对比
HTTP缓存工作方式
一:服务器与浏览器之间约定一个文件过期时间——Expires
二:服务器与浏览器除了有约定过期时间以外加上一个文件最新修改时间的对比——Last-Modified与if-Modified-Since
三:服务器与浏览器除了有约定过期时间以外加上一个文件最新修改时间的对比——Last-Modified与if-Modified-Since,再加上一个文件内容唯一对比标记——Etag与If-None-Match.Expires不稳定,再加入一个max-age加以代替
缓存改进方案
- md5/hash缓存
通过不缓存html,为静态文件添加MD5或者hash标识,解决浏览器无法跳过缓存过期时间自动感知文件变化的问题 - CDN缓存
CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容发布、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
内容协商机制
- 指的是客户端和服务器端响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以响应资源的语言,字符集,编码方式等作为判断的基准。
- 客户端驱动
客户端发起请求,服务器发送可选择列表,客户端作出选择后在发送第二次请求。客户端可以自己进行选择语言 - 服务器驱动
服务器检查客户端的请求头部集并决定提供哪个版本的页面。 - 透明协商
某个中间设备(通常是缓存代理)代表客户端进行协商。 - 服务器驱动内容协商-请求首部集
- Accept:告知服务器发送何种媒体类型
- Accept-Language:告知服务器发送发送何种语言
- Accept-Charset:告知服务器发送何种字符集
- Accept-Encoding:告知服务器采用何种编码
- 服务器驱动内容协商-请求首部集
- Content-Type
- Content-Language
- Content-Encoding
- 服务器驱动内容协商-近似匹配
Accept-Language:en;q=0.5,fr;q=0.0,nl;q=1.0,tr;q=0.0
↑代表的是英语 ↑代表的是荷兰语
断电续传和多线程下载
HTTP是通过 在Header里俩个参数实现的,客户端发请求时对应的是Range,服务器端响应时对应的是Content-Range
- Range
用于请求头中,指定第一个字节的位置和最后一个字节的位置
格式:
Range:(unit=first byte pos)-[last byte pos] - 例子
Range:bytes=0-499
Range:bytes=500-999
Range:bytes=-500 表示最后500个字节内容
Range:bytes=500- 从第500开始到结束
Range:bytes=500-600,601-999 - Content-Range
用于响应头中,在发出带Range的请求后,服务器会在Content-Range头部返回当前接受的范围和文件总大小。
格式:
Content-Range:bytes(unit first byte pos)-[last byte pos]/[entity lenth]
在响应完成后,返回的响应头内容也不同
HTTP/1.1 200 ok (不使用断点续传方式)
HTTP/1.1 206 Partial Content(使用断点续传方式) - 断点续传过程