http

136 阅读1分钟

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(可由服务器主动推送资源给用户端)

pipelining VS multiplexing