了解web和网络基础
使用http协议访问web
- 客户端:通过发送请求获取服务器资源的 Web 浏览器等,都可称为客户端(client)。
- 服务器:存放网页资源的地方。
- HTTP协议:客户端与服务器之间的通信,使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,而协议是指通信双方对数据格式和处理规则的约定。
http协议的诞生
欧洲核子研究组织的蒂姆 • 伯纳斯 - 李博士提出了一种能让远隔两地的研究者们共享知识的设想。最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的 WWW(World Wide Web,万维网)。
WWW 这一名称,是 Web 浏览器当年用来浏览超文本的客户端应用程序时的名称。现在则 用来表示这一系列的集合,也可简称为 Web。
构建web的3种技术:
- HTML:超文本标记语言
- HTTP:文本传输协议
- URL:统一资源定位符
网络基础TCP/IP
通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集。
协议 不同的硬件、网络设备、操作系统之间进行通信时,需要基于相同的方法,遵守相同的规则,比如:如何探测到目标、哪一方先发起通信、使用什么语言等等,我们把这种规则称为协议。
TCP/IP 是互联网相关的各类协议族的总称,协议中存在各式各样的内容。从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及 Web 页面显示需要处理的步骤,等等。
TCP/IP 的分层管理
TCP/IP 协议族里重要的一点就是分层。TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。由于网络通信协议很复杂,层次化之后,每一层的设计就变得简单很多并且层次内部可以自由改动,层次之间只需要定义好交互的接口,实现了解耦。
TCP/IP协议族各层的作用:
- 应用层:应用层决定了向用户提供应用服务时通信的活动(HTTP、DNS、FTP等)。
- 传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输(TCP、UDP)。
- 网络层:网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了 通过怎样的传输路线把数据包传送给对方(IP)。
- 数据链路层:处理网络的硬件部分,包括控制操作系统、硬件的设备驱动、网络适配器、光纤等物理可见部分。
TCP/IP 通信传输流
利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。
IP、TCP 和 DNS
IP、TCP 和 DNS协议是TCP/IP 协议族中与HTTP密不可分的3个协议。
-
负责传输的 IP 协议
IP协议位于网络层,IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,需要知道接收方的 IP 地址和 MAC 地址(Media Access Control Address)。IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和MAC 地址进行配对,通过IP地址和MAC地址就可以找到接收方(具体的查找过程会用到ARP地址解析协议)。
-
确保可靠性的 TCP 协议
TCP 位于传输层,提供可靠的字节流服务。字节流是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。可靠的传输是指,TCP有一系列的机制(三次握手、差错控制、超时重传等)保证能够把数据准确可靠地传给对方。
TCP的3次握手,为了准确无误地将数据送达目标处,TCP 协议采用了三次握手策略。用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了SYN (同步标志)和ACK(确认标志)。
发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包, 代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。
- 负责域名解析的 DNS 服务
DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。
一次网络请求的处理过程
了解了和 HTTP 协议密不可分的 TCP/IP 协议族中的各种协议后,可以通过下图来了解下 IP 协议、TCP 协议和 DNS 服务在一次http请求的过程中各自发挥了哪些作用。
URI和URL
- URI:统一资源标识符,定义了用字符串标识某一互联网资源的格式,URI相当于是URL的父级。
- URL:统一资源定位符,网络资源的路径,在客户端通过URL可以访问到相应的网络资源。
简单的http协议
http协议用于客户端和服务端的通信,请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。相当于是问答的模式,由客户端发起请求,服务端响应请求,服务端只在接收到请求时做出响应。
请求和响应报文
-
请求报文
由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成。
-
响应报文
由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
无状态
HTTP 是一种不保存状态,即无状态(stateless)协议。使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。
常用的请求方法
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | GET | 请求指定的页面信息,并返回实体主体,参数会拼在URL中。 |
| 2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取响应报头 |
| 3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
| 4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
| 5 | DELETE | 请求服务器删除指定的页面。 |
| 6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
| 7 | OPTIONS | 方法用来查询针对请求 URI 指定的资源支持的方法。 |
| 8 | TRACE | TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法。 |
| 9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
持久连接
HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。以当年的通信情况来说,因为都是些容量很小的文本传输,所以即使这样也没有多大问题。可随着 HTTP 的普及,网页中开始包含大量图片,要发起很多次请求来获取图片资源。每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销。
为解决上述TCP重复连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接,也称为 HTTP keep-alive的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。一次连接即可以发送多次请求。
持久连接的好处
- 减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使 HTTP 请求和响应能够更早地结束,这样Web页面的显示速度也就相应提高了。
- 持久连接使得多数请求以管线化方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术可以让多个请求并行发送,不需要一个接一个地等待响应了。
Cookie状态管理
HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。实际业务中有些场景需要保存用户的状态,比如:登录后才可以访问的状态、购物车、用户历史记录等。为了记住客户端的状态,引入了 Cookie 技术。Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。 下面是cookie的原理:
- 没有 Cookie 信息状态下的请求
- 第 2 次以后(存有 Cookie 信息状态)的请求
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。