HTTP相关

作者: 虚玩玩TT | 来源:发表于2017-09-23 23:12 被阅读0次

    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是直接判断文件是否被修改

    相关文章

      网友评论

        本文标题:HTTP相关

        本文链接:https://www.haomeiwen.com/subject/wmscextx.html