HTTP相关

OSI 七层模型

  • OSI/RM,Open System Interconnection Reference Model ,开放式系统互联通信参考模型,简称 OSI
  • 一种概念模型,由国际标准化组织(ISO)提出
  • 一个试图使各种计算机在世界范围内互连为网络的标准框架
OSI 将计算机网络体系结构划分为七层
  • 主机层
    • 第七层:应用层(Application Layer)
      • 应用层直接和应用程序接口并提供常见的网路应用服务
      • 应用层也向第六层表示层发出请求
    • 第六层:表示层(Presentation Layer)
      • 把数据转换为能与接收者的系统格式兼容并适合传输的格式
    • 第五层:会话层(Session Layer)
      • 负责在数据传输中设定和维护电脑网络中两台电脑之间的通讯连接
    • 第四层:传输层(Transport Layer)
      • 把传输表头(TH)加至数据以形成数据包
      • 传输表头包含了所使用的协定等传送资讯
  • 媒介层
    • 第三层:网络层(Network Layer)
      • 提供路由和寻址功能,并具有一定的拥塞控制和流量控制的能力
    • 第二层:数据链路层(Data Link Layer)
      • 在两个网络实体之间提供数据链路连接的建立、维持和释放管理
    • 第一层:物理层(Physical Layer)
      • 物理层确保原始的数据可在各种物理媒体上传输。

常见的

  • HTTP 协议在应用层
  • TCP 协议在传输层
  • IP 协议在网络层

HTTP 的工作原理

  • HTTP ,HyperText Transfer Protocol,超文本传输协议
  • 当我们在客户端向服务器发送一个请求,服务器接收请求,并向客户端发送一个响应,客户端接收并展示,HTTP 协议在这个过程中规定了请求和响应的格式以及行为。
  • 请求:请求行;请求头;空行(回车);消息体;
  • 响应:响应行;响应头;空行(回车);消息体;
    写个简单例子:
//请求
GET / HTTP/1.1  //方法 + 路径 + 协议/版本号
Host: www.xxx.com  //这里是域名,告诉服务器要请求的域名
Accept: text/html  //请求的东西,比如这里向服务器要一个html文档
...    //这里都是key: value 格式,告诉服务器需求

//响应
HTTP/1.1 200 OK  //对应请求,返回结果
Content-Type: text/html;charset=utf-8  //告诉浏览器返回了 html 文档

<!doctype html><html><h1>响应</h1></html>  //返回的 html 文档内容

URI和URL

  • URI,Uniform Resourse Identifier,统一资源标识符
  • URL,Uniform Resourse Locator,统一资源定位符
  • URN,Uniform Resourse Name,统一资源名称
    其中 URL 和 URN 是 URI 的子集,URI 的通常表现形式就是 URL

几种常见的URL

  • http(s)://www.xxx.com/xxx/index.html
  • ftp://ftp.xxx/xx.txt
  • mailto:xxx@email.com
  • telnet://192.168.1.1:80

HTTP 与服务器交互的方法

最常见的有 GET,POST,从服务器获取资源,除此之外还有

  • HEAD:与GET类似,但不获取资源,仅获取资源的信息,是否存在,是否被修改
  • PUT:向服务器写入资源
  • TRACE:客户端向服务器发送请求的时候,中间可能会经过防火墙、代理、网关等一些应用程序,每个中间节点都可能修改HTTP请求,TRACE方法允许客户端在最终请求到达服务器的时候,查看这个请求最终变成怎样了
  • DELETE:要求服务器删除请求的URL
  • OPTIONS:请求服务器告知其支持的所有功能

状态码(Status Code)

  • 用于表示请求的结果
  • 100~1999 用于指定客户端相应的某些动作
  • 200~299 用于表示请求成功
    • 200 表示请求和响应成功
  • 300~399 用于已经移动的文件并且常被包含在定位信息中指定新的地址信息
    • 301 请求的文档被移到别处,浏览器自动访问新的URL
    • 304 客户端缓存了文档,再次请求这个文档时,如果满足条件,则使用缓存,并返回 304
  • 400~499 用于指出客户端的错误
    • 403 资源不可用,服务器理解请求,但拒绝处理
    • 404 无法找到指定位置的资源
  • 500~599 用于支持服务器的错误
    • 500 服务器出现问题,不能完成客户的请求
    • 503 服务器由于维护或负载过重未能响应
    • 505 服务器不支持请求中指明的 HTTP 版本

浏览器缓存控制

浏览器在请求已经访问过的URL的时候,会判断是否使用缓存。

判断是否使用缓存主要通过判断缓存是否在有效期,通过两个字段来判断

  • Expires: GMT时间
    • 响应会包含这个信息,过期时间,缓存的时候会将文件和这个信息保存,当浏览器再次访问这个文件的时候,浏览器会将当前时间和这个信息时间作比较,如果在过期时间内,则直接使用本地缓存的文件,状态码为200 form xxx cache ,如果超过了过期时间,则重新发送请求
  • Cache-Control: max-age=数值
    • 直接设置的过期时间,单位为秒,原理同Expires,由于使用的秒数,会比Expires准确,所以优先级比Expires高,浏览器会先判断Cache-Control

当浏览器判断缓存过期之后,接着进行判断缓存的文件是否有更新

判断缓存是否有更新

  • Last-Modified 和 If-Modified-Since
    • 第一次请求时,服务器响应一个 Last-Modified,表示文件最后修改时间,缓存过期后,浏览器发送请求的时候会将该时间放在 If-Modified-Since 中一起发给服务器,服务器收到请求后,会将该时间与服务器中该文件的最后修改时间作比较,如果最后修改时间较新,则重新响应整个文件,如果最后修改时间较旧,则响应 HTTP 304,告知浏览器使用缓存
  • Etag 和If-None-Match:
    • 第一次请求时,服务器响应一个 Etag 字段,表示文件的唯一的字符串,当文件被修改时,该字符串回改变,缓存过期后,浏览器发送请求的时候会将该字符串放在 If-None-Match 中一起发给服务器,服务器收到请求后,会将 If-None-Match 中的字符串与服务器中的文件的 Etag 作比较,如果相同,则响应 HTTP 304,告知浏览器使用缓存,如果不同,则重新响应整个文件,并包含新的 Etag 字段。
  • Etag 的优先级比 Last-Modified 高,因为 Last-Modified 判断只能精确到秒,而Etag是直接判断文件是否被修改

推荐阅读更多精彩内容

  • OSI 七层模型 OSI/RM,Open System Interconnection Reference Mod...
    虚玩玩TT阅读 115评论 0 0
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 7,533评论 6 151
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 4,738评论 3 83
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,165评论 0 6
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,537评论 0 3
  • 陨星死了 但是我依然能感受到脚下的炙烫 野草还带着火星 它努力地想要继续燃烧直至殆尽 只有这样接继 谁都能看到他的...
    62bc023c2ce0阅读 102评论 0 0
  • 11月23日前,每次从实验室走回宿舍,都会想自残,甚至割腕,一路走一路哭,情绪跌到谷底。自己大概对自杀没有什么概念...
    红岸1992阅读 376评论 0 50
  • 低沉地 雨总是下 包里总有把伞 刚开始是我的 后来是你的 低沉地 雨总是下 人们在看彩虹 那我也看吧 骑车没有打伞...
    公园阅读 140评论 0 4
  • 精美餐廳藏身文化建築裡 托另一個實習生的福,我們因緣際會能夠拜訪與紫禁城為鄰的DOMUS餐廳,它座落在傳統的四合院...
    软绵绵阅读 193评论 0 1