HTTP协议详解

HTTP协议详解

HTTP协议HTTP是超文本传输协议,通常是浏览器(客户端)和服务器进行通信的应用层协议,它规定了浏览器向服务器发送的请求要按照一定的格式,服务器向浏览器返回的数据也要按照一定的格式。同时HTTP协议是无状态的。

无状态为什么说HTTP协议是无状态的呢?这里的无状态是什么意思呢?

HTTP的无状态是说每个HTTP请求都是互相独立的,服务端不会记住任何一个HTTP请求的状态信息,每个请求都得在这次请求过程中携带着所有的需要用的信息,不能指望着服务端会记住你。

同处于应用层的协议:SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,它是有状态的。因为在TCP建立连接后需要先发送HELO指令才可以发送MAIL FROM指令,想发送MAIL FROM指令则需先发送HELO指令,这是需要一个状态来指示当前可发送的SMTP协议中的指令。

会话: 客户端和服务端的一次完整的交互流程。往往伴随着一系列的请求,用户完成了某项需求为止。例如,用户从登录开始,浏览商品、下单、付款,在这段期间,客户端和服务端之间维持着一个会话。即便用户关闭了浏览器,只要 session id 还在有效期内(例如保存在 cookie 中且未过期),会话仍可能有效。当 session 过期(例如服务器端销毁 session 或 cookie 中的 session id 失效)时,会话才真正结束。

无状态的优点: 乍一看,我们可能会觉得无状态导致HTTP协议不能进行会话支持了,这是无状态的缺点,但其实这正是无状态的优点,我们可以使用其它(session、cookie等)机制来实现会话的保持,状态的保存。其它有状态协议(FTP、SSH)会将会话状态跟TCP连接绑定,如果连接一断开,那么会话也就结束了,这非常不稳定。而HTTP协议的会话支持需要通过其它手段,与连接无关,即使连接断开,也不会影响会话的保持,重新连接上就好了。

无状态的缺点: 因为服务端不记录http请求的状态,所以每个HTTP请求都需要携带大量多次重复的信息,例如cookies、Authentication等。这就会导致每次解析起来都会比其它协议复杂地多。

服务的有无状态: 注意我们需要区分协议的有无状态和服务的有无状态之间的区别。我们设计一个服务器来记录到来的HTTP请求数量,那么这个服务是有状态的,对不对?我们使用无状态的http协议去访问这个服务,这个服务器记录着到来的http请求数量。而请求本身是独立的,不受其它请求的影响。

消息结构请求报文请求报文由三部分组成:请求行、请求头、请求体。

请求行: 请求行中定义了请求方法,请求URL,HTTP协议及版本。

请求头: 请求头中以key-value形式定义了若干要向服务端提供的信息,常见的有Host(指定请求目标的服务器主机名和端口),User-Agent(客户端软件身份信息(浏览器、操作系统等)),Accept(告诉服务器客户端可接受的内容类型),Cookie(发送给服务器的Cookie数据)等。

请求体: 它将页面表单中的各个组件的值编码成以 param1=value1¶m2=value2 形式表示的键值对字符串,用于承载多个请求参数的数据。请求参数不仅可以通过报文体传递,也可以通过请求 URL 的形式传递,例如:/chapter15/user.html?param1=value1¶m2=value2。

响应报文响应报文也由三部分组成:响应行、响应头、响应体。

响应行: 响应行包括http协议及版本, 状态码及状态描述(200 OK、404 Not Found等)。

响应头: 响应头也是包含了一些key-value的键值对的数据,用于描述服务器和响应报文的属性。常见的有:Content-Type(返回内容的类型(html或者json)),Content-Length(响应体的长度),Server(服务器软件的信息,例如:nginx/1.18.0)等。

响应体: 响应体是真正承载返回数据内容的部分。可以返回各种形式的内容,常见的是HTML和json数据格式的,但同时也可以返回图片/音频/视频和纯文本或文件等。

短连接和长连接HTTP1.0版本默认是短连接的,就是没个HTTP请求都重新建立一个连接,请求结束之后连接也会断开。这就造成了每次都需要进行TCP三次握手和四次挥手,很耗费性能。可以使用keep-alive参数使得连接是长连接。

HTTP1.1版本默认就是带上keep-alive参数,也就是默认就是长连接的,多个http请求共用同一个连接,大大提高了效率。

HTTP与HTTPSHTTP(全称:HyperText Transfer Protocol,超文本传输协议)

HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议)

我们从名字也可以看出,HTTPS在HTTP协议的基础上更加地安全。传统的HTTP协议是http+tcp进行传输的,而https请求是http+ssl+tcp进行传输的。除了通信双方外,还会有一个第三方权威机构来颁发证书,服务端会先到这个权威机构注册证书,然后客户端和服务端建立连接的时候就会依据这个证书进行加密传输。保证了数据的安全性。

客户端进行三次握手和服务端建立连接客户端会发送一个Client Hello请求(包括Client Random(客户端随机数))然后服务端会把加密算法、证书、公钥、Server Random(服务器随机数)返回给客户端客户端验证证书合法性,并使用公钥加密预主密钥发送给服务端。服务端使用这边的私钥解密这个预主密钥,然后使用pre-master secret(预主密钥)、Client Random(客户端随机数、Server Random(服务器随机数)生成一个对称加密的会话密钥 ,之后就能进行对称加密地通信了。

相关推荐

果子狸价格分析
365bet体育滚球

果子狸价格分析

07-17 👁️‍🗨️ 9720
华硕笔记本和acer宏碁笔记本哪个质量好性价比高用过的高手帮忙
如何轻松找到路由器的WiFi密码?全攻略在这里!
mobile.365-588

如何轻松找到路由器的WiFi密码?全攻略在这里!

08-06 👁️‍🗨️ 9684
金眼彪施恩:绰号背后的故事与象征
mobile.365-588

金眼彪施恩:绰号背后的故事与象征

07-05 👁️‍🗨️ 4859
上传作品,轻松兑换VIP!50张即可获终身VIP会员!
mobile.365-588

上传作品,轻松兑换VIP!50张即可获终身VIP会员!

07-12 👁️‍🗨️ 8572
启悦胎压多少合适?
mobile.365-588

启悦胎压多少合适?

07-30 👁️‍🗨️ 478
《dnf》2023史诗之路位置介绍
365bet体育滚球

《dnf》2023史诗之路位置介绍

07-13 👁️‍🗨️ 4258
阴阳师勋章怎么刷 快速刷勋章指南
365bet信誉怎么样

阴阳师勋章怎么刷 快速刷勋章指南

08-04 👁️‍🗨️ 6453
成都长城宽带怎么样?用户评价及使用体验分析
365bet体育滚球

成都长城宽带怎么样?用户评价及使用体验分析

07-13 👁️‍🗨️ 4420