美文网首页
《图解HTTP》

《图解HTTP》

作者: shanshanfei | 来源:发表于2016-11-29 16:54 被阅读0次

    小知识点记录:
    状态码:204是http响应中传输数据量最小的,body为空,content-length为0,这种状态可以用于性能优化中,对于一个大型网站,对于一些不需要返回数据的请求就可以使用204状态码,减少传输的数据量,减少带宽浪费。
    /*************************************** 正文 ****************************************************/
    http相关的三大协议:** tcp + ip + dns **。

    http的几大方法:

    - get:请求资源
    - post:发送数据
    - put:发送文件
    - delete:删除文件
    - trace:追踪路径
    - options:请求资源允许的获取方法
    - head:返回响应的报文头部(报文体不返回)
    - connect:建立隧道进行数据传输
    

    http是持久连接,节省tcp链接反复断开和重建的时间,提高速度。

    http是无状态协议,要保持登录等状态的场景下,需要借助cookie来维持状态;在请求和响应的报文头部,需要携带相应的cookie信息。

    http响应类别有以下5种:

    状态码 类别 原因短语
    1XX Information(信息性状态码) 接收的请求正在处理
    2XX Success(成功状态码) 请求正常处理完毕
    3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
    4XX Client Error(客户端错误状态码) 服务器无法处理请求
    5XX Server Error(服务器错误状态码) 服务器处理请求出错

    当在浏览器中输入一个url或者按F5刷新页面的时候,都发生了什么:

    1. 域名解析:首先进行DNS查找,先浏览器查找自身的DNS缓存(查看方式:chrome://net-internals/#dns,chrome是1min过期)
    2. 若浏览器没查找到,则查找操作系统的DNS缓存(存放在某一文件中,一般1d过期)
    3. 若还是没查找到,读取本地HOST文件
    4. 若未找到,浏览器发起一个DNS的系统调用
        a)宽带运营商服务器查看本身缓存
        b)若无,运营商服务器代替浏览器发起一个迭代DNS解析的请求(接下来就是一些DNS根域等进行查找的过程)。结果获取到后,运营商服务器把结果返回操作系统内核,并缓存。内核再把结果返回浏览器,浏览器至此获取到了目标域名的IP地址。
    5. 浏览器拿到IP后,进行TCP/IP三次握手,建立连接
    6. 链接建立好后,进行http请求的发送
    7. 服务器接收到请求,进行一些后端处理并返回,假如请求的是个页面,则返回相应的html代码
    8. 浏览器拿到html代码后,在解析和渲染的过程中,里面的js、css、图片静态资源,他们也是一个个的http请求,也会经历上面的步骤进行获取。
    9. 最终一个完整的页面呈现给用户。
    

    http请求头部信息中,会指定host字段,这是因为,一台物理服务器上可能部署多个web站点,在真实的网络通信中,域名被解析成ip地址,所以到了服务器端的话,可能ip地址都是一样的,究竟访问的是哪个站点,就需要请求头部信息中的host字段来区分了。

    网关和代理区别的理解:二者工作方式比较相近

    网关:一个局域网统一的出口,可以使用非http协议,可加密保障安全性;
    代理:通过设置代理服务器,从而更快的到达目标服务器(如公司禁止登陆qq,可通过设置代理的方式),分缓存代理和透明代理(对报文不做处理,直接转发)
    隧道:比较安全的一种通信方式
    

    缓存服务器:减少服务器压力(注意:缓存文件的有效性)

    报文首部与报文主体之间有一个空行(CR+LF),报文首部包含:

    请求|响应行;请求首部字段;通用首部字段;实体首部字段;其他;
    
    请求行:方法 url  http版本
    响应行:http版本 状态码 短语
    

    首部字段的值 可以有多个

    http首部字段类型:

    请求首部字段  响应首部字段  通用首部字段  实体首部字段
    
    Language分类:

    以下两种写法均正确,后者描述更精准(新标准),但目前浏览器和操作系统都只支持前者,使用新标准可能会造成无法匹配浏览器用户定义字体、网页翻译、程序语言自动切换等功能,前端和码农为了兼容性推荐使用前者:

    zh-CN 中文(简体, 中国大陆) 对应cmn-Hans-CN 普通话 (简体,中国大陆)
    
    zh-SG 中文(简体, 新加坡)   对应 cmn-Hans-SG 普通话(简体, 新加坡)
    
    zh-HK 中文(繁体, 香港)     对应 cmn-Hant-HK 普通话(繁体, 香港)
    
    zh-MO 中文(繁体, 澳门)     对应 cmn-Hant-MO 普通话(繁体, 澳门)
    
    zh-TW 中文(繁体, 台湾)     对应 cmn-Hant-TW 普通话(繁体, 台湾)
    

    9种浏览器端缓存机制(开发者工具-resource下的既是):

    无标题.png
    • WebSql IndexedDB:浏览器可以实现小型数据库功能来存储数据
    • Application Cache:离线应用(缓存的文件存储在manifest文件中)
    • Cache:
    • Storage:

    HTTP通用首部字段
    字段 说明
    Cache-Control 缓存相关的指令(请求+响应),详情见下表
    Connection 1、跳到跳:不再被转发的字段,需删除相应字段后再转发;<br />2、端到端:管理持久连接keep-alive 、close
    Date 报文创建日期
    Via 追踪报文传输路径,每经过一个服务器都会加入对应服务器的信息
    Upgrade 协商是否可以使用其他版本协议或其他协议来通信,服务器可以返回101switching protocols来响应
    Transfer-Encoding 报文主体传输编码方式:chunked分块传输(跳到跳)
    Pragma http1.1废弃字段,为了兼容,控制缓存时,一般同时指明cache-control: no-cache 与 pragma: no-cache
    trailer 在报文主体尾部定义的其他字段
    Warning 与缓存相关的警告信息(警告码+详情)

    Cache-control字段相关的取值

    取值 客户端发起的请求 服务器返回的响应
    No-Cache 不要缓存的内容,必须转发至源服务器(其实缓存服务器会向源服务器发起验证,若通过则还是返回缓存) 缓存服务器可以缓存,但是使用前需要验证有效性
    No-Store 不缓存请求相关的信息 不缓存响应相关的信息
    Public 其他人都可以使用缓存
    Private 只有特定用户可以使用缓存
    Max-age 请求缓存时间不超过给定值的缓存 资源可以缓存的最大时间(最大缓存有效期)
    s-maxage 同max-age,但是特指公共缓存服务器
    Min-fresh 请求缓存新鲜时间不小于给定值的缓存
    Max-stale 请求过期时间不超过给定值的缓存
    Only-if-cached 只要求返回缓存,若无返回504gateway timeout
    No-transform 不允许更改某体类型 不允许更改某体类型
    Must-revalidate 可缓存,但必须向源服务器验证缓存有效性
    Proxy-revalidate 要求中间缓存服务器向源服务器验证有效性,同must-revalidate,但不适用于代理缓存
    Cache-extension 扩展字段,可添加新字段 扩展字段,可添加新字段

    HTTP响应首部字段

    字段 说明
    Accept-ranges 服务器是否能处理范围请求:bytes or none
    Age 资源从创建到现在的时间
    Proxy-authenticate 告知客户端代理所需要的认证信息
    www-authenticate http访问认证:告知客户端认证方案
    Etag 实体标识(无固定算法,服务器统一分配),分强Etag和弱Etag
    Server 服务器的协议、版本等相关信息
    Retry-after 告知客户端多久后重试(配合3XX或者503service unavailable),可以是秒数,也可以是时间
    Location 资源重定向的URI(配合3XX重定向使用)
    Vary 对缓存进行控制:只对源服务器vary指定字段的请求进行缓存

    HTTP实体首部字段

    字段 说明
    Allow 服务器返回某资源支持的所有http方法。当以某一个不支持的方法访问该资源时,服务器返回405 method not allowed,并将所有支持的http方法设置到allow字段返回。
    Content-Encoding 实体主体的内容编码方式及优先级:gzip、compress、deflate、identity。
    Content-Language 实体主体的自然语言
    Content-Length 实体主体的长度(字节B)
    Content-MD5 实体主体的校验和,用来确认内容是否完整,但可能会被篡改
    Content-Location 返回资源的URI。当返回资源与实际请求对象不同时,返回该字段。
    Content-Range 部分请求返回的字节范围。一般206partial content的请求会返回该字段。
    Content-Type 实体主体的媒体类型
    Expires 资源的过期时间(会优先处理cache-control的max-age)
    Last-Modified 资源最后一次修改的日期

    HTTP请求首部字段
    web性能优化中一个重要的指标TTFB(time to firstbyte),从请求发出到接收到响应的第一个字节开始的时间。

    字段 说明
    待整理 待整理

    为cookie服务的首部字段:
    Cookie:管理服务器和客户端的状态(工作机制是用户识别和状态管理)
    Cookie使用前会验证其有效期、域名、路径等,所以不会泄露给其他web站点。

    字段 说明
    Set-Cookie(响应首部) Name = value <br /> Expires: <br /> Path: 可以使用cookie的路径 <br /> Domain: <br /> Secure: 只有使用https访问的才可以进行cookie的设置 <br /> httpOnly: js脚本无法获取cookie,防止XSS攻击
    Cookie(请求首部) 浏览器发送的cookie列表

    其他首部字段:
    注:区分标准首部和非标准首部的是:X-前缀

    字段 说明
    X-frame-options(响应首部) 取值:deny or sameorigin,控制资源在其他网站frame标签内的显示问题,防止点击劫持,占用自己网站的流量
    X-XSS-protection(响应首部) 取值0 1,控制浏览器对XSS防护的开启
    DNT:拒绝个人信息被收集(请求首部) 取值有0 1,拒绝被精准广告追踪的方法
    P3P:在线隐私偏好平台(请求首部) 将隐私设置成程序可理解的文件,达到保护用户隐私的目的

    相关文章

      网友评论

          本文标题:《图解HTTP》

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