文章目录
-
- [1. HTTP的基本介绍](#1. HTTP的基本介绍)
- [2. HTTP的特性](#2. HTTP的特性)
- [3. HTTP请求协议(Request)](#3. HTTP请求协议(Request))
-
- [3.1 请求行](#3.1 请求行)
-
- [3.1.1 请求方法](#3.1.1 请求方法)
- [3.1.2 URI、URL、URN](#3.1.2 URI、URL、URN)
- [3.1.3 HTTP版本](#3.1.3 HTTP版本)
- [3.2 请求头](#3.2 请求头)
- [3.3 请求体](#3.3 请求体)
- [4. HTTP响应协议(Response)](#4. HTTP响应协议(Response))
-
- [4.1 响应行](#4.1 响应行)
- [4.2 响应头](#4.2 响应头)
- [4.3 响应体](#4.3 响应体)
1. HTTP的基本介绍
- HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议 ,规定了客户端(如浏览器)与服务器之间数据传输的规则(最终体现为在网络上传输的数据包的格式)。
2. HTTP的特性
的特性
- HTTP 协议的设计具有以下几个核心特点,使得它成为互联网中最广泛使用的协议之一:
-
基于TCP协议: HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的。
TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全
-
基于请求-响应模型(Request-Response Model): 客户端发送 HTTP 请求 (Request),服务器处理并返回一个 HTTP 响应 (Response),一次请求对应一次响应(先请求后响应)。
-
无状态性(Stateless):每次请求都是独立的,服务器不会自动保存任何前一次请求的上下文信息。
-
缺点: 多次请求间不能共享数据
-
优点: 速度快
-
这种无状态设计简化了服务器的实现,但为了满足需要"记住"用户状态的场景(如登录),可以通过 Cookie 或 Session 等机制实现状态管理。
-
-
无连接性(Connectionless):
- HTTP 协议在早期版本中是无连接的,即每次请求完成后,连接就会关闭。
- 从 HTTP/1.1 开始,加入了 Keep-Alive 机制,使得连接可以被复用,从而提高了效率。
-
灵活性(Flexibility):
- HTTP 支持传输多种类型的数据,如纯文本(text/html)、图片(image/jpeg)、音频(audio/mp3)、视频(video/mp4)等。
- 数据类型由响应中的
Content-Type
字段指定,客户端会根据这个字段解析内容。
-
扩展性(Extensibility):
- HTTP 协议支持通过自定义头部字段或扩展功能(如 WebSocket)来满足新的需求。这种设计让 HTTP 能够不断适应互联网的变化。
-
跨平台性与普适性:
- HTTP 是与平台无关的协议,几乎所有支持网络通信的设备和编程语言都可以实现 HTTP 客户端或服务器。
拓展:HTTP与HTTPS的差异:(HTTP 的通信是明文的,数据在传输过程中容易被截获或篡改,而 HTTPS(HTTP Secure) 是基于 HTTP 协议的一种安全协议,通过加入 SSL/TLS 加密层确保数据安全性。)
特性 HTTP HTTPS 安全性 数据明文传输,易被窃听或篡改 数据加密传输,确保机密性和完整性 端口号 默认端口为 80 默认端口为 443 加密机制 无 通过 SSL/TLS 加密 性能 较快,但不安全 略慢(需要加解密),但更安全
3. HTTP请求协议(Request)
-
请求协议:浏览器将数据以请求格式发送到服务器。包括:
请求行
、请求头
、请求体
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
3.1 请求行
- 请求行:请求行包括请求方法 、URI(Uniform Resource Locator) 和协议版本,请求行是 HTTP 请求的第一行,它明确了请求的基本信息。
3.1.1 请求方法
-
请求方法:HTTP 定义了一系列请求方法,用于描述客户端对资源的操作,常见请求方法如下所示:
序号 方法 描述 是否幂等 是否安全 常见用途 适用版本号 1 GET 从服务器获取资源,用于请求数据而不对其进行更改。例如:获取网页、图片等。 是 是 获取网页、文件、数据 HTTP 1.0、HTTP 1.1 2 POST 向服务器发送数据以创建新资源。常用于提交表单或上传文件,数据包含在请求体中。 否 否 表单提交、数据上传 HTTP 1.0、HTTP 1.1 3 PUT 更新或替换服务器上的资源,如果资源不存在则创建。通常是幂等的。 是 否 文件覆盖更新、新建资源 HTTP 1.0、HTTP 1.1 4 DELETE 从服务器删除指定资源,使用资源标识符指定要删除的内容。 是 否 删除文件或数据 HTTP 1.0、HTTP 1.1 5 PATCH 对资源进行部分修改,只更改资源的一部分而不是替换整个资源。 否 否 部分更新资源 HTTP 1.1 6 HEAD 类似于 GET,但只返回响应头部,不返回实际数据。常用于检查资源的元数据。 是 是 检查资源状态或存在性 HTTP 1.0、HTTP 1.1 7 OPTIONS 返回服务器支持的 HTTP 方法,常用于跨域资源共享(CORS)中的预检请求。 是 是 检查支持的请求方法 HTTP 1.1 8 TRACE 回显服务器收到的请求,用于诊断 HTTP 请求在服务器的处理路径。 是 否 请求调试 HTTP 1.1 9 CONNECT 建立一个到服务器的隧道,通常用于 HTTPS 连接,可通过隧道发送加密数据。 否 否 HTTPS 代理隧道 HTTP 1.1 其中常用的请求方式有GET和POST,它们的差异如下:
区别方式 GET请求 POST请求 请求参数 请求参数在请求行中,格式如 ?key=value,数据暴露在地址栏。 例:/brand/findAll?name=OPPO&status=1 请求参数在请求体中,适合传输大数据或复杂结构 请求参数长度 请求参数长度有限制(浏览器不同限制也不同) 请求参数长度没有限制 安全性 安全性低。原因:请求参数暴露在浏览器地址栏中。 数据包含在请求体中,结合HTTPS加密传输,安全性相对高 缓存机制 通常会被浏览器缓存,可重复利用相同资源 默认不被缓存,更适合提交动态数据 幂等性 幂等,多次相同请求不会改变服务器状态 不幂等,每次请求可能改变服务器状态
3.1.2 URI、URL、URN
-
URI的定义:URI(Uniform Resource Identifier)即统一资源标识符,是一个用于标识某一互联网资源名称的字符串。
-
URI的分类:它可以分为 URL(Uniform Resource Locator)和 URN(Uniform Resource Name)。
-
URI的结构:
[scheme:][//host:port][path][?query][#fragment]。其中 authority 又可以分为 host:port 的形式,冒号前的是 host(主机),冒号后的是 port(端口)
-
URI的作用:URI 以某种统一的方式标识资源,允许用户对任何资源通过特定的协议进行交互操作。
-
URL 和 URN 的区别:
-
URL:是 URI 的最普遍形式,即统一资源定位符。它描述了一台特定服务器上某资源的特定位置,通过协议、主机 IP 地址和资源具体地址来定位资源。例如,"https://www.example.com/page.html",其中 "https" 是协议,"www.example.com" 是主机 IP 地址,"/page.html" 是资源具体地址。
-
URN:是 URL 的一种更新形式,统一资源名称。它不依赖于位置,用于命名资源而不指定地址。例如,"urn:isbn:0-486-27557-4",这个 URN 标识了莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本,但没有给出资源的具体位置。
总的来说,URI 是一个广义的概念,URL 和 URN 都是其子集。URL 侧重于定位资源,而 URN 侧重于命名资源。在实际应用中,我们常常使用 URL 来访问互联网上的各种资源,而 URN 的应用相对较少,但它在一些特定的场景下,如唯一标识图书的 ISBN 系统中,发挥着重要的作用。
-
3.1.3 HTTP版本
3.2 请求头
-
作用:HTTP是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样服务器在收到信息后,就可以进行相应的操作。
-
格式:header 的整体格式是键值对结构,每个键值对占一行,键和值之间使用
冒号+空格
进行分割,以下介绍几个常见的报头:报头 作用 Host 目标服务器的主机名 Content-Type 请求主体的数据类型 Content-Length 数据主体的大小(单位:字节) User-Agent: 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko Accept-Language 表示浏览器偏好的语言,服务器可以据此返回不同语言的网页 Accept-Encoding: 表示浏览器可以支持的压缩类型,例如gzip, deflate等 Accept: 表示浏览器能接收的资源类型,如text/*,image/或者/*表示所有 如下介绍Content-Type的三种类型:
-
application/x-www-form-urlencoded
这是 form 表单提交的数据格式,此时 body 的格式就类似于 query string(是键值对的结构,键值对之间使用 & 分割,键与值之间使用 = 分割
-
multipart/form-data
这是 form 表单提交的数据格式(需要在 from 标签上加上 enctyped="multipart/form-data"),通常用于 HTML 提交图片或者文件
-
application/json
此时 body 数据为 json 格式,json 格式就是源自 js 的对象的格式。用一个 { } 括住,里面有多个键值对,键值对之间使用逗号分割,键和值之间使用冒号分割
-
3.3 请求体
- 请求体(以上图中绿色部分) :存储请求参数
- 请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)
4. HTTP响应协议(Response)
-
HTTP的请求一样,HTTP响应的数据也分为3部分:
响应行
、响应头
、响应体
。
4.1 响应行
-
响应行(以上图中红色部分):响应数据的第一行。响应行由
协议及版本
、响应状态码
、状态码描述
组成。 -
常见的响应状态码如下:
状态码分类 说明 1xx 响应中 --- 临时状态码。表示请求已经接受,告诉客户端应该继续请求或者如果已经完成则忽略 2xx 成功 --- 表示请求已经被成功接收,处理已完成 3xx 重定向 --- 重定向到其它地方,让客户端再发起一个请求以完成整个处理 4xx 客户端错误 --- 处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等 5xx 服务器端错误 --- 处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等
4.2 响应头
-
响应头包含有关响应的元数据,描述服务器返回的内容和状态。
-
常见的响应头如下:
头部字段 描述 示例 Date 响应生成时间 Wed, 29 Nov 2024 12:00:00 GMT Server 服务器软件信息 Apache/2.4.1 (Unix) Content-Type 响应内容的媒体类型(MIME 类型) text/html; charset=UTF-8 Content-Length 响应内容的长度,单位为字节 3145 Content-Encoding 响应体的压缩方式 gzip 或 deflate Content-Language 响应内容的语言 zh-CN Cache-Control 缓存控制指令 no-cache、max-age=3600 Connection 连接选项(保持活跃或关闭) keep-alive 或 close Set-Cookie 资源最后修改时间 sessionId=abc123; Path=/; Secure ETag 设置客户端的 Cookie 信息 "33a64df551425fcc55e6" Last-Modified 资源版本标识符,用于缓存验证 Wed, 29 Nov 2024 11:00:00 GMT Location 重定向目标的 URI /new-resource Strict-Transport-Security 强制 HTTPS 安全策略 max-age=31536000; includeSubDomains X-Frame-Options 防止点击劫持攻击 SAMEORIGIN 或 DENY X-Content-Type-Options 禁止浏览器推测 MIME 类型 nosniff X-XSS-Protection 浏览器的 XSS 保护指令 1; mode=block
4.3 响应体
- 响应体(以上图中绿色部分): 响应数据的最后一部分。存储响应的数据
- 响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)
参考博客: