http协议详解

本文详细介绍了HTTP协议的特点,包括基于请求/响应模型、简单快速、数据类型灵活、无连接和无状态等。无连接性意味着每次连接只处理一个请求,而无状态则指服务器不保存客户端的事务状态。此外,还探讨了HTTP的短连接与长连接,并解释了Cookie和Session如何在无状态环境中维护会话。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​ http协议是一种超文本传输协议,用于客户端和服务器的一种请求应答标准。设计http协议的最初目的是为了提供一种发布和接收html页面的方法,通过http或者https协议请求的数据使用url来标识。

1、http协议特点

  • (1)基于请求/响应模型的客户端服务器模型。
  • (2)简单快速:客户端请求服务端只需要指定请求方法+请求路径,由于http协议简单,使得http服务器程序规模较小,因而传输速度很快。
  • (3)数据传输类型灵活:http允许传输任意类型的数据对象。传输的数据对象类型使用“Content-Type”来指定
  • (4)无连接:无连接是指每次http连接只处理一个请求,服务端处理完客户端请求并收到客户端的应答之后,就断开连接。这样做的主要目的是服务端可能需要服务成千上万的客户端,若所有客户端都保持着连接不释放,会影响服务端对其他客户端的服务。设计者最初的目的是请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端
  • (5)无状态:无状态指服务器对每个客户端请求处理是独立的,服务器对事务处理没有记忆能力,服务器不知道客户端是什么状态;比如客户端向服务器发送请求之后,服务器响应服务端并返回客户端需要的数据,发送完之后服务端不会记录任何信息。
  • (6)http协议默认端口为80.

2、http无连接、短连接与长连接

​ 由于http需要保证数据的可靠性传输,所以http底层变采用可靠的传输层协议, Http协议底层大多使用TCP作为传输层协议。http没有限制只能使用TCP作为传输层协议,任何可以保证可靠传输的传输层协议都可以作为http的底层协议。

​ http的无连接特性指的是每个http连接只能处理一个请求,当服务器响应完客户端的请求并收到客户端的响应之后将关闭连接。无连接并不是指字面意义上的没有连接,它实际上是有连接的,只不过是短链接而已。设计者最初的目的是请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端

http是无连接的是在应用层协议的角度看是无连接的。

http协议的长连接和短连接,实质上是TCP协议的长连接和短连接,但是在http应用层协议来看还是无连接的

​ 在使用http短链接的场景中,客户端向服务端发起一个请求,此时客户端和服务端之间建立一条TCP连接,http协议包体在这条TCP连接通道上传输,当服务端响应请求完毕并且收到客户端的回应的时候,TCP连接断开,客户端下次请求的时候需要重新建立TCP连接。

​ 在使用http长连接的场景中,客户端向服务端发起一个请求,此时客户端和服务端之间建立一条TCP连接,http协议包可以在这条TCP连接通道上传输,当服务端响应请求完毕并收到客户端回应的时候,TCP连接依然保持建立;此时服务端就一直等待客户端再次请求数据,若此时客户端已经消失而未断开连接,则此时服务器上就会保留一个半开放的连接,此时服务器会在一定时间内检测当前TCP连接上没有数据过来而主动断开连接,否则服务器资源可能被消耗殆尽。

  • HTTP/0.9:http 0.9版本是1991年发布的,这个时候的http只支持短链接,也就是客户端每次向服务器请求数据都必须重新创建一个连接,请求完毕连接被断开。

  • HTTP/1.0:1996年发布,默认使用短链接,提出了长连接(持久连接)的概念,并提供简单支持

  • HTTP/1.1:1999年发布,默认使用长连接。使用长连接的http请求在请求头会添加

    Connection:keep-alive
    

目前HTTP/1.1的长连接有个很大的弊端:在持久连接下一个连接中的请求是串行的,如果某个请求出现网络阻塞等问题,会导致同一条连接上的后续请求被阻塞。目前提到的解决方案就是:

​ 1、使用pipeline的方式,客户端可以不需要等待服务端的响应就可以发送下一个请求,服务端返回数据保证与客户端的请求顺序一致;但是服务端的返回还是串行的。

​ 2、采用多路复用技术,非阻塞的方式。

Http的报问结构请阅读另外一篇博客:http报文

3、http无状态详解

3.1无状态解释

​ http协议是无状态的,这句话的含义是指客户端和服务端之间的请求是互相独立的。这里的状态不仅包括不同URL之间的访问关系,还有对URL访问的数据记录,都是没有关系的。

​ 但是大多数的应用场景都需要有状态的场景,比如系统需要记录你的喜好给你推荐商品等等。

3.2 cookie与session

​ 在一些应用中,比如购物网站,用户浏览购物网站中的不同URL,网站服务器需要获知这一系列的行为都是当前你这个用户在操作,如你向购物车加入了一件商品,你收藏了一个商品等。

​ 最开始http解决这个问题的方案是:当client访问Server的时候,Server在返回的数据中嵌入Token数据;然后client再次访问Server的时候,client请求将上次server返回的token携带到隐藏的表单或者直接放到URL中,将token发送给Server,这个时候Server就知道这次访问的用户和上一个就是同一个用户了。

​ 因为token直接放到网页或者URL中太容易出错,并且写起来太复杂,后来引入了cookie和session的概念。

3.2.1 cookie详解

(1)Cookie本质

​ cookie本质上是HTTP请求头中的一小段内容;它是服务器发送到用户浏览器并保存在本地的一小块数据,当client再次请求Server的时候,cookie将被携带到Header中发送到服务端。

(2)Cookie的作用:

- 识别用户的身份:该作用需要和Session配合使用,client向Server请求数据,Server除了正常需要返回的数据以外,生成一个ID(uid=123)给客户端,客户端收到后将该串数据保留到本地cookie中,下次client请求这个域名的时候,再带着这段cookie到Server,这样Server就能知道client是谁了
- 记录用户操作历史:前端js可以通过修改cookie内容来记录用户在这个域名下的操作记录。

(3)Cookie在客户端与服务端交互过程中的使用

1、产生cookie:client第一次访问Server,Server生成一个cookie并返回给client

2、保存cookie:client收到cookie之后会将cookie保存在本地,并给cookie一个有效期,超过有效期,cookie就失效了

3、传递cookie:client再次访问Server的时候,会在请求头中带上cookie,将cookie传递到Server

4、解析cookie:服务端取到cookie之后解析cookie,并返回响应的信息给client。

在 cookie 没有失效之前,cookie 的使用都是围绕2,3,4三部分来进行的,第1步一般只需要进行一次。

(4)cookie在使用中存在的问题

1、cookie是基于浏览器的本地存储,跨浏览器cookie不通用

2、cookie的存储有大小限制,一般为4k左右

3、cookie可以被用户手动修改,有安全风险

4、cookie是有有效期的,默认有效时间是20分钟,可以通过后端强制设置有效期。

5、cookie有同源策略:在请求qq.com的时候只会带上qq.com的cookie,而不会带上Baidu.com的cookie,而访问wx.qq.com的时候既会带上qq.com的cookie也会带上wx.qq.com的cookie。

6、cookie保存是明文保存,可以被客户端任意修改有泄漏风险。

3.2.2 Session详解

(1)Session本质:

​ Session本质上是服务端保存的一段数据,在cookie的基础上,可以通过cookie和Session配合使用来识别网络用户。对于不同的语言Session 的保存方式不同。

​ Java:内存

​ PHP:磁盘

​ NodeJS:内存

(2)Session的作用:

​ Session的作用就是用来保存Server与客户端会话之间的上下文信息,以及该客户端ID对应的一些信息。它是基于Cookie实现的,生成的SessionID将以cookie的形式发送到客户端并被保存。

(3)Session在客户端与服务端交互中的使用:

1、产生SessionID:Client第一次请求Server,服务端生成一个随机数,叫做SessionID,Server将该SessionID放在响应头中,以cookie的形式返回给client.

2、保存SessionID:Server将要保存的数据保存在相对应的Session下,并将SessionID保存在Server端特定的位置(内存或者磁盘),数据结构一般使用Hash表。

3、使用Session:client再次访问Server的时候,它将SessionID带到请求头的cookie中发送给Server;Server读取到请求头中的SessionID,并根据SessionID从保存Session的hash表中找到对应的内容返回给client。

(3)Session与Cookie的区别

1、Session存储在服务端,cookie存储在服务端

2、Session无法被用户查看和修改,而cookie可以

3、Session和Cookie的存储容量不同

4、SessionID存储在客户端的Cookie中,所以Session本质上是基于Cookie的一种存储方式。

参考博客:
https://blog.youkuaiyun.com/tennysonsky/article/details/44562435
https://www.cnblogs.com/bellkosmos/p/5237146.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值