一、Http 入门

1、什么是Http协议?

Http是一个应用层的面向对象的协议,它是基于TCP协议的可靠传输,采用了客户端/服务器端模式,有客户端发起请求,服务端进行响应。

那么问题来了:TCP/IP协议是什么?三次握手是啥?包含了几层?总共把网络分为几层?

(1)TCP/IP协议

TCP/IP协议叫做传输控制/网际协议,它是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议。它包括上百个各种功能的协议,如:远程登录文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。

TCP/IP协议的基本传输单位是数据包(datagram),TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头(就像给一封信加上信封),包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式,IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方,如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输,并重新组包。总之,IP协议保证数据的传输,TCP协议保证数据传输的质量。

(2)三次握手

  1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
  2. TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始*** seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
  3. TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个*** seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
  4. TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的***seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
  5. 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了
  6. Http协议(一)

 思考:为什么TCP最后一段还要再确认一次?

一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

(3)TCP/IP协议包含了四层结构:

应用层、传输层、网络层、链路层

注意的是:数据在传输时,每通过一层就要在数据上加个包头,其中的数据供接收端同一层的协议使用。但是在接收端。每经过一层就要把使用过的包头去掉,这样是为了保证传输的数据格式保持完全一致。

 (4)OSI总共把网络分为七层

由下向上:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

2、再认识下Http

Http是一种无状态协议,就是不保存状态,它不对之前发生过的请求和响应的状态进行管理。

每当有新的请求发送时,就会有对应的新的响应产生。协议本身并不保存之前一切的请求或响应报文的信息。(目的:是为了更快的处理大量的事务,确保协议的可伸缩性而设计的。)。

为了解决保持状态的一些问题,引入了Cookie技术:

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当客户端下次再往服务器端发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去比对服务器上的记录,最后得到之前的状态信息。

二、Http中的方法

(1)GET:获取资源
GET方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容。
(2)POST:传输实体主体
POST方法用来传输实体的主体。虽然GET方法也可以传输,但一般不用GET方法进行传输。虽说POST的功能与GET很相似,但POST的主要目的并不是获取响应的主体内容。
(3)HEAD:获得报文首部
HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性和资源更新的日期时间等。
(4)PUT:传输文件
PUT方法用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。但是由于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,所以一般不使用该方法。
(5)DELETE:删除文件
DELETE方法用来删除文件。DELETE方法按请求URI删除指定的资源。但是和PUT一样不带验证机制,所以一般也不是用该方法。
(6)OPTIONS:询问支持的方法
OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
(7)TRACE:追踪路径
TRACE方法时让Web服务器端将之前的请求通信环回给客户端的方法。
(8)CONNECT:要求用隧道协议连接代理
CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输安全层)协议把通信内容加密后经网络隧道传输。

更多信息....loading中(本文仅自己面试总结的一些东西)

相关文章: