图解HTTP-读书笔记

1 篇文章 0 订阅
1 篇文章 0 订阅

网络基础和协议之间的关系

OSI

OSI参考模型,OSI(Open System Interconnect)即开放式系统互联,是ISO(国际标准化组织)组织在1985年研究的网络互联模型

七层框架:

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

各协议与HTTP的关系

HTTP与各协议的关系

TCP/IP通信

负责域名解析的DNS服务(应用层)

DNS提供域名到 IP 地址之间的解析服务

DNS

传输层的TCP协议

  • 提供可靠的字节流服务 – 将大块数据分割成以报文段(segment)为单位的数据包进行管理
  • TCP 协议传为了传送大数据将数据分割,而且能够确认数据最终是否送达到对方(采用三次握手来确认数据准确无误地被送达目的地)
TCP三次握手

三次握手

  • 发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。
  • 若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。(相关的SYN Flood..)

网络层的IP协议

把各种数据包传送给对方

IP

IP地址、MAC地址和ARP协议
  • IP地址:指明节点被分配到的地址
  • MAC地址:指网卡多数的固定地址
  • ARP 地址解析协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
IP间的通信

在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转
才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC地址来搜索下一个中转目标。这时,会采用 ARP 协议获下一中专目标的MAC地址

路由选择

URI、URL、URN

URI (Universal Resource Identifier) 统一资源标志符
URL (Universal Resource Locator) 统一资源定位符
URN (Universal Resource Name) 统一资源名称

URI 用于标识某一互联网资源,而统一资源定位符URL 表示资源的地址(互联网上所处的位置)
URI包含URL

URI结构

URI

HTTP协议的特点及应用

无状态协议

  • HTTP协议是一种无状态(stateless)协议–(协议本身并不保留之前一切的请求或响应的报文信息)
  • HTTP无状态协议优点:不必保存状态,减少服务器的 CPU 及内存资源的消耗,使得HTTP协议本身很简单,应用广泛

stateless

为实现保持状态功能,引入了cookie技术

Cookie管理状态

Cookie 技术通过在请求和响应报文中写入 Cookie 信
息来控制客户端的状态

过程:

  • Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的
    首部字段信息,通知客户端保存 Cookie。

cookie首次发送请求响应

  • 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去,服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

cookie再次发送请求响应

HTTP请求报文和响应报文:

cookie

持久连接

一次HTML访问中,TCP多次建立连接和断开

访问HTML页面时,请求不同的页面资源都会造成无谓的TCP建立连接和断开,增加通信量的开销

持久连接-TCP多次建立连接和断开

持久连接

HTTP/1.1 和一部分的 HTTP/1.0 提出持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或HTTP connection reuse)的方法。

持久连接

  • 持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。旨在建立 1 次 TCP 连接后进行多次请求和响应的交互
  • 持久连接的好处:于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,加快网页的显示速度。
  • 在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并未标准化。

管线化

持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求,管线化技术出现后,不用等待响应亦可直接发送下一个请求。

HTTP报文

HTTP报文的结构

HTTP报文由报文首部和报文主体组成,由空行隔开,通常不一定要有报文主体

请求报文和响应报文的结构

请求报文、响应报文

请求端(客户端)的HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文

  • 请求报文:

请求报文的构成

  • 响应报文

响应报文的构成

请求行、状态行、首部字段

  • 请求行:由请求方法(method)、请求URI(Request)、HTTP版本构成
  • 状态行:响应结果的状态码、原因短语、HTTP 版本构成
  • 首部字段:包含表示请求和响应的各种条件和属性的各类首部

HTTP方法(Method)

GET 获取资源

请求访问已被 URI 识别的资源,网络请求绝大部分使用GET方法

GET方法实例

POST 传输实体主体

POST 主要目的不是获取资源,而是传输存储在内容实体中的数据

POST方法实例

HEAD 获得报文首部

HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等

HEAD方法实例

PUT 传输文件

在请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置

PUT方法实例

DELETE 删除文件

与 PUT 相反的方法,按请求 URI 删除指定的资源。
但是,HTTP/1.1 的 DELETE 方法本身和 PUT 方法一样不带验证机制,所以一般的 Web 网站也不使用 DELETE 方法。

DELETE方法实例

OPTIONS 询问支持的方法

用来查询针对请求 URI 指定的资源支持的方法。

OPTIONS方法实例

TRACE 追踪路径

让 Web 服务器端将之前的请求通信环回给客户端的方法。

CONNECT 要求用隧道协议连接代理

CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协
议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接
层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容
加 密后经网络隧道传输。

HTTP1.0和HTTP1.1支持的方法

HTTP1.0和HTTP1.1支持的方法

GET和POST的区别

  • GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在内容实体。
  • POST比GET更安全,因为 GET 传的参数在 URL 中是可见的。并且 GET 只支持 ASCII 字符,如果参数为中文则可能会出现乱码,而 POST 支持标准字符集。
  • GET方法传输数据,URL 的长度是受限制的(URL 的最大长度是 2048 个字符),POST无限制。
  • GET能被缓存,POST不能缓存 。
  • 使用 GET 方法,浏览器会把 HTTP Header 和 Data 一并发送出去,服务器响应 200(OK)并返回数据。而使用 POST 方法,浏览器先发送 Header,服务器响应 100(Continue)之后,浏览器再发送 Data,最后服务器响应 200(OK)并返回数据。
GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

请求URI(Request URI)的方式

请求URI方式

HTTP状态码

HTTP状态码

2XX 成功

  • 200 OK:请求被正常处理
  • 204 No Content:请求处理成功,但在返回的响应报文中不含实体的主体部分。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
  • 206 Partial Content: 请求资源的一部分,响应报文中包含由 Content-Range 指定范围的实体内容

3XX 重定向

  • 301 Moved Permanently 永久性重定向:表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI
  • 302 Found 临时性重定向:表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问
  • 303 See Other:和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源
    • 虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法
  • 304 Not Modified 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。[ 304 的标准解释 是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。]
  • 307 Temporary Redirect 临时重定向 与 302 类似,但 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

4XX 客服端错误

  • 400 Bad Request 请求报文中存在语法错误,浏览器会像 200 OK 一样对待 400状态码
  • 401 Unauthorized 请求需要有通过HTTP认证的认证信息,如果之前已进行过一次请求,则表示用户认证失败(用户未认证或认证失败)
  • 403 Forbidden 请求资源被服务器拒绝
  • 404 Not Found 服务器上没有找到请求资源

5XX 服务器错误

  • 500 Internet Server Error 服务器执行请求时发生错误
  • 503 Service Unavailable 服务器暂处于超负载或正在进行停机维护,现在无法处理请求

HTTP首部

HTTP 与 HTTPS

HTTP的不足

HTTP存在的安全性问题:

  1. 通信使用明文(不加密),内容可能会被窃听 – 加密缺失
  2. 不验证通信方的身份,因此有可能遭遇伪装 – 认证缺失
  3. 无法证明报文的完整性,所以有可能已遭篡改 – 完整性保护缺失

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

对于加密:

通信的加密:
  • HTTP 协议中没有加密机制,通过和 SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,将整个通信线路加密
  • HTTPS 是与SSL组合使用的HTTP
  • HTTP 先和SSL通信,再由SSL和TCP通信,通过使用 SSL,HTTPs 具有了加密、认证和完整性保护
  • SSL 采用公开密钥加密(Public-key cryptography)的加密处理方式
内容的加密
  • 客户端需要对 HTTP 报文主体进行加密处理后再发送请求
  • 为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制
  • 内容仍有被篡改的风险

认证(验证通信方身份)

HTTP 协议的实现本身非常简单,不论是谁发送过来的请求都会返回响应(来者不拒),因此不确认通信方,会存在各种隐患,比如 Dos 攻击

  • 使用SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定通信方,证书由值得信任的第三方机构颁发

完整性

  • 所谓完整性是指信息的准确度
  • HTTP 协议无法证明通信的报文完整性,数据在传输途中,遭攻击者拦截并篡改内容的攻击,称为中间人攻击
  • SSL 提供认证和加密处理及摘要功能

对称密钥加密(私钥加密) 和 非对称密钥加密(公钥加密)

对称密钥加密,又称共享密钥加密

加密解密用同一个密钥,加解密速度快,适合于大数据量加密,但密钥管理困难,在转发密钥过程中,可能会被监听

非对称密钥加密 ,又称公开密钥加密

  • 使用一对密钥(公钥、私钥)来分别完成加解密,首先通信双方交换公有密钥,发送者用接受者的公开密钥去加密,信息接收者用自己的私用密钥去解密。
  • ssl使用的就是非对称密钥加密
  • 加解密速度慢
  • 证明公开密钥正确性的证书 - - > 数字证书认证机构

对称密钥加密与非对称密钥加密的区别

  • 数据加密和解密用的密钥不同(非对称加密),对称密钥加密加解密密钥相同
  • 对称密钥加密比非对称密钥加密快的多
  • 非对称加密比对称加密通信更安全

HTTPS采用混合加密机制

在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

HTTPS混合加密机制

为什么不一直使用 HTTPS

  • 与纯文本通信相比,加密通信会消耗更多的CPU 及内存资源。
  • 节约购买证书的开销
  • 建议如果是非敏感信息则使用 HTTP 通信,只有在包含个人信息
    等敏感数据时,才利用 HTTPS 加密通信

认证

HTTP1.1使用的认证方式

  • BASIC 认证(基本认证)
  • DIGEST 认证(摘要认证)
  • SSL 客户端认证
  • FormBase 认证(基于表单认证)

版本比较

HTTP1.0/HTTP1.1/HTTP2.0版本比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值