HTTP协议
Posted 独行的喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议相关的知识,希望对你有一定的参考价值。
HTTP协议
1.什么是HTTP协议
1.1HTTP的概念
来自百度百科的解释: 超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
导言:在互联网上,我们经常会打开各种各样的网页,这些网页资源包括了文字,图片以及视频等等数据,而这些网页数据资源是如何从服务器传送到我们面前的呢?
其实我们请求的网页资源正是通过HTTP协议进行传输的,HTTP协议又是依托于TCP协议存在的,HTTP通过调用TCP协议去建立两个HTTP进程之间的连接进行通信。我们打开一个网页是,就会向网页所在的服务器发送一次http请求,而服务器也会通过http响应消息将我们想要看到的网页发送过来。
1.2HTTP的特点
-
1.支持客户/服务器模式,即C/S模式。
-
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
-
4.无连接:每次请求一次,释放一次连接。所以无连接表示每次连接只能处理一个请求。优点就是节省传输时间,实现简单。我们有时称这种无连接为短连接。对应的就有了长链接,长连接专门解决效率问题。当建立好了一个连接之后,可以多次请求。但是缺点就是容易造成占用资源不释放的问题。当HTTP协议头部中字段Connection:keep-alive表示支持长链接。
-
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
特点这里直接照搬了博文:
https://blog.csdn.net/weixin_41318405/article/details/88778197
2.请求网页的格式(URL)
URL(Uniform Resource Locator)同一资源定位符,对可以从互联网上得到的资源位置和访问方法的一种简洁表示,是互联网上标准资源的地址。
我们访问网页,请求网页通常是使用URL的形式进行的,我们可以在网址栏中输入某一网页资源的URL进行访问,例如
这是一个标准的URL,通过这个URL我们就可以访问到CSDN的网页。
protocol: // hostname [:port] / path [;parameters][?query]
URL的组成部分:
- 协议部分(protocol):指定使用的传输协议,最常用的是http协议和https协议
- 主机名(hostname):是指存放资源的服务器的域名或者IP地址。
- 端口号(port):如果不加指定端口号,http协议默认打开的是80端口,而https默认打卡的是443端口,每一个端口号对应着服务器上的一个应用进程
- 路径(path):表示所请求主机上的一个文件地址。
- 参数(parameters):用于指定特殊参数的可选项。
- 查询(query):可选项,用于给动态网页传递参数,可有多个参数,用&符号隔开,参数以键值对的形式表示,参数名和值用=连接。
在上面这个URL中,表示我们是通过HTTPS协议来请求对象的,所请求的目的服务器域名地址为:blog.csdn.net,所请求的文件路径为/nav/db 并且向服务器传递了spm这样一个参数,参数的值为1000.2115.3001.4125
3.HTTP的连接类型
3.1非持久性连接
非持久性连接(Nonpersistent HTTP)出现在HTTP 早期1.0的版本中,每个TCP连接只允许传输一个对象。
非持久性连接的过程:
以包含10张图片的https://editor.csdn.net/nav/db请求的网页过程举例:
1.HTTP客户端向域名指向的服务器上的HTTP服务进程发起TCP连接请求(三次握手)。
2.HTTP服务器在80端口等待到TCP连接请求后,接受连接并通知客户端。
3.HTTP客户端将HTTP请求消息(包含URL)地址通过TCP连接的套接字(socket)发出,消息中所包含的URL表明客户端所请求的资源对象。
4.HTTP服务器收到请求消息后,对请求消息进行解析,然后将所请求的资源对象放入响应消息,通过套接字发送给客户端。
5.HTTP服务器关闭TCP连接(只传输一个对象)
6.HTTP客户端收到响应消息,解析收到的html文件,并将html显示出来,同时发现html中由10个指向jpeg对象的超链接
7.为每个ipeg对象重复以上步骤,获取每一个图片对象
响应时间分析
RRT(Round Trip Time) :从客户端发送一个很小的数据报到服务器并返回所经历的时间(往返时间)
响应时间(Response time):
- 发起建立TCP连接:1个RTT
- 发送http请求消息到接收到http响应消息的前几个字节:1个RTT
- 响应消息中所包含的文件/对象的传输时间
响应时间=2RTT+文件传输时间
非持久性连接存在的问题
- 响应时间长:每个对象都需要两个RTT时间建立连接
- 资源开销大:操作系统需要为每个TCP连接开销资源,而TCP连接量很大
3.2持久性连接
持久性连接(Persistent HTTP)出现在HTTP 新的1.1的版本中,每个TCP连接允许传输多个对象。
持久性连接是非持久性连接的改进,意在减小非持久性连接造成的大数量TCP连接的开销。在持久性连接中,服务端发送响应消息后,保持TCP连接的开打,后续的HTTP消息可以通过这个连接继续发送。
无流水的持久性连接
- 客户端只有在收到前一个响应后才发送新的请求
- 每个对象的传输耗费一个RTT的时间
流水机制的持久性连接
- HTTP1.1的默认选项
- 客户端只要遇到一个被引用对象就尽快发出请求
- 理想情况下,收到的所有被引用对象总共只消耗一个RTT的时间
在这种持久性连接的机制下:第一个被请求的网页耗费2个RTT的时间,而后该网页中引用的所有对象将会在接下来的1个RTT的时间内被全部收到。一个网页包括所有引用对象的总响应则为3个RTT+文件传输时间
4.HTTP的连接过程
上面已经介绍了HTTP协议建立连接的大致过程,下面再对连接的建立过程进一步总结:
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列8个步骤:
-
1.域名解析
-
2.发起TCP的3次握手
-
3.Web浏览器向Web服务器发送http请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。 -
4.Web浏览器发送http请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。 -
5.Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。 -
6.Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。 -
7.Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。 -
8.Web服务器关闭TCP连接
HTTP1.0的版本下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
HTTP1.1的版本下,默认不会关闭该TCP连接,直到所有的引用对象都被请求和传送完毕为止。
5.HTTP消息的格式
5.1HTTP请求消息的格式
HTTP请求消息的格式大体上可分为三个部分:请求行,请求头,请求数据
下面是从百度找来的一个具体的http请求消息的数据形式:
根据上图,我们主要介绍以下几个比较关键的参数:
- 请求方法:表明对指定资源的不同操作方式,一共有八种,详情可见下面表格
- URL:统一资源定位符,指定请求的资源位置。
- 协议版本:规定使用的http协议版本,如http1.0或http1.1
- Host:所请求连接的目标主机地址和端口号
- Connection:指定连接的类型keep-alive表示持久性连接
- User-Agent:客户端发起请求的浏览器的类型和版本信息
- Referer:当前页面是从哪个页面跳转过来的
- Accept:指定客户端能够接收的内容类型
- Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。
- Accept-Charset:浏览器可以接受的字符编码集。
- Accept-Language:浏览器可接受的语言。
- Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能
5.2HTTP响应消息的格式
HTTP响应报文是由状态行,响应头部,空行,报文主体这几部分组成的:
下面是一个HTTP响应消息:
简要介绍以下这个http响应消息中的一些字段:
- 状态码:表示服务器这边的响应状态
- Date:web服务器生成响应消息的时间
- Server:服务器软件类型
- Last-Modified:网页的上次修改时间
- Content-Length:报文主体的长度
- Content-Type:响应数据的格式
常见http状态码:
200 - ok:请求成功
301 - Moved Permanently:资源(网页等)被永久转移到其它URL
404 - Not Found:请求的资源(网页等)不存在
500 - Inter Server Error:内部服务器错误
别的大佬的更详细的状态码博文:https://blog.csdn.net/banana960531/article/details/85621865
参考博文:https://www.cnblogs.com/curo0119/p/8963545.html
以上是关于HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 之 HTTP协议(HTTP协议概述HTTP消息缓存控制相关头部Cookie相关头部)