01.Http协议了解


目录

1、网络

2、HTTP协议

3、Http请求的过程

4、TCP协议

5、Https协议

6、cookie、session、token


1、网络

  • 1)复杂的网络
    • 网络传输从A主机传输到B主机,可能要经历一系列复杂的过程
    • 数据丢包、数据发送重复、数据完整性校验、数字信号转换模拟信号、信号衰减、。。。
  • 2)七层网络参考模型及TCP/IP分层概览

2、HTTP协议

  • HTTP,超文本传输协议,HyperText Transfer Protocol
    • 是用于从万维网【www:world wide web】服务器传输超文本到本地浏览器的传送协议
    • http传输的超文本包括
    • html文件
    • js脚本
    • 图片
    • 视频
    • 。。。等
  • http是应用层的协议
    • Http协议是一种 无状态的 ,以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的的互动
    • 不会存储用户的信息
    • 以request/response的方式运行
    • 可扩展--->可以加一些header
    • 消息格式--->文本、图片、音频、视频等
    • 与超文本信息系统互动--->html
  • 1)Http报文格式:
    • 请求报文和响应报文结构基本相同,三部分组成
      • 1)起始行【startline】,描述请求或者响应的基本信息
      • 2)头部字段集合【header】,使用key-value格式更详细的说明报文
      • 3)消息正文【entity】,实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据
  • 2)请求行报文格式
    • 请求方法:GET/PUT/HEAD/POST,表示对资源的操作类型
    • 请求目标:通常是一个URI,标记了请求方法要操作的资源
    • 版本号:表示报文使用的HTTP协议版本
    • 当前主流的http协议版本:1.0、1.1和2.0
    • http1.0 短连接,可以想象成打电话
    • 打电话前要先拨号,要先建立一个连接;打完电话就挂掉电话,通话完成
    • 每一次通话都要建立连接
    • 对服务器资源占用就有点大
    • http1.1,http2.0,长连接,可以想象成玩游戏
    • 账号登录成功后,账号挂在这里,也不会退出
    • 就是只要第一次连接成功,以后使用都不用再建立连接了,都使用的是第一次的连接
    • 2.0要比1.1效率更高些
  • 3)响应行报文格式
    • 版本号:表示报文使用的HTTP协议版本
    • 状态码:一个三位数,用代码的形式表示处理的结果,比如200是成功,500是服务器错误
    • 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解响应状态码的原因
  • 4)Http头字段
    • 头部字段是key-value格式,key和value之间用":"分隔,最后用CRLF换行表示字段结束
    • 如Content-Type: application/json
    • Http头部字段非常灵活,可以使用标准字段如Host、Connection等已有的头字段,也可以任意添加自定义头,比如token,JSessionid等
    • 这就给http协议带来了无限的扩展可能
  • 注意事项:
    • 字段名不区分大小写
    • 字段名里面不允许空格
    • 可以使用连字符"-",但是不允许出现下划线"_",因为有的服务器不解析这种
    • 字段名后面必须紧接着冒号":",中间不允许出现空格
    • ":"后面可以有多个空格
    • 字段的顺序没有意义,所以可以任意排序
    • 字段原则上不允许重复,除非这个字段本身的语义允许,比如set-cookie
  • 5)常用的头字段
    • 一般分为几类:
    • 请求字段
      • 请求中的头字段,如Host、Referer
      • cookie,使用服务器返回的通过set-cookie设置管理的http cookie信息
      • host,客户端指定自己想访问的web服务器的域名,ip地址和端口号
      • referer,浏览器向web服务器表明自己是从哪个url获取当前请求的url的
      • user-agent,告诉服务器,浏览器/或者其他客户端的类型、内核和版本等
      • user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36
      • 浏览器标识,客户端操作系统类型、版本、架构,浏览器渲染引擎的内核的类型及版本(兼容的内核及版本),浏览器真实版本信息以及兼容的浏览器类型、版本
      • accept,客户端告诉服务器,客户端能够接受什么媒体类型
      • 如 accept: text/html,application/xhtml+xml,application/json,application/xml,...
      • accept-encoding,接收的编码
      • accept-language,接收的语言
      • accept-charset, 接收的字符集
      • accept-version,指明客户端请求的软件版本号
      • cache-control,对服务器的缓存控制
      • connection,对服务器的连接控制
    • 响应字段
      • 响应中的头字段,如Server
      • date, 设置消息发送的日期和时间
      • server,指明服务器的软件类型以及版本
      • content-type,设置响应体的MIME类型
      • content-encoding, 设置数据使用的编码类型
      • expires,设置响应体的过期时间
      • via,通知客户端代理,通过其要发送什么响应
      • accept-ranges,服务器表明自己是否接收
      • authorization,客户端接收来自web服务器的www-authenticate响应时,该头部自己的身份验证信息给web服务器
      • cache-control,对客户端的缓存控制
      • location,访问的对象已经被移到别的位置,应该到本头字段指向的地址获取
      • connection,连接状态通知
      • set-cookie,服务器设置cookie
    • 通用字段
      • 在请求和响应头里面都可以出现,如Content-Type、Connection
      • connection: keep-alive
      • 持久连接意思是,一端没有明确断开连接,那么保持tcp的连接
      • content-type常用:媒体类型,MIME,
      • 如果是请求的content-type:
      • 客户端告诉服务器,发送给服务器的数据的媒体类型
      • 如果是响应的content-type
      • 服务器返回的数据的媒体类型
      • text/html:html文件
      • image/png:图片
      • application/json: 服务器返回json,如{key1:value1,key2:value2}
      • application/x-www-form-urlencoded, form表单提交数据 【默认的content-type类型】
      • 数据格式为:key1=value1&key2=value2
      • multipart/form-data, 表单文件上传提交
      • application/json,json格式提交文件
      • 数据格式为:{key1:value1,key2:value2}
      • text/xml, xml格式提交文件
  • 6)URL,统一资源定位符
    • 如:http://www.xxx.com:8888/xxxx.jpg
    • 协议,http
    • 域名,www.xxx.com,就是服务器
    • 端口,8888
    • 服务器的资源路径, /xxxx.jpg,就是服务器下的资源存放路径
  • 7)http常用的请求方法:
    • get
      • 获取资源,如果要传参【浏览器地址栏传参】,格式为:url?key1=value1&key2=value2
    • post
      • 提交资源,如果要传参,【请求体中传参】,默认的格式是key1=value1&key2=value2...
    • put
      • 更新资源
    • delete
      • 删除资源
  • 8)http常用的状态码
    • 1xx
      • 100 continue,服务器近收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求
    • 2xx
      • 200 ok,请求成功
    • 3xx
      • 301 Moved Permanently,永久重定向
      • 302 Found, 临时重定向
    • 4xx
      • 400 Bad Request,客户端错误的请求,服务器未能理解请求
      • 401 Unauthorized,被请求的页面需要用户名和密码
      • 403 Forbidden,对被请求的页面禁止访问
      • 404 Not Found,页面找不到
    • 5xx
      • 500 Internal Server Error,服务器内部错误
      • 502 Bad Gateway, 服务器从上游服务器收到一个无效的响应,网关错误
      • 503 Service Unavailable,服务器临时过载或者宕机
      • 504 Gateway Timeout, 网关超时
      • 505 Http Version Not Supported,服务器不支持请求中所指明的http版本
  • 9)http的认证
    • 基本认证
    • basic auth,输入用户名和密码那种形式
    • 常规认证
    • digest auth,
    • 自定义认证
    • http认证可能使用到的场景:
    • 比如postman接口调试的时候可能需要选择是哪种认证

3、Http请求的过程

  • 当用户在浏览器中输入网址回车之后,网络协议都做了哪些工作?
    • 1)首先干活的是客户端【浏览器】应用程序,它要解析出URL中的域名
    • 2)根据域名获取对应的ip地址,首先从浏览器的缓存中查看,如下可以查看浏览器中域名对应ip的解析
      • chrome://net-internals/#events
      • chrome://net-export/
      • 如果没有,则从本机域名解析文件hosts(/etc/hosts)中查看,还没有则从LDNS(Localdnsserver)、Rootserver域名服务器、国际顶级域名服务商的DNS的层层解析
    • 3)拿到ip地址后,浏览器就发起与服务器的三次握手
    • 4)握手建立后,就可以组装http请求报文,发送报文
    • 5)服务器收到请求报文后开始,请求报文解析,生成响应数据,发送响应数据
    • 6)浏览器收到响应数据之后,开始渲染页面
    • 7)http协议1.1和http2.0【长连接】,断开连接,进行四次挥手
  • http客户端:
    • 浏览器、postman、jmeter、python requests等
  • http服务端
    • apache httpd、tomcat、nginx、IIS、BWS(百度)、Tengine(淘宝)
  • http的默认端口是80,也可以改成其他端口,https的默认端口为443

4、TCP协议

  • tcp协议是面向连接的、可靠的、基于字节流的传输层通信协议
  • 特点:
    • 基于连接的:数据传输之前需要建立连接
    • 全双工的:双向传输
    • 字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃
    • 流量缓冲:解决双方处理能力的不匹配
    • 可靠的传输服务:保证可达,丢包时通过重发机制来实现可靠性
    • 拥塞控制:防止网络出现恶性拥塞
  • http是建立在tcp协议之上的
  • tcp协议是可靠的,udp协议是不可靠的。
    • qq、微信这些都是用的tcp
    • 飞鸽传书用的udp,还有一些视频类也是用udp

5、Https协议

  • https:
    • 安全的超文本传输协议,是具有安全性的ssl加密传输协议
    • 为浏览器和服务器之间的通讯加密,确保数据传输的安全。
  • https协议是由http + ssl协议构建的可进行加密传输,其中ssl用来加密数据包
  • SSL【Secure Socket Layer】安全套接层的网络安全协议。它是在tcp/ip协议上实现的一种安全协议,采用公开密钥技术。
  • http协议的特点
    • 1)http协议是明文传输协议
      • https = http + ssl【安全的超文本传输协议】
    • 2)http协议是无状态的协议
  • https的特点
    • 请求和响应在发送到网络前,需要进行加密
    • ssl,Secure Sockets Layer,后来改名为tls
  • http和https的区别:
    • 1)http是明文传输协议,https是加密的传输协议
    • 2)https = http + ssl,ssl是用来对数据加密的,比http协议安全
    • 3)https协议传输的性能要比http低【传输效率低,响应时间更长】
    • 4)https需要CA【Certificat Authority,证书签发机构】机构申请CA认证,证书【国际主流的CA机构有Symantec、GeoTrust、DigiCert、GlobalSign等,需要一定的费用】
    • 5)http的端口是80,https的端口为443

6、cookie、session、token

  • cookie和session都是http协议状态保持的方案
  • http协议是无状态的,所以就有了cookie和session这些技术
  • cookie和session的区别
    • 1)cookie是存储在客户端的,session是存储在服务器的
    • 2)cookie容易被篡改,session比cookie更安全
    • 3)session过多会对服务器造成压力
    • 单个cookie不能超过4k,单个域名不能超过53cookie
  • cookie和session的流程
    • 1)客户端发送请求,比如登录请求
    • 2)服务端收到请求,并校验客户客户端发送过来的数据,并在服务端生成session【session中包含有返回给客户端的数据】
    • 3)服务器返回数据,并将cookie数据以响应头部字段set-cookie的形式,返回给客户端
    • 4)客户端收到服务器返回的数据,并将set-cookie的值存储在本地。
    • 5)客户端再次发送请求,并携带cookie数据,一起发送给服务器
    • 6)服务器收到客户端再次发来的请求,并使用服务器端的session来校验客户端携带来的cookie,校验通过后正常返回数据。
  • session的弊端:
    • 1)session是不是要存储啊,所以session越多,会影响服务器的性能
    • 2)session的扩展性不强
  • 所以就衍生出了一个概念叫token
  • token
    • token是通过算法生成的
    • JWT:json web token,这个是比较流行一点的token
    • 头部.载荷.签名
  • token的流程
    • 1)客户端发送请求,比如登录请求
    • 2)服务端收到请求,并校验客户客户端发送过来的数据,通过算法生成token【token中包含有返回给客户端的数据】
    • 3)服务器返回数据,并将token数据包含在响应体中,返回给客户端
    • 4)客户端收到服务器返回的数据,并将token的值存储在本地。
    • 5)客户端再次发送请求,并携带token数据(一般是请求头),一起发送给服务器
    • 6)服务器收到客户端再次发来的请求,并使用算法校验token,校验通过后正常返回数据。
    • 总的来说,就是token更简单、生成的更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值