计算机网络核心(2)

五、HTTP 简介

HTTP 即超文本传输协议,是属于应用层的协议,是一个基于请求与响应模式的无状态的应用层的协议,常基于 TCP 的连接方式。

HTTP 目前正处于多个版本共存的情况,包括仍被广泛采用的 1.0, 主流最为广泛的 1.1, 还有应用较少、NB 吹的最大的 2.0.

1.1 相交于 1.0 最明显的区别是引入了 keep-alive 这项长连接技术,2.0 虽然更合理、更先进,但其推广不开来的原因也是因为 1.1 完全能够满足目前的应用,并且升级上 2.0 的成本太大所导致的,这里主要以 1.1 为准。

1、HTTP 的特点

绝大多数的 Web 开发,都是构建在 HTTP 协议之上的 Web 应用,HTTP 的主要特点可概括如下:
1、支持客户 / 服务器模式
在这里插入图片描述

HTTP 协议工作于客户端、服务端架构之上,浏览器作为 HTTP 客户端,通过 URL 向 HTTP 服务端及 Web 服务器发送所有请求。

2、简单快速
请求时只需请求方法和路径,请求方法常用的有:GET、POST.

3、灵活
允许传输任意类型的数据对象。

4、无连接
无连接的含义是:限制每次连接,只处理一个请求。
服务器处理完客户的请求,并受到客户的应答之后,即断开连接,采用这种方式可以节省传输时间。

5、无状态
无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要先前的信息,则必须被重传。

2、HTTP 结构

2.1 HTTP 请求结构

在这里插入图片描述
客户端发送一个 HTTP 请求到服务器的请求消息结构,如图,主要有四个部分组成:

  • 请求行

    • 请求方法
    • url
    • 协议版本
  • 请求头
    请求头由若干个报头组成的,每个报头的结构,都是:

    • 头部字段名(名字)

    这些报头,用来设置 HTTP请求的一些参数,例如:host, 表示被请求资源的主机和端口号。

  • 空行

  • 请求正文
    数据体,只在 POST 请求中用到,表示要上传的数据。 数据体和头部之间是有一个空行的。

请求结构分析:
在这里插入图片描述
从 Host 到 Cookie 都是请求头;
请求头之后,不管请求正文有没有数据,都会要空一行。

2.2 HTTP 响应结构

在这里插入图片描述
响应报文主要有三个部分:

  • 状态行
    • 协议版本
    • 状态码
    • 状态码描述
  • 响应头部
    用来说明客户端要使用的一些附加信息的
    • 头部字段名
    • 比如说,Date 是用来生成响应的日期和时间,Content-Type
      就指定了 MIME 类型的 HTML.
  • 空行
  • 响应正文

响应结构分析:
在这里插入图片描述

3、HTTP 请求 / 响应的步骤

1.客户端连接到 Web 服务器
一个 HTTP 客户端,通常是浏览器与 Web 服务器的 HTTP 端口,默认端口号是80, 建立一个 TCP 套接字连接。

2.发送 HTTP 请求
即通过 TCP 套接字,客户端向 Web 服务器发送一个文本的请求报文

3.服务器接受请求并返回 HTTP 响应

4.释放连接 TCP 连接
如果连接模式为 Close, 则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接;
如果连接模式为 keep-alive, 则该链接会保持一段时间,在改时间内,可以继续接受请求。

5.客户端浏览器解析 HTML 内容

4、在浏览器地址栏键入 URL, 按下回车之后经历的流程

1.DNS 解析
首先,浏览器会依据 URL 逐层查询 DNS 服务器缓存,解析 URL 中的域名所对应的 IP 地址。
DNS 缓存从近到远,依次是:浏览器缓存、系统缓存、路由器缓存、IPS 服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。从哪个缓存找到对应的 IP, 则直接返回,不再查询后面的缓存。

2.TCP 连接
根据 IP 地址和对应端口(默认是80端口)和服务器建立 TCP 连接(三次握手)。

3.发送 HTTP 请求
4.服务器处理请求并返回 HTTP 报文
5.浏览器解析并渲染页面
6.浏览器释放 TCP 连接(四次挥手)

其中,第五步和第六步可以认为是同时发生的,哪一步在前没有特别的要求。

5、GET 请求和 POST 请求的区别

从三个层面来解答:
1.HTTP 报文层面: GET 将请求信息放在 URL, POST 放在报文体中。虽然 POST 放在报文体,但通过抓包依然是可以很轻松的获取到信息的,所以从安全性上来讲,两者并没有太多的区别,HTTP 也并不是安全的,具体要解决传输过程中的安全问题,还要靠 HTTPS. GET 有长度限制,POST 则无。
2.数据库层面: GET 符合幂等性和安全性,POST 不符合。幂等性的定义就是对数据库的一次操作、和多次操作,获得的结果是一致的;安全性则是对数据库的操作没有改变数据库的数据。GET 请求是用来做查询操作的,因此不会改变数据库中原有的数据,而 POST 请求则是提交数据,因此会改变数据库中的数据,其次,POST 请求方式每次获得的结果都有可能不一样,因为 POST 请求是作用在上一级的 URL 上的,则每一次请求都会添加一份新资源,这也是 POST 和 PUT 的最大区别。PUT 是幂等的。
3.其他层面: GET 可以被缓存、被存储,而 POST 不行。GET 请求会保存在浏览器的浏览记录中,以 GET 请求的 URL 可以保存为浏览器书签,而 POST 不具备这些功能。

6、Cookie 和 Session 的区别

因为 HTTP 是无状态的,也就意味着我们每次访问某个有登录需求的页面,都要输入一次账号和密码。
但是现实中并没有出现这样的场景,这是因为我们引入了某些机制,让 HTTP 具备了状态,其中的两个便是 Cookie 和 Session.

6.1 Cookie

Cookie 是客户端的解决方案。

  • 是有服务器发送给客户端的特殊信息,以文本形式存放在客户端
  • 客户端再次请求的时候,会把 Cookie 回发
  • 服务器接收到后,会解析 Cookie 生成与客户端相对应的内容

6.2 Session

  • 服务器端的机制,在服务器上保存的信息
  • 当程序要为某个客户端的请求创建一个 session 的时候,服务器先检查这个客户端的请求里是否包含了 session 标识,称为
    session id,如果包含,则说明以前已经为此客户端创建过 session,服务器直接根据 session id
    检索出来使用。如果客户端请求不包含 session id,则为此客户端创建一个 session, 并生成一个与此相关的 session
    id
  • 把 session 信息回发给客户端,进行保存

Session 的实现方式,主要有两种:

  • 使用 Cookie 来实现

  • 使用 url 回写来实现

6.3 区别

  • Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上
  • Session 相对于 Cookie 更安全
  • 若考虑减轻服务器负担,应当使用 Cookie

六、HTTPS 简介

在这里插入图片描述
在 HTTP 下面,加入了一个 SSL 层,从而具有了保护交换数据隐私、完整性、提供对网站服务器身份认证的功能。
简单来说,HTTPS 就是安全版的 HTTP.

1、SSL(Security Sockets Layer, 安全套接层)

  • 为网络通信提供安全及数据完整性的一种安全协议
  • 位于 TCP 与各应用层之间,是操作系统对外提供的 API, SSL3.0 后更名为 TLS
  • 是如何保证网络通信安全和数据完整性?身份认证,和数据加密
  • 采用身份验证数据加密保证网络通信的安全和数据的完整性

2、加密的方式

在前面学习 HTTP 的时候,通过抓包看了相关的协议,发现,不管是 GET 还是 POST, 客户端和服务端之间没有任何身份确认的过程,数据全部明文传输,客户端发出的请求很容易被黑客截获,如果此时黑客冒充服务器,则可返回任意信息给客户端而不被客户端察觉,这便是所谓的劫持。

如何给数据裹上一层外套?人们便想到了加密,加密主要有以下几种方式:

  • 对称加密: 加密和解密都使用同一个秘钥,相对于非对称加密,效率要高很多
  • 非对称加密:
    加密使用的秘钥和解密使用的秘钥是不相同的,分别称为:公钥、私钥。公钥和算法都是公开的,私钥是保密的。非对称算法性能较低,但是安全性超强。但由于加密特性,能加密的数据长度也是有限的
  • 哈希算法: 将任意长度的信息转换为固定长度的值,算法不可逆。就比如 MD5 算法
  • 数字签名:
    签名,便是在信息的后面加上一段内容,这些内容,是经过哈希后的值,可以证明信息是某个人发出/认同的,且没有被修改过。哈希值一般都会加密后,也就是签名之后,再和信息一起发送,以保证这个哈希值不被修改。

但是在实际的执行中,人们发现,仅使用其中的某种加密方式,并不能满足生产要求。
要么非对称加密性能过低,要么对称加密秘钥容易泄露,因此,HTTPS 使用的是证书配合各种加密手段的方式,打出一套相对安全的组合拳。

3、HTTPS 数据传输流程

HTTPS 在进行数据传输之前,会与网站服务器和 WEB 浏览器进行一次握手,在握手时,确定双方的加密密码信息,具体过程如下:

1.浏览器将支持的加密算法信息发送给服务器;
2.服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器;
3.浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器;
4.服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器;
5.浏览器解密响应消息,并对消息进行验证,之后进行加密交互数据。

4、HTTP 和 HTTPS 的区别

  • HTTPS 需要到 CA 机构申请证书,需要一定的费用,HTTP 不需要
  • HTTP 是超文本传输协议,信息明文传输;而 HTTPS 则是具有安全性的 SSL 加密传输协议,因此是密文传输
  • 使用完全不同的连接方式。HTTPS 默认使用 443 端口,HTTP 默认使用 80 端口
  • HTTP 是无状态的,SSL 是有状态的,因此可以理解为:HTTPS = HTTP + 加密 + 认证 + 完整性保护

5、HTTPS 真的很安全吗?

那倒未必。
由于用户习惯,通常准备访问某个网站时,在浏览器中,只会输入一个域名,比如,访问百度,就只会输入:www.baidu.com,不会在域名前面加上 http:// 或 https://,都是由浏览器自动填充。
当前所有浏览器默认填充都是 http://,一般情况,网站管理员会采用 301、302 跳转的方式由 HTTP 跳转到 HTTPS. 但是在这个过程中,会使用到 HTTP, 因此在这一步容易发生劫持。

这个时候,可以使用 HSTS(HTTP Strict Transport Security) 优化,即:HTTP 严格传输安全。
HSTS 目前正在推行中,并未成为主流。

七、Socket 简介

我们知道,两个进程如果需要进行通信,最基本的前提,是能唯一的标识一个进程。
在本地进程通信中,可以使用 PID 来唯一标识一个进程。但在网络中,就要另辟蹊径了。
**IP 层的 IP 地址,可以唯一标识主机,而 TCP 协议和端口号,可以标识主机中的一个进程。**这样就可以利用 IP 地址 + 协议 + 端口号,去标识网络中的一个进程。能够唯一标识网络中的一个进程后,它们就可以利用 Socket 进行通信。

1、什么是 Socket?

Socket 跟 TCP/IP 协议没有必然的联系,Socket 是对 TCP/IP 协议的抽象,是操作系统对外开放的接口:
在这里插入图片描述
Socket 编程接口在设计之初,就希望能适应其他的网络协议,所以,Socket 的出现,只是使得程序员更方便的使用 TCP/IP 协议栈而已,是对 TCP/IP 协议的抽象,从而形成了我们知道的最基本的函数接口,比如:create、listen 等,Socket 起源于 Unix, 而 Unix 是遵从『一切皆文件』的哲学,Socket 是基于一种:从打开、到读和写、再到关闭的这种模式去实现的。服务器和客户端各自维护一个文件,在建立连接打开后,可以向自己文件写入内容,供对方读取,或者读取对方的内容。
在通信结束时,就会关闭文件。

2、Socket 通信流程

前面说过,Socket 是基于:从打开、到读和写、再到关闭的这种模式去实现的,这里以使用 TCP 协议通信的 Socket 为例,其通信流程如下:
在这里插入图片描述
无论什么编程语言,Java 也好,C++ 也罢,使用 Socket 的流程,基本和上图是相同的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值