1、HTTP的介绍
HTTP协议(超级文本传输协议)是用于从WWW服务器传输超级文本到本地浏览器的传输协议。
2、计算机之间相互通信的过程
实际上,两台计算机之间的通信是通过TCP/IP协议实现的,TCP : Transmission Control Protocol 传输控制协议和IP: Internet Protocol 网际协议。
IP:实现计算机之间相互通信的协议
IP协议是计算机之间相互识别并通信的一种协议,每一台计算机都有一个固定的IP,作为在因特网上的唯一标识。IP协议负责在因特网上发送和接收数据。需要注意的是:IP协议仅仅是允许计算机之相互发送数据进行通信,但是并不去保证接收端接收到的数据次序是否和发送端发送的数据次序是一致的,并且也不能保证收到的数据内容是否有顺坏。为了解决这个问题,直接在IP协议的上面设计了传输控制协议即TCP协议,从而实现了数据检测功能。
TCP:实现应用程序之间相互通信的协议
TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者,传输过程要经IP路由器负责正确地寻址,然后在它们到达的时候重新组合它们。TCP协议会确保数据包以正确的次序到达,并且保证数据包中的内容没有发生变化,TCP协议作用在IP协议的上层,不同的应用程序通过不同的端口号进行唯一标识,当然有一些专门用途的服务的端口号是众所周知的。例如大多数电子邮件通信流出现在端口25上,用于wwww的HTTP通信流出现在80端口上。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信,占用两个计算机之间整个的通信线路。TCP 用于从应用程序到网络之间的数据传输控制。TCP 负责在数据传送之前将它们分割为 IP 包,并且在接收到数据的时候将它们重组。
TCP/IP协议就是TCP协议和IP协议两个协议在一起协同工作,两个协议之间有上下层次的关系。
3、TCP/IP协议参考模型
4、HTTP的工作过程
HTTP由请求和响应两部分构成,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response)之后,这个连接就被关闭了,在服务器端不保留连接的有关信息。HTTP遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。
一次HTTP操作称之为一次事务,具体的工作流程为:
1、地址解析
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.html
从该地址中解析出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:https
主机名:localhost.com
端口号:8080
对象路径:/index.html
在这一步,需要应用程序中的协议:域名系统DNS解析域名localhost.com,得到主机的IP地址。
2、封装HTTP请求数据包:
把第一部中得到的信息并结合本机自己的信息封装成一个HttP请求数据包。
3、封装成TCP数据包,并建立TCP连接(三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络发出建立连接的请求与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口
4、客户端发出请求
5、服务器端接收到请求并作出相应的应答
6、服务器端关闭 TCP连接
一般情况下,一旦Web服务器向浏览器发送了应答数据之后,它就要关闭TCP连接,但是如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是浏览器就可以继续通过相同的连接发送请求。保持连接不关闭节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
5、HTTP协议栈中各层的数据流
客户机发起一次请求的时候:
客户机会将请求封装成HTTP数据包–>封装成TCP数据包–>封装成IP数据包—>封装成数据帧—>硬件将帧数据转换成Bit流(二进制数据)—>最后通过物理硬件(网卡芯片)发送到指定地点。
服务器硬件首先收到Bit流—>然后转换成IP数据包—>通过IP协议解析IP数据包—>然后发现里面是TCP数据包—>就通过TCP协议解析TCP数据包—>接着发现是HTTP数据包,通过HTTP协议再解析HTTP数据包得到数据。
转载于:https://www.cnblogs.com/BaoZiY/p/11148022.html