2
本文是在自己有一定的HTTP知识的基础上写的,所以不是零基础写起哦

一、认识 HTTP

1.1 HTTP概念

HTTP 超文本传输协议。

WEB 就是是同http协议作为一种规范来,完成从客户端到服务器的一系列运作的。而协议是指规则的约定。

WWW 的三个构建技术为: 1. HTML 超文本标记语言作为页面 2. HTTP 超文本传输协议作为文档传递的规范 3. 指定文档所在地的URL

1.2 HTTP的发展史

  1. HTTP 0.9 1990年问世,这时候它才刚刚出世,并没有被发布出去
  2. HTTP 1.0 它的正式公布是在1996年5月,版本命名为HTTP 1.0 虽然说这个版本是早期版本,但是目前仍旧使用的还是这个版本。
  3. HTTP 1.1 1997年发布,是目前最主流的一个版本了。
  4. HTTP 2.0 作为新的版本,它还在制定中,但是距离新版本问世,再到它能达到较高的覆盖率,还需要一段时间的呢

了解HTTP之前,我们务必需要先了解一下TCP/IP协议族.

我们通常所说的网络就是再TCP/IP的基础上运作的。而HTTP仅是作为TCP/IP的一个分支出现。

1.3 TCP/IP

那么TCP/IP是什么东东呢?

TCP/IP是互联网相关的各类协议的总称。

TCP/IP最主要的一点就是分层管理,分为四层: 传输层网络层数据链路层应用层。这样分层的好处是非常显著的,各自互补影响,他们只需要完成自己分工的那一部分任务就可以了,并不需要去管别的层所处理的任务。

TCP/IP协议族各层的作用:

应用层

应用层决定的是向用户提供应用服务时的活动。

在TCP/IP中预存了一些固定的应用服务。包括FPT (文件传输协议)、 DNS(域名系统)。http也是在应用层。

传输层

它提供处于网络链接中的两个计算机之间的数据传输。
存在有两个性质完全不同的协议: TCP(传输控制协议) 、 UDP(用户数据报协议)。

网络层

它处理的时网络上流通的数据包,数据包时网络传输的最小的单位,该层规定了应该通过怎样的一个 途径将数据包从一个计算机传到另一个计算机。 如果说在与对方的计算机之间存在有诸多的计算机或者是网络,那么该层将会选择一条传输路径。

链路层

主要解决的是链接网络的硬件部分,包括操作系统,硬件设备,NIC、以及光纤等物理可见的部分。

TCP/IP通信传输流

利用TCP/IP来进行网络通信时,会通过分层处理来与对方进行通信。

我们拿HTTP来分析讨论一下。

[ x ] 我们在应用层客户端发送一个要查看Web页面的一个HTTP请求
[ x ] 通过传输层,将接受到的HTTP请求报文进行拆分,并在各个报文上打上标记序号以及端口号,将其发送给网络层。
[ x ] 在网络层,通过IP协议增加请求目的地的MAC地址给链路层。
[ x ] 到此,发往服务器的请求就准备完毕了。

[ x ] 服务端的接受时按照相反的顺序进行的,首先是服务器的链路层接收,接着逐层往上传,一直到达应用层,这样就得到了发送来的HTTP请求。

  • 在发送端,每经过一个层,就会增加一个首部信息,在接收端,每经过一个层,就会减少一个首部。这种把数据包装起来的方法称为是封装

1.4 与HTTP相关的一些协议

负责传输的IP协议

IP协议属于网络层,这里所说的IP协议可能会让一些人将IPIP地址混淆。IP其实是一种协议的名称。

IP协议的作用主要是把各种数据包传给对方,而要保证确实的传给对方,那么就需要满足各类条件,其中最重要的是IP地址MAC地址

标识网络中的一台计算机,一般至少有三种方法,最常用的是域名地址、IP地址和MAC地址,分别对应应用层、网络层、物理层。网络管理一般就是在网络层针对IP地址进行管理,但由于一台计算机的IP地址可以由用户自行设定,管理起来相对困难,MAC地址一般不可更改,所以把IP地址同MAC地址组合到一起管理就成为常见的管理方式。

通信双方一般不在同一个局域网之内,通常是要经过多台计算机以及互联网中的中转设备来通信的。在通信中主要是通过MAC地址来实现中转。而ARP协议是一种用于解析IP反查MAC的协议。

我们最终因该了解的是无论互联网中的哪台计算机、哪个网络设备都无法了解互联网中的细节,因此在通信过程中是通过不断的中转,来到达目的地的,中转的方向通过IP地址MAC地址的网段来寻找。

图片描述

确保可靠性的TCP协议

TCP属于传输层。提供的是可靠的字节流服务

在传输打断的请求数据的时候,TCP会将其拆分成报文段为单位的数据包,而可靠的数据传输服务是指,TCP能够保证将完整的数据传送给对方哦。

为了准确无误的传送过去,TCP链接采用了三次握手的策略。

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。

第一次握手:(SYN=1,seq = x)

客户端发送一个标志即SYN=1的包,告诉客户端要连接了,同时把打算连接的端口以及初始化序列x保存在包头的seq(Sequence Number)发送给服务器。客户端进入了 SYN_SEND 状态.

第二次握手: (SYN = 1; ACK = 1; seq = y; ACKNUM = x+1;)

服务端返回认可包ACK,即ACK = 1; SYN = 1; 返回服务器自己的序列号 seq = y ; 以及确认序列号为 ACKnum = x+1 ;服务端进入SYN_RCVD状态。

第三次握手:(ACK = 1; ACKnum = y + 1);

客户端再次发送确认包ACK = 1; SYN = 0; 确认序列号为 y + 1;。之后客户端服务端都进入了ESTABLISHED状态。 至此TCP握手结束。

图片描述

  • 三次握手之后还有这四次挥手,之后会细细学习。

负责域名解析的DNS服务

DNS协议同样属于应用层。它提供的是域名到IP地址之间的解析服务。

计算机可以被赋予IP地址,也可以被赋予主机名和域名。比如: www.gcsn.site

用户通常使用的是主机名和域名来直接访问计算机,很少会直接用IP地址来访问,一是因为很难记忆,还不符合人们的习惯。

DNS协议提供的是通过域名查找IP地址,或者逆向从IP地址反查域名的服务。

图片描述

各种协议与HTTP的关系

图片描述

我们以一个web页面的请求为例子来贯穿一下整个流程吧。

  • 确认需求: 请求http://hackr.jp/xss/页面
  • 客户端访问DNS服务器,告诉我hackr.jp的IP地址,得到地址后
  • HTTP协议:生成针对目标的HTTP请求报文(请给我http://hackr.jp/xss/的页面资源)。
  • TCP协议: 将请求报文,分割成报文段,按照序号进行排列,然后将每个报文段都可靠的传给对方
  • IP协议: 搜索对方的地址,不断的进行中转传输
  • 服务器的TCP协议,获取传过来的报文段,对其进行组合排序,并重组请求报文。
  • HTTP协议对其进行分析,这时候服务器知道了,这个用户是想访问xss下的资源。
  • 然后将资源传回去(过程与上诉相反)。

1.5 URL 与 URI 的区别

URL是统一资源定位符,URI是统一资源标识符。

u —— uniform 统一的格式
r —— Resource 资源,任何东西可为资源
I —— Identifier 可标识的

URI是用一串字符串表示互联网的资源,URL是表示资源的位置。所以URL是URI的子集。

绝对URI的格式:

http://user:pass@www.example.com:80/dir/index.html?uid=1#ch2

从左往右依次是: 协议名、用户名、密码、服务器地址、端口、带层次的文件路径、查询字符串、片段标识符

RFCHTTP协议的技术标准。


未完待续,第一篇告一段落了,之后会有更多篇

Meils
1.6k 声望157 粉丝

前端开发实践者