HTTP协议

  • 基本概念
  • GET和POST
  • cookie和session
  • HTTP长连接和短连接
  • 四次挥手断开连接
  • 一次url请求的完整过程

基本概念

HTTP协议是应用层协议,中文名称为超文本传输协议,用于WWW服务器传输超文本到本地浏览器的协议,由请求和相应构成。
请求响应模型:
HTTP协议永远是有客户端发生请求,由服务端进行响应。
基本的工作流程
a)首先客户端和服务端需要建立连接
b)客户端发送请求
c)服务端接受到请求后,给予响应
d)客户端收到响应后,显示到浏览器页面,然后断开连接
可见HTTP协议的特点是
a)无连接:每次连接只会处理一次请求,处理完成后,接受到客户端的应答后,断开连接,这样做的好处是,节省传输的时间
b)无状态,对于事务没有记忆能力
c)媒体独立,任何类型的数据都可以通过HTTP协议传输
HTTP协议的格式
HTTP请求:
HTTP协议
HTTP响应:
HTTP协议
HTTP常见的header
Host:客户端告诉服务器,所请求的资源是在主机的那个端口上
Content-Type:数据类型
Content-Length:Body长度
Cookie:用于在客户端存储少量的信息,通常用于实现session的功能

GET和POST

请求方法中最常见的是GET和POST
GET
HTTP协议
GET会将请求信息暴露在地址栏中
POST
HTTP协议
POST请求会将数据信息防止Body中
这是二者最大大区别,这样处理数据就导致了GET请求数据的长度受到url的约束,POST请求数据的长度收到Body空间大小的约束,再其次,将请求信息暴露在url中也是不安全的做法。

cookie和session

为了解决HTTP协议无状态的状况,引入了cookie和session这样的机制,一个常用的场景就是用户登陆
cookie:数据保存在客户端
session:数据保存在服务器端,是一个kv的形式
具体内容可以访问下面这篇博客
https://blog.csdn.net/duan1078774504/article/details/51912868

长连接和短连接

http的长连接和短链接本质上是tcp的长连接和短连接
长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
长连接和短链接的使用场景
长连接用于连接数不是很多,操作较为频繁,点对点的通讯。这样节省了三次握手的连接时间,数据库使用的就是长连接
像web网站这样的http服务使用的是短连接,因为访问量巨大的情况下使用长连接显然会占用很多的文件描述符,读服务端的资源太过于浪费,所以在面对用户不会频繁操作的情况下,使用短链接。
HTTP1.0默认使用的是短链接,HTTP1.1默认使用的是长连接
在长连接的场景下,如果服务端因为某些原因关闭,但连接并没有断开,此时处于半连接的状态,显然这对服务器端的资源是一种浪费,所以服务端会存在探测机制,就是keep-alive

四次挥手断开连接

TCP利用四次挥手的机制去断开连接
HTTP协议
TCP协议规定主动断开连接的一方要有2MSL的TIME_WAIT状态。
TIME_WAIT状态存在的原因
两倍报文段的最大生存时间理论上保证最后一个报文的可靠到达,和之前未接收到报文的到达。
如何避免TIME_WAIT状态
在高并发的场景下,会因为TIME_WAIT状态的存在,导致其他文件描述符无法绑定,可以使用setsockopt()函数设置socket文件描述符。SO_REUSEADDR为1,表示运行创建端口号相同但是ip地址不同的端口。

一次完整的url请求

大质过程是
域名解析(DNS)->建立连接(TCP三次握手)>发起HTTP请求(请求格式)->服务器响应(响应格式)->浏览器解析->渲染呈现