应用层协议

网络资源

  • uri(uniform resource identifier) 统一资源标识符。
  • url(uniform resource location) 统一资源定位符,统指绝对路径。
  • urn(uniform resource name) 统一资源名。

Http

Http历史版本

报文结构

请求报文

  • 第一部分简略信息,包含请求方法、url 和协议版本;或者协议版本和状态码
  • 第二部分为请求首部 Header 或者响应首部 Header;
  • 第三部分为内容主体

响应报文

请求方法

状态码

  • 200:  成功返回响应
  • 301:  永久重定向, 客户端第一次访问此 url 时, 告知客户端以后直接访问新的 url, 该状态保存在浏览器缓存中
  • 302:  临时重定向, 客户端每次访问此 url 时, 告知客户端重定向到新的 url , 后续访问依然访问当前的 url
  • 400:  发送的请求错误, 请求格式错误,或者没有服务器要求的数据
  • 401:  没有权限访问, 当前用户没有权限访问此资源
  • 403:  请求被服务器禁止
  • 404:  请求的 url 不存在, 一般是 url 出错
  • 500:  服务器处理请求出现错误
  • 501:  服务器超出能力之外的方法,例如:请求的方法服务器不支持
  • 504:  来自网关或者代理服务器,请求资源服务器时超时

Http特点

  • 无连接 : 不保持客户端与服务器的持久连接
  • 无状态 : 它不对请求和响应之间的通信状态进行保存

长连接与短连接

  • 长连接: 只需要建立一次 tcp 连接就能进行多次 http 通信
  • 短连接: 每有一个http请求就要建立一次tcp连接
    • http/1.1 开始默认是长连接的, 若要断开连接,首部为 Connection : close;
    • 在 http/1.1 之前默认是短连接的, 若要使用长连接, 首部为 Connection : Keep-Alive

无状态协议

cookie与session

  • cookie 
    • 客户端第一次发送信息到服务器时, 服务器根据该客户端信息编码加密生成一个 cookie
    • 服务端将此 cookie 发送给客户端, 客户端发送请求时带有此cookie,服务端就可以区分客户端
  • session
    • 客户端第一次发送信息到服务器时, 服务器为客户端创建一个session对象, 它包含了客户端的身份信息, ​​​​​​ 同时为session生成一个sessionId
    • 服务端将sessionId传给客户端, 客户端发送请求时带此sessionId, 服务端就可以区分客户端
  • 发送
    • 服务端通过set-cookie 首部将cookie 和sessionId发送给客户端
    • 客户端通过cookie首部将将cookie 和sessionId发送给服务端

Https

http安全问题

  • 窃听 : Http使用明文通信, 不保证数据的机密性,内容可能被窃听
  • 篡改: HTTP保证不了数据的完整, 有可能被修改
  • 冒充: HTTP无法认证用户

通过 ssl(Secure Sockets Layer)/tls(Transport Layer Security) 的方式使 http 变成了安全的https

对称加密与非对称加密 

  • 对称加密:加密和解密使用同一密钥. 运算速度快, 但无法安全地将密钥传输给数据接收方.

  • 非对称加密:加密和解密使用不同密钥. 公钥加密, 私钥解密, 安全但速度慢 

问题: 效率低, 耗资源, 一次保证单向安全

  • 两者结合: 使用非对称加密去加密"公钥", 保证公钥的安全, 然后使用对称加密的方法

问题: 无法确定对端是网站还是冒充的中间人

数字证书

数字证书认证机构 (CA, Certificate Authority) 是客户端和服务器双方都信任的第三方机构

  • 功能 : 标识身份
  • 过程: CA机构根据公钥以及网站信息生成数字证书 -- 拿到数字证书, 是信任的CA机构, 使用其公钥加密
  • 问题: 如何确定证书是有效的 -- 数字签名

数字签名

  • 功能: 验证证书有效
  • 过程
    • CA网站收到网站信息和公钥后-->hash运算-->拿到较短的哈希字符
    • CA也生成一对专门用于"数字证书"的公钥和私钥-->使用私钥加密哈希字符-->数字签名     --CA将含有数字签名的证书发给服务端
    • 客户端拿到证书后进行验证
      • 使用CA证书的公钥解密数字签名 --> 拿到哈希字符str1
      • 对收到的数字证书做同样的hash运算 --> 拿到哈希字符str2
      • 比对str1 == str2

TLS四次握手

  • 1.协商TLS版本, 加密算法
  • 2.验证身份并拿到公钥
  • 3.协商并生成会话密钥, 之后使用其通信

  • 1.客户端 hello :  告知支持的TLS版本, 加密套件, 生成第1随机数
  • 2.服务端 hello :  确认支持的TLS版本, 选择加密套件, 生成第2随机数
  •     服务端再发送响应来出示证书, 发送公钥, 告知发送完成 (该证书检测由浏览器比对信任列表完成)
  • 3.客户处理响应 :  客户端生成第3随机数(预主密钥), 使用收到的公钥加密, 然后发送给服务器
  • 4.服务端使用私钥解密拿到预主密钥,  客户端与服务端使用第1随机数 + 第2随机数 + 预主密钥 计算出会话密钥

DNS

  • 功能 : 将域名转换为IP地址 -- IP地址难记

浏览器缓存--> 本地hosts文件 --> 本地DNS解析缓存 --> 本地DNS服务器

 --> 根域名服务器--> 顶级域名服务器 --> 权威域名服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值