HTTP协议的深入理解

HTTP协议

一、HTTP协议简介

HTTP协议即超文本传输协议(Hypertext transfer protocol),是一种应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。它规定了万维网(WWW)服务器与浏览器之间信息传递规范,指定了客户端可能发送给服务器什么样的消息,得到什么样的响应。

二、HTTP协议的特点

通过HTTP协议请求的资源由统一资源标识符URL(Uniform Resource Identifiers)来标识。

  1. HTTP协议默认端口号为80。
  2. 简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。
  3. 灵活: HTTP协议允许传输任何类型的数据。正在传输的数据类型用Content-Type标识。
  4. 无状态: HTTP协议是无状态协议(无记忆性)。即HTTP协议不对当前请求和响应之间的通信状态进行保存,也就是说HTTP协议在处理请求或响应时,如果需要用到之前的请求或响应信息,只能重传,不会对之前处理过的信息进行持久性处理。
  5. 基于请求响应模式: HTTP协议是基于请求-响应的模式。HTTP协议规定请求从客户端发出,最后服务器响应该请求并返回,也就是一定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。
  6. 无连接: HTTP协议基于无连接的,无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间,并且可以提高并发性能,不能和每个用户建立长久的连接,请求一次响应一次,服务端和客户端就中断了。

三、HTTP协议版本

上边说到HTTP协议是无连接的,不过无连接有两种方式,这就跟HTTP的版本有关了。
1.HTTP 0.9和 HTTP 1.0: 限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,立即断开连接。
2.HTTP 1.1: 处理一次请求之后,等待几秒钟,如果用户有新的请求来了,那么还是通过之前的连接通道来收发消息,如果过了这几秒钟用户没有发送新的请求,那么就会断开连接。
这样可以提高效率,减少短时间内建立连接的次数。

早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因此 HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。就提出了设置等待时间的途径来解决。

四、认识URL

URL(Uniform Resoure Locator)中文译为统一资源定位符,是 Internet 上资源的地址,比如一个文本文件,一张图片,一个视频。通过 URL 我们可以知道网络资源的位置以及访问它的协议。
平时我们俗称的 “网址” 其实就是说的 URL。
大多数URL协议的语法都建立在下面的通用格式上:
在这里插入图片描述
一个HTTP协议的URL:
在这里插入图片描述

五、HTTP协议工作流程

1.客户端连接到Web服务器,点击某个超连接,HTTP工作开始
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个连接。

2.客户端发送HTTP请求给服务器
客户端向Web服务器发送一个文本的请求报文,一个请求报文格式为:请求行、请求头、空行、请求体 。

3.服务器接收请求并返回响应
Web服务器解析请求,定位请求资源,生成响应,返回响应信息,响应格式为:响应行、响应头、空行、响应体。

4.客户端接收服务器返回的信息,之后断开连接
客户端接收到服务端发来的响应信息并对其解析,并显示出来。之后关闭连接时,若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  5. 释放 TCP连接;
  6. 浏览器将该 html 文本解析并显示内容;

六、HTTP请求

以这个HTTP请求报文为例
在这里插入图片描述
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本
请求行位于第一行,格式:请求方法 资源路径 HTTP版本
如上所示的HTTP请求,请求行:POST http://127.0.0.1:8080/login HTTP/1.1
请求方法为POST,资源路径http://127.0.0.1:8080/login ,版本是HTTP 1.1版本。

第二部分: 请求头,紧接着请求行(即第一行)之后直到空行的部分,用来说明服务器要使用的附加信息
请求头一般以键值对即 key - value 的形式表示。
key表示附加什么信息,value表示附加的内容
Host: 客户端告诉服务端,请求的主机地址

Host: 127.0.0.1:8080

Connection: 表示客户端与服务连接类型;Keep-Alive表示持久连接,close已关闭

Connection: keep-alive

Content-Length: 请求体的长度

Content-Length: 25

等等这些都是以键值对的形式表示

第三部分:空行,请求头部后面的空行是必须的。即使第四部分的请求数据为空,也必须有空行。

第四部分:请求体,请求数据也叫主体,可以添加任意的其他数据。
当请求方式是POST的时,请求体会有请求的参数。GET方法没有请求体。

七、HTTP常见Header

keyvalue
Content-Type数据类型(text/html等)
Content-LengthBody的长度
Host客户端告诉服务端,请求的主机地址
User-Agent声明用户的操作系统和浏览器版本信息
referer当前页面是从哪个页面跳转过来的
location搭配3xx状态码使用, 告诉客户端接下来 去哪里访问
Cookie存储在客户端的少量信息,用于维持会话状态

八、HTTP响应

服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。HTTP响应也由四个部分组成,分别是:响应行、响应头、空行和响应体。
在这里插入图片描述
第一部分:响应行,包含HTTP协议版本, 状态码
第一行为响应行:HTTP/1.1 200 HTTP版本是HTTP 1.1版本, 响应状态为200.

第二部分:响应体, 用来说明客户端要使用的一些附加信息
响应头的格式也是采用类似 key-value 键值对的形式。
服务器通过响应头来控制浏览器的行为,不同的响应头浏览器操作不同。

第三部分:空行,响应体后面的空行是必须的

第四部分 :响应体 ,服务器返回给客户端的文本信息
空行之后的部分为响应体。

九、HTTP请求方法

方法说明
GET向指定的资源发出“显示”请求。获取资源
POST向指定资源提交数据,请求服务器进行处理
PUT向指定资源位置上传内容
HEAD与GET类似,不过服务端接收到HEAD请求时只返回报文头
DELETE请求服务器删除Request-URI所标识的资源。
OPTIONS使服务器传回该资源所支持的所有HTTP请求方法
TRACE回显服务器收到的请求,追踪路径
CONNECT要求用隧道协议连接代理
LINK建立和资源之间的连接
UNLINK断开连接关系

十、HTTP之状态码

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

状态码说明
1xx接受的请求正在处理
2xx请求正常处理完毕
3xx需要进行附加操作以完成请求
4xx请求含有词法错误或者无法被执行
5xx服务器处理请求出错
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值