Q: 为什么还需要HOST 请求头?
A: 因为http 协议支持VirtualHost(也就是一个domain 下可以挂多个网站,一个host 的ip 可以对应多个域名,不同的域名对应不同的应用),如果不手动指明HOST,那么就不知道你要请求哪个。不加的话就会报400 Bad Request 。 如果你的web server 只有一个网站的话,就可以不用启用virtual hosting,那么也就不用加HOST 请求头了。
telnet www.baidu.com 80
GET / HTTP/1.1
HOST www.baidu.com
- 持续连线状态(persistent connection)(keep-alive)
- 切块编码传输(chunked encoding transfer)(MDN)
- 位元范围请求(byte range request)(MDN)
response status 206 - 额外快取机制(cache control)
- 请求管线作业(request pipelining)(需要搭配
持续连接状态特性才能用)
HEAD 请求头的作用(当然需要server端或者代理端实现这个请求方法),仅仅返回response header 的部分,会包含要请求文件的信息(Content-Length)。如果需要回传的文件过大(如1G的视频文件),则后续请求可以配合(byte range request)进行分段获取(多次发出不同段的请求)
telnet www.baidu.com 80
HEAD / HTTP/1.1
HOST www.baidu.com
response status
- 202 服务器已经获取到请求了,但是处理可能较满,返回一个202 让clint 等一下
- 404 Not Found
- 405 Method not allowed
- 304 使用cache ,可以使用 xxx.css?time=xxxx 用动态时间戳的方式禁用cache
工具: chrome、postman、fiddler
http2
- Binary Protocol(所有请求都以binary方式传输)
- Multiplexing(多工传输)(不按顺序传送多个frame)
- Header Compression(使用HPACK压缩算法)
- Server Push(可由服务器主动推送资源给用户端)