HTTP简介
01 什么是HTTP
HTTP(Hypertext Transfer Protocol)是一种基于客户端-服务端架构的应用层协议,主要用于 Web 应用之间的数据交互。它是一种无状态协议,指每个请求都是相互独立的,服务器不会记录任何会话信息。
HTTP定义了客户端向服务器发起请求和服务器返回响应的标准格式和步骤。HTTP 协议工作在 TCP/IP 协议的应用层上,使用80端口进行通信。客户端通过发送HTTP请求给服务器,服务器处理请求并返回相应的HTTP响应,通常包含请求所需的内容。HTTP 请求和响应消息总是由多行文本构成,其中第一行包含请求或响应的类型、请求的URI、协议版本和状态码等信息,随后为一些头部标识数据,最后是实体(Body)数据(例如请求表单或者响应的HTML页面等)。这些HTTP消息可以通过各种方式进行交互,例如在客户端浏览器中访问Web页面或API时。
总而言之,HTTP 是 Web 应用程序开发必备的协议之一,可以实现客户端和服务器之间的高效通信。
02 HTTP发展历史
版本 | 生产时间 | 内容 | 发展现状 |
HTTP/0.9 | 1991年 | 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 | 没有作为正式的标准 |
HTTP/1.0 | 1996年 | 传输内容格式不限制,增加PUT、PATCH、HEAD、OPTIONS、DELETE命令 | 正式作为标准 |
HTTP/1.1 | 1997年 | 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 | 2015年前使用最广泛 |
HTTP/2 | 2015年 | 多路复用、服务器推送、头信息压缩、二进制协议等 | 逐渐盖市场 |
03 HTTP工作流程
HTTP(Hypertext Transfer Protocol)的工作流程通常可以分为以下步骤:
- 客户端向服务器发送HTTP请求。
- 服务器接收到请求后进行处理,并返回响应给客户端。
- 客户端接收到响应并进行相应的处理(解析视图HTML、加载JS和CSS,或在API中使用响应数据等)。
具体地,HTTP请求一般由以下三个部分组成:请求首行、请求头以及实体主体。
- 请求首行中包含了由请求方法、请求URL、协议版本组成。常见的请求方法有GET、POST等。
- 而请求头则提供了更多的请求信息,例如User-Agent、Accept-Encoding、Content-Type等。
- 实体主体用于提供附加的请求数据,例如表单提交或者上传文件的数据。服务器处理完请求后,会生成一个 HTTP 响应消息,同样由三个部分组成:状态行、消息头和消息正文。其中,状态行由协议版本、状态码和状态描述构成;消息头包含了响应的元数据信息;消息正文包含了请求所需要的内容或者处理结果。
总之,HTTP协议的工作流程是通过客户端与服务端之间的交互来实现数据的发送和接受,请求和响应之间的数据传输都是基于HTTP协议定义的标准格式和步骤完成的。
什么是B/S、C/S架构
B/S架构全称为Browser/Server架构,也叫做Web架构。它是一种常见的客户端/服务器(Client/Server)应用程序的体系结构模式,其中客户端使用浏览器来访问Web页面,然后通过Web服务器与后台的应用程序服务器进行通信,以完成对数据的处理和显示。
C/S架构全称为Client/Server架构,也叫做传统的三层架构。它是一种常见的应用程序的体系结构模式,客户端直接与后端的服务器进行交互,客户端在本地运行用户界面逻辑,而服务器则负责处理大部分业务逻辑和数据存储。
总的来说,B/S架构强调统一的用户界面和标准化的网络协议,适合于Web应用程序的开发;C/S架构则更加注重客户端的自主性和灵活性,能够实现更加复杂和高级的应用程序。
在HTTP 0.9 和 1.0 中 ·TCP连线在每一次请求/回应对之后关闭闭。
在HTTP 1.1中 . 引入了保持连线的机制 · 一个连接可以重复在多个请求/回应使用.
持续连线的方式可大大减少等待时间,因为在发出第一个请求后,双方不需要重新运行TCP握手程序
三次握手
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立
TCP协议中,客户端和服务器建立连接时需要进行三次握手的过程。具体步骤如下:
- 第一步:客户端向服务器发送一个连接请求报文段(SYN标志位为1,表示请求建立连接)。
- 第二步:服务器接收到请求报文段后,如果同意建立连接,则会回复一个报文段(ACK标志位和SYN标志位都为1,表示确认并同意建立连接请求),同时也会将自己的初始化序列号发送给客户端。
- 第三步:客户端收到服务器发来的报文后,再次向服务器发送一个报文段(ACK标志位为1,表示确认收到服务器的请求),并在该报文段中带上服务器的初始化序列号。
此时连接就建立成功了,可以开始传输数据了。这个过程是为了确保客户端和服务器双方都能够正常通信,而且经过三次握手后,双方都知道对方的初始化序列号,以便后续通过序列号来保证数据的可靠性和完整性。
以下是三次握手过程的示意图:
客户端 服务器
发送SYN=1 --------> 接收到SYN后发送ACK=1,SYN=1 发送初始化序列号
<-----------
接收到ACK+SYN <--------- 发送ACK=1,SYN=0 发送初始化序列号
发送ACK=1 ---------> 接收到ACK后连接建立 ----------->
以上为三次握手的流程图。
- 客户端向服务器发送SYN报文段,并进入SYN_SEND状态。
- 服务器收到SYN报文段,回复客户端一个SYN+ACK组合报文段,表示接受请求,并进入SYN_RCVD状态。
- 客户端收到服务器回复的SYN+ACK报文段,回复一个ACK报文段,表示客户端和服务器之间的连接已经建立成功。此时客户端进入ESTABLISHED状态,服务器也进入ESTABLISHED状态。
应该要说明的,SYN标志位用于建立TCP连接,表示请求建立连接。ACK标志位用于确认,表示已经收到对方发来的数据,或者用于收发双方之间确认连接是否建立成功。 综上所述,三次握手建立TCP连接的目的是让通信的双方(客户端和服务器)都能确认对方的状态,以确保后续的数据传输可以正确、快速、稳定。是的,TCP是一种可靠的传输协议。
04 统一资源定位符(URL)
统一资源定位符(Uniform Resource Locator, URL)是指万维网中标准的资源的地址,也就是我们通常所说的网址。它由协议类型、主机名(或IP地址)、端口号(可选)、路径以及查询字符串(可选)等部分组成。
以下是一个典型的URL格式:
<protocol>://<hostname>:<port>/<path>?<query>
其中,
<protocol>
用于指定访问该资源所使用的协议,如HTTP、FTP等。<hostname>
和<port>
分别表示主机名和端口号,用于定位服务器,可以是域名或者IP地址。<path>
表示资源在服务器上存放的路径位置,是由若干个文件夹名称按层级排列构成,使用斜杠“/”分隔。<query>
表示查询的字符串,格式为“属性名=属性值”,多个参数用&符号分隔。
例如,http://www.example.com:80/index.php?id=1 这个URL中,协议类型为HTTP,主机名为www.example.com,端口号为80(默认80可以省略),路径为/index.php,查询字符串为id=1。
- 协议方案名:http,ftp,file,mailto,teinet,idap......
- 登录信息:如果网页需要认证时 · 需要填写该参数 · 所以是可选项
- 服务器地址:可以使P地址形式 · 也可以是能被DNS解析为IP地址的域名形式
- 端口号:指定服务器连接的端口号 · 也选填不填则指向本协议的默认端口号
- 带层次的文件路径:获取资源在服务器中的具体地址
- 查询字符串:针对已指定路路径的资源 · 可使用查询字符串来获取想要的参数 · 此项也是可选项
- 片段标识符:信息片段字符串 · 用来标记已获取资源中的子资源(在文档中的某个位置)
05 统一资源标志符(URI)
URl(Universal Resource Identifier统一资源标志符)· 用来标识抽象或物理资源的一个紧凑字符串。
HTTP 是基于客户端/服务端(C/S)的架构模型 · 通过一个可靠的链接来交换信息 · 是一个无状态的请求/响应协议。
HTTP 使用统一资源标识符(UniformResourceIdentifiers,URI)来传输数据和建立连接
URI和URL的区别:URL是URI的一个子集
06 下面那些是URL?
07 客户端请求消息
HTTP请求报文:web客户端向服务器发送的请求
HTTP请求由四个部分组成:
- 请求行
- 请求头部
- 空行
- 请求数据
请求行:
Method Request-URL HTTP-Version CRLF
- Method:表示请求方法
- Request-URL:是一个统一资源标识符
- HTTP-Version:表示请求的HTTP协议版本;
- CRLF:表示回车和换行
请求方法:
- GET 请求获取 Reques-URI所标识的资源
- POST 在Request-URL 所标识的资源后附加新的数据
- HEAD 请求获取由 Request-ur所标识的资源的响应消息报头
- PUT 请求服务器存储一个资源·并用 Request-ur作为其标识
- DLETE 请求服务器删除 Request-uri所标识的资源
- TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
- OPTIONS 请求查询服务器的性能·或者查询与资源相余的选项和需求
- CONNECT 保留将来使用·HTP/1协议中预留给能够将连接改为管道方式的代理服务器
- PATCH 用于将局部修改应用到资源(由RFC5789指定的方法)
请求头部字段:( Request Header Fields)
Header:Header Value CRLF
允许客户端传递关于自身的信息和希望的响应形式。
在HTTP/1.1协议中 · 所有的请求头 · 除HoSt外 · 都是可选
空行:
表示请求头结束 · 请求正文(请求体)开始
请求数据:
GET方法:提交数据时 · 数据参数会做为URL的一部分放在文件路径后面发送给服务器 · 被称为查询字符串
http://www.hetianlab.com?username=12345%40qq.com&password=2f7402f...a592b&validateCode=&rtnjson=true
POST方法:
发送的数据在请求体中
username=12345%40qq com& password=2f7402f..a592b&validate Code=&rtnjson=true
08 服务器响应消息
HTTP响应报文:在接收和解释请求消息后 . 服务器返回一个HTTP响应消息
HTTP响应也由四个部分组成·分别是:
- 状态行
- 消息报头
- 空行
- 响应正文
状态行
HTTP-Version Status-Code Reason-Phrase CRLF
- Http-Version:表示服务器HTTP协议的版本;
- Status-Code:表示服务器发回的响应状态代码
- Reason-Phrase:表示状态代码的文本描述
状态码:
状态代码有三位数字组成 · 第一个数字定义了响应的类别 · 且有五种可能取值:
- 1xx:指示信息--请求已被服务器接收 · 继续处理
- 2xx:成功-请求已成功被服务器接收 · 理解、并技受
- 3xx:重定向-需要后续操作才能完成这一请求
- 4xx:客户端错误-请求有语法错误或请求无法实现
- 5xx:服务端错误--服务器在处理某个正确请求时发生错误
常见状态码
- 200 OK # 客户端请求成功
- 400 Bad Request # 客户端请求有语法错误 · 不能被服务器所理解
- 401 Unauthorized # 请求未经授权 · 这个状态代码必须和WWW- Authenticate 报头域一起使用
- 403 Forbidden # 服务器收到请求·但是拒绝提供服务
- 404 Not Found # 请求资源不存在 ·eg:输入了错误的URL
- 500 Internal Server Error # 服务器发生不可预期的错误
- 503 Server Unavailable # 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
响应头部字段(Response Header Fields)
响应报头允许服务器传递不能放在状态行中的附加响应信息 · 以及关于服务器的信息和对 Request-URI所标识的资源进行下一步访问的信息
空行:
表示请求头结束 · 请求正文(请求体)开始
响应数据:
服务器返回的资源内容
{"result". "success", "message":null"}
10 HTTP请求方法理解
GET
- GET:获取/查询资源
- 不包含请求主体
- 请求参数一般是用“?”拼接在请求的URL后面
POST
POST:在 Request-URI所标识的资源后附加新的数据
用于向指定资源发送数据 · 指定的资源会对数据进行处理 · 然后将处理结果返回给客户端 · 一般用于表单提交文件上传
- POST提交数据的几种 Content-Type
- application/xwww-form-urlencoded:最常见的POST提交数据方式 · 浏览器支持的原生form表单multipart/ form-data:这和方式一般用来上传文件
- application/json:在响应头中很常见 · 在请求头中用来告诉服务端消息主体是序列化后的json字符串
HEAD
HEAD:请求获取由 Request-URI所标识的资源的响应消息报头首部 · 不会返回报文主体
OPTIONS
查询资源支持的方法
PUT
PUT:请求服务器存储一个资源,并用 Request-REI 作为其标识
服务器会将请求主体的内容保存到RL指定的资源位置 · 包含两种情况:
1. URL指定的资源不存在 · 服务器新建一个文件 · 将请求主体中的内容保存到新建的文件里 ·响应码为201
2. URL指定的资源存在 · 服务器会重置文件内容 · 用请求主体中的内容覆盖原文件内容 · 响应码为200或204
DELETE
DELETE:请求服务器删除 Request-URI所标识的资源
TRACE
路径追踩 · 请求服务器回送收到的请求信息 · 主要用于测试或诊断发送的请求是否在客户端与服务端之间传送时被网、防火墙丶代理更改。
个人见解:在实际使用中GET和POST是最常用的,这两个能实现其他所有的功能,其他方法极少使用
HTTPS
01 HTTPS简介
全称: Hyper Text Transfer Protocol over Secure Socket Layer · 就是HTTP的安全版 · 再通俗点就是身披SSL外壳的HTTP
HTTPS = HTTP + SSL/TLS
HTTPS是一种通过计算机网络进行安全通信的传输协议 · 经由HTTP进行通信 · 利用SSL/TLS建立全信道 · 加密数据包 · HTTPS使用的主要目的是提供对网站服务器的身份认证 · 同时保护交换数据的隐私与完整性。
02 HTTPS特点
- 内容加密:采用混合加密技术 · 中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的內容被中间人冒充或者篡改
03 HTTP与HTTPS比较
HTTPS和HTTP的区别
HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。https则是具有安全性的ssl加密传输协议。http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。并且https协议需要到ca申请证书。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。