• 了解HTTP协议




    开始复习网络基础了,这个是真学了又忘,忘了又学


    1. 简单的HTTP协议

    超文本传输协议,规范了浏览器和服务器的数据交互,其是基于TCP协议进行连接的,而传输的内容就是HTTP

    浏览器即客户端发送的HTTP我们称之为请求报文,反之叫响应报文


    1.1 报文的组成

    报文首部 + 空行 + 报文主体

    请求报文的组成:报文首部(请求方法、请求URI、协议版本、首部字段)、空行、报文主体

    响应报文的组成:报文首部(协议版本、状态码、原因短语、首部字段)、空行、内容实体


    1.2 持久连接

    • keep-alive:保持TCP连接,建立一个TCP连接可进行多次请求和相应
    • 管线化:不用等待响应可直接发送下一个请求





    2. 常见的请求方法

    请求方法用于告知服务器的意图

    • GET:获取资源
    • POST:传输实体主体
    • PUT:传输文件(一般不使用,没有验证)
    • HEAD:获得报文首部(确认URI有效性、资源更新时间)
    • DELETE:删除文件(一般不使用,没有验证,但和RESTful意义不同了)
    • OPTIONS:预查询资源支持的方法
    • TRACE:追踪路径
    • CONNECT:要求用岁宝协议连接代理(主要SSL/TLS用到)

    GET与POST的区别

    GET:
    获取资源
    请求参数附加在url后面,且有长度限制
    
    POST:
    传输实体主体
    请求信息放入请求体里面,没有长度限制
    有两个TCP包,先发送请求头,待响应100 continue后才发送请数据
    




    3. URI、URL

    URI统一资源标识符、URL统一资源定位符,URI包含URL。URL是我们常用的Web的网页地址,而RUI是任何不止于Web的唯一标识,比如身份证、UUID等


    URI格式:

    http://root:pwd@www.baidu.com:80/dir/index.html?search=test#ch1
     协议 :// 认证信息 @ 服务器地址 : 端口号 / 文件路径 ? 查询参数 # 位置标识符
    




    4 协议版本

    常见的HTTP协议版本有 1.0 / 1.1 / 2.0 其区别如下:

    • 1.0-1.1
      • 支持长连接:keep-alive
      • Host头处理:虚拟主机的出现
      • 支持范围请求:增加range字段,可断点请求
      • 增多了错误状态码
      • 增多了缓存处理:增多了缓存控制
    • 1.1-1.2
      • 采用二进制格式:1.1是文本格式,二进制解析高效
      • 报头压缩:以前版本大量字段且重复发送
      • 主动推送
      • 完全多路复用:连接共享,每个请求对应一个Id,那么一个TCP连接上可以有多个请求,可随机混杂到服务器再归并




    5 状态码

    负责表示客户端HTTP请求的返回结果,以三位数字和原因短语组成,类别如下:

    类别 原因短语
    1XX 信息性 请求正在处理
    2XX 成功 请求正常处理完毕
    3XX 重定向 需要附加操作以完成请求
    4XX 客户端错误 服务器无法处理请求
    5XX 服务器错误 服务器处理请求错误

    常见的状态码:

    • 101:切换协议

    • 200:请求成功且返回

    • 204:请求成功无返回

    • 206:范围请求

    • 301:永久重定向

    • 302:临时重定向(常用)

    • 303:存在另外URI,希望用GET方法

    • 400:请求语法错误

    • 401:未认证

    • 403:无权限

    • 404:无此资源

    • 405:不支持该请求方法

    • 500:服务器内部错误

    • 503:服务器繁忙





    6 首部字段

    给浏览器或服务器提供报文主体大小、使用语言、认证信息等。其分类如下:


    6.1 通用首部字段

    • Connection:控制不再转发的字段、管理持久连接
    Connection:update 、 Connection:keep-alive
    
    • Date:创建报文的日期时间
    • Trailer:事先声明报文主体记录的首部字段,分块传输会用到
    • Transfer-Encoding:规定传输报文主体采用的编码
    • Update:检测能否使用高级协议(只能用于邻接的服务器,要配合Connection)

    6.2 请求首部字段

    • Host:必须包含在内的主机名
    • Accept:用户代理能处理的媒体类型eg:text/html
    • Accept-Charset:用户代理支持的字符集
    • Accept-Encoding:用户代理支持的内容编码eg:gzip、identity、compress
    • Accept-Language:用户代理支持的语言集eg:zh-cn、en-us
    • Authorization:告知服务器用户代理信息
    • Range:范围请求eg:Range:bytes=1000-2000
    • Referer:请求的原始URI
    • User-Agent:客户端程序信息

    6.3 响应首部字段

    • Accept-Ranges:是否支持范围请求eg:none、bytes
    • Age:创建响应过去多长时间,单位秒
    • Localtion:重定向地址,配置302状态码
    • Retry-After:告知客户端多久后再请求
    • Server:告知HTTP的服务器应用程序

    6.4 实体首部字段

    • Content-Encoding:实体内容的编码
    • Content-Length:实体主体大小单位字节
    • Content-Range:范围请求资源
    • Content-type:实体内容的媒体类型
    • Expires:资源过期时间

    6.5 为Cookie服务的字段

    • Set-cookie:响应字段
    • cookie:发给服务器的字段




    7. HTTP协议的瓶颈

    • 一条连接上只可发送一个请求(1.1版本长连接可多个)
    • 请求只能从客户端开始,不可接收响应外的指令
    • 首部字段未压缩发送,信息越多越延迟
    • 发送冗长的首部,每次互相发送相同的首部浪费
    • 可任意选择数据压缩格式,未强制要求压缩

    应对方法:


    7.1 Ajax

    利用JavaScript和DOM操作,局部Web页面更新,响应中减少了传输的数据,但并未突破瓶颈


    7.2 Comet

    通过延迟应答(挂起响应)模拟服务器向客户端推送消息,需要连接时长变长,但并未突破瓶颈


    7.3 SPDY

    没完全改写HTTP协议,而是在应用层和传输层之间通过新的会话层形式运行。可多路复用、请求优先级、压缩首部、推送、服务器提示功能

    突破了瓶颈,但SPDY只是单个域名的多路复用(只对当前网站适用),若请求其他网站则不适用,没有盛行


    7.4 WebSocket

    使用HTTP协议就无法完全消除瓶颈,那么只能使用另外的协议了----WebSokcet使用全双工通信,突破瓶颈

    一旦建立WebSocket通信,后面都使用这个专用的协议,但由于其使用HTTP来升级协议,那么发起连接的还是客户端,升级协议后就没有区分了

    WebSocket特点:推送功能、减少通信量

    过程:建立HTTP连接后(TCP三次握手),需要再进行一次升级协议(HTTP字段),成功后使用WebSocket的独立数据帧(所以WebSocket使用到了TCP、HTTP的功能)

    • 第一步:客户端发送Update:WebSocket字段、Connection:Update、Sec-WebSocket-Key:XXX
    • 第二步:响应101状态码,字段:Sec-WebSocket-Accept:XXX(二者通过算法加密一样才可连接)





    参考

    《图解HTTP》


  • 相关阅读:
    electron之打包成安装程序
    electron之环境安装、启动程序
    微信支付.net官方坑太多,我们来精简
    微信支付官方.net版之坑你没商量
    程序员出路在何方
    简单介绍
    mac中显示隐藏文件
    sublime Text 3 安装emmet
    Andriod学习笔记5:通过NDK在C++中实现日志输出
    Andriod学习笔记4:mac下搭建 Eclipse+CDT 集成开发环境
  • 原文地址:https://www.cnblogs.com/Howlet/p/13022300.html
Copyright © 2020-2023  润新知