HTTP协议和TCP协议

HTTP协议

什么是HTTP

HTTP协议规定了浏览器怎样向万维网服务请求万维网文档,以及服务器怎样把文档传送给浏览器。在服务器和浏览器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议HTTP。

HTTP规定在HTTP客户和HTTP服务器之间的每次交互,都由一个ASCII码串构成的请求和一个类似的通用因特网邮件扩充,即“类MIME(MIME-like)”的响应组成。HTTP报文通常都使用TCP连接传送。

当在地址栏输入www.baidu.com的时候会发生是什么

1、DNS解析地址

2、找到相应的服务器

3、TCP的三次握手建立TCP连接

4、找到入口文件

5、解析入口文件

6、TCP的四次挥手

7、返回资源页面

HTTP使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP协议本身是无连接的。也就是说,HTTP虽然使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。

HTTP协议是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面的时候,服务器的响应与第一次被访问的时候一样,但是服务器并不知道你曾经访问过这个页面,也不记得你曾经访问过多少次。HTTP的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。

HTTP报文结构

HTTP有两类报文:

  请求报文——从客户向服务器发送请求报文

  响应报文——从服务器到客户的回答

由于HTTP是面向文本的,因此在报文中的每一个字段都是一些ASCII码串,因而各个字段的长度都是不确定的。

HTTP请求报文和响应报文都是由三个部分组成。这两种报文格式的区别就是开始行不同。

  1、开始行,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行,在响应报文中的开始行叫做状态行。

  2、首部行,用来说明浏览器、服务器或报文主体的一些信息。

  3、实体主体,在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

 请求报文:

  请求报文的第一行“请求行”只有三个内容:方法、请求资源的URL、HTTP的版本

    请求报文的方法

    

 响应报文:

  响应报文的第一行就是状态行,状态行包括三项内容:HTTP的版本、状态码、解释状态码的简单短语。

  状态码都是三位数字,分为5大类共33种

    1xx 表示通知信息的,如果请求收到了或正在进行处理

    2xx 表示成功,如接受或知道了

    3xx 表示重定向,如要完成请求还必须采取进一步的行动

    4xx 表示客户的差错,如请求中有错误的语法或不能完成

    5xx 表示服务器的差错,如服务器失效无法完成请求

 

TCP协议

TCP的主要特点

1、TCP是面向连接的传输层协议。也就是说应用程序在使用TCP协议之前,必须先建立TCP连接

2、每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)

3、TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达

4、TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能够返送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

5、面向字节流。TCP中的流指的是流入到进程或者从进程流出的字节序列。

建立一个TCP需要三步

1:客户端向服务端发出了请求连接请求报文, 首部中的同部位SYN=1,同时选择一个厨师序号seq = x。这时,客户端进入SYN-SENT(同步已发送)状态

2:服务端收到请求报文后,如果同意建立连接,则向客户端发送确认。在确认报文中SYN和ACK都置1,确认号是 ack = x + 1,自己选择一个初始序号seq = y,服务器进入SYN-RCVD(同步收到)状态

3:客户端收到服务端确认后,还要想服务端给出确认。确认报文段的ACK置1,确认号2 ack = y + 1,自己的序号 seq = x + 1。这是TCP的连接已建立,客户端进入ESTABLISHED(已建立连接)状态。

当服务端收到客户端的确认后,也进入ESTABLISHED状态

为什么客户端还要在发送一次确认呢?

这是为了防止已失效的链接请求报文突然又传到了服务端。因而产生错误

“已失效的连接请求报文”是这样产生的:

  客户端发出了第一个连接请求,由于网络等原因导致长时间滞留但是没有丢失,以致延误到连接释放以后的某个时间才到达服务端。按理说这应该是一个早就失效的报文段,但是服务端收到这个失效的报文段后,他不知道你是失效的报文噻,所以就会误以为客户端有发来了一个请求,于是就向客户端发出了确认报文同意连接。假设我们没有第三次的握手,那岂不是又建立了一个连接。

但是我客户端并没有发出建立连接的请求啊,所以我就不搭理服务器,不给你发送数据。但是服务器以为新的连接已经建立好了,等着你客户端发来数据他就一直等啊等啊等啊,确怎么也等不到。这样就会导致服务器的许多资源就这么浪费了。

参用了三次握手的办法可以防止上述现象的发生,就如刚才的情况,服务器收不到客户端的确认就知道客户端没有要求建立连接。

 

我理解的区别

TCP是传输层协议,定义数据传输和连接方式的规范。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

HTTP 超文本传送协议(Hypertext Transfer Protocol )是应用层协议,定义的是传输数据的内容的规范。

HTTP协议中的数据是利用TCP协议传输的,特点是客户端发送的每次请求都需要服务器回送响应,它是TCP协议族中的一种,默认使用 TCP 80端口。

好比网络是路,TCP是跑在路上的车,HTTP是车上的人。每个网站内容不一样,就像车上的每个人有不同的故事一样。

转载于:https://www.cnblogs.com/mzsh95/p/10697384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值