HTTP协议学习总结一

什么是协议

协议是多人经过协商,最后达成一致的合约。html


什么是HTTP协议

HTTP协议是客户端与服务器之间通讯时所共同遵循一个合约。shell


HTTP协议的主要内容是什么

HTTP协议是双方的:它定义了客户端如何请求服务器资源,服务器如何响应客户端请求。缓存


客户端如何请求资源

<!-- lang: shell -->
GET /index.html HTTP/1.1
Host:www.baidu.com
#GET:请求资源的方法
#/index.html:资源位置
#HTTP/1.1:请求资源的协议/版本
#Host:资源所在的服务器

服务器如何响应请求

<!-- lang: shell -->
HTTP/1.1 200 OK
Content-type:text/html

Hello,World!
#HTTP/1.1:响应资源的协议/版本
#200:状态码,表示资源状态
#OK:状态描述值
#Content-type:文本格式
#CRLF(换行符+回车符)
#Hello,World!:响应主体

HTTP协议与TCP/IP协议之间的关系

HTTP协议是构建在TCP/IP协议之上的,一次完整的HTTP通讯会打开一次TCP链接。 因此深刻理解HTTP协议,必须对TCP/IP协议有必定的了解。服务器


HTTP代理

在现实的网络世界中,代理无处不在,对于客户端来讲,代理就是服务端,对于最终的服务端来讲,代理又是客户端。 代理的身份能够是双重的,因此在不少方面,代理做用很大:网络

  1. 作为缓存服务器,直接与客户端通讯,缓解真实服务端压力
  2. 作为代理服务器,能够让一些访问不了外网的客户端也能访问到外网的资源
  3. 作为认证服务器,能够拦截客户请求,只有经过认证的客户端才能访问到最终的资源

HTTP缓存策略

对于一些服务器资源,服务端并不但愿客户端在重复请求时,每次都返回资源。这样当资源文件足够大、请求足够多时,服务器的压力会很大。 HTTP协议在缓存这一块有一个比较合理的交互规则:代理

  1. 客户端请求资源(默认是容许缓存,若是header中带Cache-Control: no-cache,那么说明客户端不缓存数据)
  2. 服务端响应资源,header中添加Cache-Control: max-age=1000,告诉客户端1000s内我不会改变资源内容,你就用旧的资源吧
  3. 客户端的将资源放入到缓存文件夹
  4. 客户端再次请求资源,先去缓存文件夹中查找,找到资源后,对比时间,看是否超过了1000s,若是没有超过就会继续使用资源,若是超过了就会向服务器询问资源是否已经更新,在header中添加if-modified-since:(服务端先前响应header中的Date值)或if-none-match:(服务端先前响应header中的ETag)
  5. 服务端接收到客户端请求,发现请求header中有条件请求if-modified-since或if-none-match,会检查服务器资源是否修改过,若是没有修改,服务端返回304,告诉客户端缓存资源可用。若是发现资源已经修改,那么就将修改过的资源发送给客户端
相关文章
相关标签/搜索