HTTP协议是构建在TCP/IP协议之上的,一次完整的HTTP通信会打开一次TCP连接。
所以深入理解HTTP协议,必须对TCP/IP协议有一定的了解。
HTTP代理
在现实的网络世界中,代理无处不在,对于客户端来说,代理就是服务端,对于最终的服务端来说,代理又是客户端。
代理的身份可以是双重的,所以在很多方面,代理作用很大:
- 做为缓存服务器,直接与客户端通信,缓解真实服务端压力
- 做为代理服务器,可以让一些访问不了外网的客户端也能访问到外网的资源
- 做为认证服务器,可以拦截客户请求,只有通过认证的客户端才能访问到最终的资源
HTTP缓存策略
对于一些服务器资源,服务端并不希望客户端在重复请求时,每次都返回资源。这样当资源文件足够大、请求足够多时,服务器的压力会很大。
HTTP协议在缓存这一块有一个比较合理的交互规则:
- 客户端请求资源(默认是允许缓存,如果header中带Cache-Control: no-cache,那么说明客户端不缓存数据)
- 服务端响应资源,header中添加Cache-Control: max-age=1000,告诉客户端1000s内我不会改变资源内容,你就用旧的资源吧
- 客户端的将资源放入到缓存文件夹
- 客户端再次请求资源,先去缓存文件夹中查找,找到资源后,对比时间,看是否超过了1000s,如果没有超过就会继续使用资源,如果超过了就会向服务器询问资源是否已经更新,在header中添加if-modified-since:(服务端先前响应header中的Date值)或if-none-match:(服务端先前响应header中的ETag)
- 服务端接收到客户端请求,发现请求header中有条件请求if-modified-since或if-none-match,会检查服务器资源是否修改过,如果没有修改,服务端返回304,告诉客户端缓存资源可用。如果发现资源已经修改,那么就将修改过的资源发送给客户端
以上来自:http://my.oschina.net/u/159469/blog/313888
如果要更具体了解HTTP协议,请参考《HTTP权威指南》一书。
时间: 2024-10-10 21:24:10