理论篇 HTTP笔记
MIME:多用途因特网邮件扩展(Multiple Internet Mail Extension),用于指定HTTP传输中数据的类型;
由主类型/子类型组成,如:text/html;
HTTP应用中几种类型:
1. HTTP代理服务器
流量转发、资源过滤;
2. HTTP缓存服务器
快速下载,如:CDN(Content Delivery Network)
3. 网关服务器
完成协议转换,如:HTTP/FTP;
4. 隧道
HTTPS(Secure Socket Layer),数据传输前加密;
报文Message包括请求报文、响应报文,均有:起始行、首部、主体 三个部分组成;
请求报文:
Method URL VERSION
响应报文:
VERSION STATUS Phrase
CR:Carriage Return (Carriage本意四轮马车、货架,此处指:打字机上的金属控制杆),打字机每次一行满后,拨回到最左,开始下一行;即:\r
LF:Line Feed,表示一行写满;即:\n
首部可以多行表示,第二行后以" "(空格)或者Tab开始即可;
HTTP方法:
1. 常用方法 HEAD、PUT、DELETE、POST、TRACE、OPTIONS
Trace 跟踪记录报文经过的设备转发的节点,Header Via会记录;
Options 询问服务器支持哪些功能;
Connect 建立隧道
2. 扩展方法:LOCK、MOVE等
HTTP首部Header介绍:
1. 通用首部:
Date、Connection、Via
Pragma:向所有经过节点告知指令,如:Pragma:no-cache告诉中间节点(如:网关服务器)不可以缓存。
2. 请求首部:
通用型: Host(请求报文中附带:主机名,如:www.baidu.com,在虚拟主机托管中分辨哪个WEB站点)、User-Agent、Referer、Accept及其扩展(接收响应的类型)
条件型: If-Modified-Since、If-None-Match、Range
3. 响应首部:
通用型:
Content-Type(请求或响应MIME类型,如:表单提交multipart/form-data)、
Content-Length、Content扩展(Language、Encoding等)、
Age(从创建开始的持续时间)
Location:重定向中用到;
协商型: Vary(服务器要求:请求报文中发送时需附带的其他Header)
缓存型: ETag、Expires、Last-Modified
TCP性能聚焦区域:
1. 连接时的握手
2. 慢启动拥塞控制(Slow Start)
3. TIME_WAIT累积与端口耗尽
出现在性能测试中,HTTP客户端同时发送N多请求,导致最终端口不够用。如:6万个端口,每个端口关闭后2分钟内保留内存中,这样2分钟后的每秒最大不能超过500个请求,(60000/120s=500)。与服务器无关,只是客户端会遇到此类情况。
连接Connection:
HTTP 1.0中默认为:closed,改为keep-alive需请求报文附加该首部;1.1中默认为:persistent
缓存Cache-control:(Strong Validator | Weak Validator)
可选值:
no-store 响应不能被缓存
no-cache 请求服务器重新验证之前,不允许使用缓存
public 可以被浏览器或任何中间节点服务器缓存
private 仅可以被浏览器缓存,其他节点(代理服务器)不能缓存
max-age 缓存的新鲜度最长时间
s-max-age 共享缓存(中间节点服务器:代理等)的新鲜度最长时间
条件请求:
在浏览器缓存资源不在新鲜,但仍与服务器缓存资源一致的情况下,避免响应报文中附带资源的情况,否则加重网络负担。
当条件为True时才发送副本。
If-Modified-Since 与Last-Modified对应;还有其它条件:If-Notmodified-Since
If-None-Match 与ETag对应;其它条件:If-Match
强验证器:
只要内容变化,实体值变化;表示:客户端缓存资源与服务器端资源内容完全一致,无变化;
如:ETag(实体标签)
弱验证器:
少量修改,不影响实体值的改变;用 "W/"前缀标识;表示:资源语义上想通,允许这种内容不一致的存在,尽管不一致,仍可以使用客户端缓存替代;
如:Last-Modified,仅精确到秒,1秒之内的修改无法标识改变;
浏览器发送:条件Header与上次响应返回的验证器 到服务器端,由服务器来判断是:200还是304。
Cookie的两个版本:
1. 版本0 (NetScape标准),应用广泛
Set-Cookie首部组成:分号分割键值对
name=value;
domain=baidu.com;Cookie会向匹配的服务器发送过去;
expires=Date;
path=/; 匹配指定的路径;
secure; 启用SSL时才发送该标识;
2. 版本1,扩展原有
Set-Cookie2组成
Comment对Cookie解释;
Discade:浏览器退出时是否删除该Cookie
Max-age:Cookie生存期的相对时间
Chaptor15 实体与编码:
Content-Encoding:实体编码,可选值如下:
1. Identity 默认,没有压缩
2. gzip GNU zip编码,效率最高,使用范围最广
3. deflate zlib的格式压缩
4. compress Unix的文件压缩
Accpet-Encoding:请求响应是何种编码,逗号分隔多个选项,分号分割内部设置;
如:Accept-Encoding:gzip;q=1.0, identity;q=0.5 注:q代表处理(Quality)优先级,从0.0~1.0,越高越优先;
TE:用于请求报文中,希望响应报文是其中的一种编码;如:TE: trailers, chunked
Tranfer-Encoding:用于响应报文中,告知浏览器采用的方法;HTTP 1.1使用Chunked分块编码;
Content-Type中的charset可以指定使用的编码(如:UTF-8)或者通过文档中的meta标签指定;