HTTP学习

1.网络基础 TCP/IP

计算机与网络设备要相互通信,双方就必须基于相同的方法。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。

TCP/IP 的分层管理

TCP/IP 协议族按层次分别分 为以下 4 层:应用层、传输层、网络层和数据链路层。

应用层决定了向用户提供应用服务时通信的活动。HTTP 协议也处于该层。
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)。
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计 算机,并把数据包传送给对方。网络层所起的作用就是在众多的选项内选择一条传输路线。
数据链路层用来处理连接网络的硬件部分

TCP/IP 通信传输流

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。
在这里插入图片描述
(HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。 接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。 在网络层(IP 协议),增加作为通信目的地的 MAC地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。 这种把数据信息包装起来的做法称为封装(encapsulate)。

确保可靠性的TCP协议

TCP 位于传输层,提供可靠的字节流服务。TCP协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手 (three-way handshaking)策略建立连接。
在这里插入图片描述

  1. 第一次握手:发送端发送带有SYN标志的数据包给接收端,接收端接收到这个数据包之后,接收端知道了发送端的发送功能正常,同时也知道了接收端的接收功能正常。
  2. 第二次握手:接收端收到数据包后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息,发送端接收到这个数据包之后,表示发送端和接收端的发送、接收功能正常。
  3. 第三次握手:最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

至此,三次握手完成,此时的发送端和接收端都确认了:双方的收发功能全部正常。

IP 协议

IP(Internet Protocol)网际协议位于网络层。IP 协议的作用是把各种数据包传送给对方。要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。
IP地址指明要发送到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和 MAC地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。
使用 ARP 协议凭借 MAC 地址进行通信。ARP 是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的 MAC地址。
在这里插入图片描述

域名解析的 DNS 服务

DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP地址之间的解析服务。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
在这里插入图片描述

各种协议与 HTTP 协议的关系

在这里插入图片描述

2.HTTP 协议

HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应。
HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不具备保存之前发送过的请求或响应的功能。

简述 HTTP 工作流程
  1. HTTP 开始工作,首先客户端与服务器需要在经历 TCP 三次握手后建立连接。
  2. 建立连接之后,客户端发送一个请求(request)给服务器。
  3. 服务器收到请求后开始处理,给予客户端一个响应(response)。(不一定是成功)
  4. 客户端接收到响应后处理渲染后告诉用户,最后断开连接。
持久连接和短连接

短连接:每次请求都建立一个TCP连接,请求完成后结束连接,新的请求再建立 TCP 连接,缺点很明显就是开销很大。

持久连接:发起一个请求之后,建立 TCP 连接,只要任意一端没有明确提出断开连接,则保持 TCP连接状态。
持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

持久连接使得多数请求以管线化(pipelining)方式发送成为可能。管线化技术出现后,不用等待响应亦可直接发送下一个请求。能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。

从 HTTP/1.1 开始默认使用持久连接,会在响应头加入 Connection:Keep-Alive 字段标识,如果需要断开连接,需要由客户端或者服务器提出断开,使用 Connection:close 字段。

cookie和session的区别
请求与响应

用于 HTTP协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。

请求(request)总体从上向下包括:请求行(请求方法、URL、协议版本)、请求头(属性是key:value形式、属性一条一行)、请求空行、请求体(请求数据)
在这里插入图片描述
响应(response)总体从上向下包括:响应行(协议版本、状态码和状态描述)、响应头(属性是key:value形式、属性一条一行)、响应空行、响应体(响应数据)
在这里插入图片描述

使用请求方法

向请求URL指定的资源发送请求报文时,采用请求方法下达命令。请求方法的作用在于,可以指定请求的资源按期望产生某种行为。
在这里插入图片描述
GET 和 POST 方法的区别

  1. 在客户端 GET 方法通过 URL 提交数据,所以只支持 ASCII 码,所以 GET 参数中如果出现中文需要先进行编码,而 POST 方法提交数据在报文中,支持多种标准字符集。
  2. GET 方法提交的数据大小浏览器有限制,Post 没有
  3. GET 方法是幂等的,同样的请求被执行多次效果是一样的,服务器状态也是一样的(统计功能除外),POST 方法是非幂等的
  4. GET 请求可以被浏览器主动缓存,而 POST 不会,除非手动设置
  5. GET 请求发送一个数据包 header 和 data一起发送出去,POST 请求先发送 header ,服务器响应 100 Continue,浏览器再发送 data。
HTTP 状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
在这里插入图片描述

通信数据转发

代理
代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器,同时也接收服务器返回的响应并转发给客户端。代理不改变请求 URL,会直接发送给前方持有资源的源服务器。
在这里插入图片描述
转发时,需要附加 Via 首部字段以标记出经过的主机信息。

缓存代理:代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本 (缓存)保存在代理服务器上。 当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获 取资源,而是将之前缓存的资源作为响应返回。优点:节省了通信流量和通信时间

透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理 (Transparent Proxy)。反之,对报文内容进行加工的代理被称为非 透明代理。

网关
网关能使通信线路上的服务器提供非 HTTP 协议服务。利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全
在这里插入图片描述

3.HTTPS协议

HTTP的缺点

1.通信使用明文可能会被窃听

由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使 用 HTTP 协议通信的请求和响应的内容)进行加密。即,HTTP 报文 使用明文(指未经过加密的报文)方式发送。

  • TCP/IP 是可能被窃听的网络
    按 TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。

  • 加密处理防止被窃听
    通信的加密:通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用, 加密 HTTP 的通信内容。
    内容的加密:将参与通信的内容本身加密的方式。由于 HTTP 协议中 没有加密机制,那么就对 HTTP 协议传输的内容本身加密。即把 HTTP 报文里所含的内容进行加密处理。

2.不验证通信方的身份就可能遭遇伪装

HTTP 协议中的请求和响应不会对通信方进行确认。使用 HTTP 协议无法确定通信方,但如果使用 SSL则可以。 SSL不仅提供加密处理,而且还使用了一种被称为证书的手段, 可用于确定方。

3.无法证明报文完整性,可能已遭篡改

由于 HTTP 协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。

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

在这里插入图片描述
HTTPS 并非是应用层的一种新协议。只是 HTTP通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代 替而已。通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通 信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL协议这层外壳的 HTTP。
在这里插入图片描述在采用 SSL后,HTTP 就拥有了 HTTPS 的加密(防窃听)、证书(防伪造)和完整性(防篡改)等安全特性。

HTTPS 的安全通信机制
在这里插入图片描述
步骤 1: 客户端通过发送 Client Hello 报文开始 SSL通信。报文中包 含客户端支持的 SSL的指定版本、加密组件(Cipher Suite)列表(所 使用的加密算法及密钥长度等)。
步骤 2: 服务器可进行 SSL通信时,会以 Server Hello 报文作为应 答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务器的 加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证 书。
步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶 段的 SSL握手协商部分结束。
步骤 5: SSL第一次握手结束之后,客户端以 Client Key Exchange 报 文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。该报文会提 示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
步骤 7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的 整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确 解密该报文作为判定标准。
步骤 8: 服务器同样发送 Change Cipher Spec 报文。
步骤 9: 服务器同样发送 Finished 报文。
步骤 10: 服务器和客户端的 Finished 报文交换完毕之后,SSL连接 就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用 层协议的通信,即发送 HTTP 请求。
步骤 11: 应用层协议通信,即发送 HTTP 响应。
步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报 文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值