本文是在自己有一定的HTTP知识的基础上写的,所以不是零基础写起哦
一、认识 HTTP
1.1 HTTP概念
HTTP
超文本传输协议。
WEB
就是是同http
协议作为一种规范来,完成从客户端到服务器的一系列运作的。而协议是指规则的约定。
WWW
的三个构建技术为: 1. HTML
超文本标记语言作为页面 2. HTTP
超文本传输协议作为文档传递的规范 3. 指定文档所在地的URL
1.2 HTTP的发展史
- HTTP 0.9 1990年问世,这时候它才刚刚出世,并没有被发布出去
- HTTP 1.0 它的正式公布是在1996年5月,版本命名为HTTP 1.0 虽然说这个版本是早期版本,但是目前仍旧使用的还是这个版本。
- HTTP 1.1 1997年发布,是目前最主流的一个版本了。
- 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协议可能会让一些人将IP
与IP地址
混淆。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
从左往右依次是: 协议名、用户名、密码、服务器地址、端口、带层次的文件路径、查询字符串、片段标识符
RFC
:HTTP协议
的技术标准。
未完待续,第一篇告一段落了,之后会有更多篇
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。