HTTP协议

一、HTTP 介绍

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
在这里插入图片描述
在TCP/IP协议参考模型的各层对应的协议如下图,其中HTTP是应用层的协议
在这里插入图片描述

二、HTTP 工作原理

  • HTTP协议工作于客户端-服务端架构上(C/S)。浏览器作为HTTP客户端通过URL(网址链接)向HTTP服务端即WEB服务器发送所有请求

  • Web服务器有:NginxApache服务器IIS服务器(Internet Information Services)等。

  • Web服务器根据接收到的请求后,向客户端发送响应信息

  • HTTP默认端口号为80,但是也可以改为8080或者其他端口。

三、HTTP的特点

  • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。(超时断开连接,减轻服务端压力)
  • HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。(文件类型统称,能够传输的类型丰富)
  • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。(TCP有记忆性,三次握手,可以解决HTTP的问题)

以下图表展示了HTTP协议通信流程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wASCpdkX-1627634744414)(assets/1561893004169.png)]

四、HTTP 消息结构

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。(连接只能1个,请求在链接的基础上可以有一到多个请求)

一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Nginx、Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
在这里插入图片描述

(1)客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

在这里插入图片描述
在这里插入图片描述

(2)服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jl9WtyNN-1627625049492)(assets/1561893177737.png)]

(3)实例

下面实例是一点典型的使用GET来传递数据的实例:

  • 客户端请求
Connected to www.testpm.cn (47.244.247.240) port 80 (#0)
> GET /hello.txt HTTP/1.1   # 请求方式与版本协议。
> User-Agent: curl/7.29.0   #用什么客户端访问
> Host: www.testpm.cn  #主机名,域名。主机和端口号,
> Accept: */*  #匹配什么文件类型,“*” 是通用匹配。匹配所有类型
  • 服务端响应
< HTTP/1.1 200 OK       #请求返回的状态码
< Server: nginx/1.16.0  #请求的服务和版本号
< Date: Thu, 04 Jul 2019 08:19:40 GMT
< Content-Type: text/plain #文本类型,有html,plain:普通文本
< Content-Length: 12
< Last-Modified: Thu, 04 Jul 2019 08:13:25 GMT
< Connection: keep-alive  #是否支持长连接
< ETag: "5d1db525-c"  #标识,每次访问如果与最开始的一样返回304否则校验不一致返回200
< Accept-Ranges: bytes
  • 输出结果
hello world

五、HTTP 请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

重点方法:

GET单纯获取数据(获取一个index.html页面)
POST上传/创建文件(会产生新的数据)
PUT保存数据(覆盖/更新文件、图片等,不会产生新的数据
DELETE删除

六、HTTP 状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx指示信息–表示请求已接收,继续处理
2xx成功 – 表示请求已被成功接收、理解、接受
3xx重定向 – 要完成请求必须进行更进一步的操作
4xx客户端错误 – 请求有语法错误或请求无法实现
5xx服务器端错误 – 服务器未能实现合法的请求
  • 常见状态码
200客户端请求成功
301永久重定向。搜索引擎将删除源地址,保留重定向地址
302临时重定向。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
304缓存文件并未过期,还可以继续使用,无需再从服务端获取
400客户端请求有语法错误,不能被服务器所理解
401请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403服务器收到请求,但是拒绝提供服务
404请求资源不存在
413(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
500(服务器内部错误) 服务器遇到错误,无法完成请求。(防火墙忘关)
501(尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用)服务器目前无法使用(由于超载或停机维护)通常,这只是暂时状态
504(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

七、HTTP响应细节

  • 常用响应头
Location服务器通过这个头,来告诉浏览器跳到哪里
Server服务器通过这个头,告诉浏览器服务器的型号
Content-Encoding服务器通过这个头,告诉浏览器,数据的压缩格式
Content-Length服务器通过这个头,告诉浏览器回送数据的长度
Content-Language服务器通过这个头,告诉浏览器语言环境
Content-Type服务器通过这个头,告诉浏览器回送数据的类型
Refresh服务器通过这个头,告诉浏览器定时刷新
Content-Disposition服务器通过这个头,告诉浏览器以下载方式打数据
Transfer-Encoding服务器通过这个头,告诉浏览器数据是以分块方式回送的
Expires-1 控制浏览器不要缓存

八、断开连接

在服务器响应完毕后,一次会话就结束了,请问这时候连接会断开吗?

(1)长短连接

是否断开我们需要区分HTTP版本:

(1)在HTTP/1.0版本的时候,客户端与服务器完成一个请求/响应之后,会将之前建立的TCP连接断开,下次请求的时候又要重新建立TCP连接,这也被称为短连接

(2)在HTTP1.0发布仅半年后(1997年1月),HTTP/1.1版本发布并带来一个新的功能:
在客户端与服务器完成一次请求/响应之后,允许不断开TCP连接,这意味着下次请求就直接使用这个TCP连接而不再需要重新握手建立新连接,这也被称为长连接

注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。
早在1999年HTTP1.1就推广普及,所以现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接,如果是close,表示已关闭。

(2)长连接优缺点

对于服务器来说建立长连接有优点也有缺点:

  • 优点:

当网站中有大量静态资源(图片、css、js等)就可以开启长连接,这也几张图片就可以通过一次TCP连接发送。

  • 缺点:

当客户端请求一次时候不在请求,而服务器却开着长连接资源被占用着,这是严重浪费资源。
所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。

注:大家不要小看这一个TCP连接,在一次客户端HTTP完整的请求中(DNS寻址、建立TCP连接、请求、等待、解析网页、断开TCP连接)建立TCP连接占用的时间比还是很大的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值