大话HTTP3 -- HTTP协议的特性和使用方法

HTTP协议中的编码和解码

 

字符集与编码

 

 

编码和解码的方式不一致,就会产生乱码。

 

URL的编码与解码

URL是采用ASCII字符集进行编码的,所以如果URL中含有非ASCII字符集中的字符,要对其进行编码。

URL中一些保留字符,如 "&" 表示参数分隔符,如果想要在URL中使用这些保留字,那就需要编码。

“%编码”规范:对 URL 中属于 ASCII 字符集的非保留字不做编码;对URL中的保留字需要取其ASCII内码,然后加上“%”前缀将该字符进行编码;对于URL中的非ASCII字符需要取其Unicode内码,然后加上"%"前缀将该字符进行编码。

 

 

HTTP协议的基本认证

身份认证信息:

密码

动态令牌

数字证书

生物认证

IC卡等

 

常见认证方式

BASIC认证 (基本认证)

DIGEST认证 (摘要认证)

SSL 客户端认证

FromBase认证 (基于表单认证)

 

BASIC认证

 

DIGEST认证

为弥补BASIC认证存在的弱点,从 HTTP/1.1 起就有了 DIGEST 认证。

DIGEST认证同样使用 质询/响应 的方式,但不会像 BASIC 认证那样直接发送明文密码。

 

 

 

SSL客户端认证

SSL客户端认证是借由HTTPS的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否来自已登陆的客户端。

 

基于表单的认证

基于表单的认证方法并不是在HTTP协议中定义的。

使用由Web应用程序各自实现基于表单的认证方式。

通过Cookie和Session的方式来保持用户的状态。

 

HTTP的长连接与短连接

HTTP 协议是基于 请求/响应 模式的,因此只要服务端给了响应,本次 HTTP 请求就结束了。

HTTP 的长连接和短连接本质上是TCP长连接和短连接。

HTTP/1.0 中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,结束就中断。

HTTP/1.1 起,默认使用长连接,用以保持连接特性。

 

 

 

短连接:建立连接 - 数据传输 - 关闭连接 ... 建立连接 - 数据传输 - 关闭连接

长连接:建立连接 - 数据传输 ... (保持连接) ... 数据传输 - 关闭连接

 

HTTP 中介之代理

 

代理的作用

抓包

拦截服务器

匿名访问

过滤器

 

 

HTTP 中介之网关

网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是资源和应用程序之间的粘合剂。

网关扮演的是 “协议转换器” 的角色。

 

/

 

Web 网关在一侧使用 HTTP 协议,在另一侧使用另一种协议。

<客户端协议> / <服务端器协议>

 

(HTTP/) 服务器端网关:通过 HTTP协议与客户端对话,通过其他协议与服务器通信。

(/HTTP) 客户端网关:通过其他协议与客户端对话,通过HTTP协议与服务器通信。

 

常见的网关类型

(HTTP/*) 服务器端 Web 网关

(HTTP/HTTPS) 服务器端安全网关

(HTTPS/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

 

场景三:让服务器与浏览器在过期时间 Expires + Last-Modified 的基础上,增加一个文件内容唯一对比标记 --- Etag 与 If-None-Match。Expires不稳定,再加入一个 max-age 来加以代替。

 

 

缓存改进方案

md5/hash 缓存

通过不缓存 html, 为静态文件添加 MD5 或者 hash 标识,解决浏览器无法跳过缓存过期时间主动感知文件变化的问题。

 

CDN 缓存

CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

 

 

 

内容协商机制

指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言,字符集,编码方式等作为判断的基准。

 

内容协商方式

客户端驱动

客户端发起请求,服务器发送可选项列表,客户端做出选择后再发送第二次请求。

 

服务器驱动

服务器检查客户端的请求头部集并决定提供哪个版本的页面。

 

透明协商

某个中间设备(通常是缓存代理)代表客户端进行协商。

 

服务器驱动内容协商 - 请求首部集

Accept:告知服务器发送何种媒体类型。

Accept-Language:告知服务器发送何种语言。

Accept-Charset:告知服务器发送何种字符集。

Accept-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

而在响应完成后,返回的响应头内容也不同:

HTTP/1.1 200 OK (不使用断点续传方式)

HTTP/1.1 206 Partial Content (使用断点续传方式)

 

断点续传过程

1.客户端下载一个1024K的文件,已经下载了其中512K。

2.网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:Range:bytes=512000- 。这个头通知服务端从文件的512K位置开始传输文件。

3.服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:Content-Range:bytes 512000-/1024000 。并且此时服务端返回的HTTP状态码应该是206,而不是200。

 

 

 

 

 

 

 

 

 

 

 

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值