Java面试 HTTP协议
协议:
首先我们要先了解什么是协议,协议是指计算机通信网络中两台计算机通信网络中两台计算机之间进行通信必须遵守的规定或规则,超文本传输协议(也就是Http协议)就是一种通信协议,它允许超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
在说Htttp协议之前,你需要了解的还有OSI模型,TCP/IP协议。
OSI模型:
OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。
ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
OSI模型主要吧网络通信分为七层:这七层从下到上分别是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。各个层之间的作用如下图所示:
而我们知道,Http协议,FTP协议这些属于应用层的协议,而TCP,UDP协议这些是属于传输层的协议,网络层使用的是IP协议。那么下面我们来看一下TCP协议,因为Http协议的传输层使用的就是TCP协议。
TCP/IP协议
TCP/IP协议为传输控制协议/网际协议
TCP/IP协议的模型和OSI模型是有略微差别的,TCP/IP协议把物理层和数据链路层合并称为网络接口层,把上面会话层,表示层,应用层合并成为应用层,所以,TCP/IP 的结构模型为4层模型,从小到上分别是:网络接口层,网络层,传输层,应用层。如下图所示:
下面图片为两个模型以及其中各个层中的协议总图:、
网络通信的过程:
在网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。当源主机发出数据时,数据在源主机中从上层向下层传送。源主机中的应用进程先将数据交给应用层,应用层加上必要的控制信息就成了报文流,向下传给传输层。传输层将收到的数据单元加上本层的控制信息,形成报文段、数据报,再交给网际层。网际层加上本层的控制信息,形成IP数据报,传给网络接口层。网络接口层将网际层交下来的IP数据报组装成帧,并以比特流的形式传给网络硬件(即物理层),数据就离开源主机。
通过网络传输,数据到达目的主机后,按照与源主机相反的过程,在目的主机中从下层向上层进行拆包传送。首先由网络接口层接收数据,依次剥离原来加上的控制信息,最后将源主机中的应用进程发送的数据交给目的主机的应用进程。
TCP/IP协议的基本传输单位是数据报(Datagram),TCP协议负责把数据分成若干个数据报,并给每个数据报加上报头,报头上有编号,以保证目的主机能将数据还原为原来的格式。IP协议在每个报头上再加上接收端主机IP地址,这样数据能找到自己要去的地方。如果传输过程中出现数据失真、数据丢失等情况,TCP协议会自动请求重新传输数据,并重组数据报。可以说,IP协议保证数据的传输,TCP协议保证数据传输的质量。
TCP/IP协议数据在传输时每通过一层就要在数据上加个报头,其中的数据供接收端同一层协议使用,而在接收端,每经过一层要把用过的报头去掉,这样可以保证传输数据的一致性。
Http协议:
由上面可知,HTTP协议是web应用层协议,他在传输层使用的是TCP协议。HTTP协议有两个版本,分别是HTTP1.0(非持久HTTP连接)和HTTP1.1(持久Http连接)。他们有什么区别呢?
HTTP1.0:HTTP1.0中使用的是非持久连接,每个TCP连接最多连接一个对象,首先浏览器收到服务器响应以后,会获得HTML文件,从而解析HTML文件中包含其他URL,每次传输一个对象后,TCP连接随之关闭。
往返时间(RTT):从客户端发起HTTP请求到服务器响应该HTTP请求的时间。
web流浏览器向服务器发送请求的时候会涉一个“三次握手”的过程。三次握手其实就是客户端和服务器为了建立TCP连接而互相发送三次数据包的过程:
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
HTTP1.1:HTTP1.1中使用持久连接,每个TCP连接可以传输多个对象。在建立TCP连接以后,服务器在发送响应以后,并不像HTTP1.0那样关闭TCP连接。后续的请求和响应报文仍然能在该TCP连接上传输。现在HTTP默认模式是使用流水线的持续连接。
现在用户访问网站,如淘宝,百度等等,都是输入他们的相应域名去访问。而不是通过ip地址去访问。当输入网址后,DNS服务器会帮助我们解析域名并帮我们访问IP地址,我们就可以成功访问到对应网页了。当用户在流浪其的地址栏中输入一个网址并回车访问时,HTTP处理就开始了。首先是浏览器也就是客户端向服务器的80端口(HTTP默认是80端口,HTTPS默认是443端口)建立一个TCP连接,然后就可以在这个TCP连接,然后就可以在这个TCP连接上进行请求和响应。
HTTP服务器不维护客户的先前状态信息(HTTP是无状态协议),也就是说,当你打开某个网页发生卡顿的情形时,你重新刷新了该网页,这时客户端将会重新请求服务器,而不是从上次卡顿的地方继续传输。
总结:
1.HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
2.HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
3.HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。
4.HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
5.HTTP默认的端口号为80,HTTPS的端口号为443。