跳转到内容

应用协议

刀刀

3/23/2025

0 字

0 分钟

URL

URL 是同意资源定位符,用于定位互联网上的资源。

URL 是一个固定格式的字符串,包含以下信息:

http://www.example.com:80/index.html?id=1#t1
  • 协议 schema :用于指定访问资源的协议,如 HTTPHTTPSFTP 等。
  • 主机名 domain :用于指定访问资源的主机名,如 www.example.com
  • 端口号 port :用于指定访问资源的端口号,如 80、443 等。
  • 路径 path :用于指定访问资源的路径,如 /index.html
  • 查询参数 query :用于指定访问资源的查询参数,如 ?key=value
  • 锚点 hash :用于指定访问资源的锚点,如 #top

它表达了:从网络中哪台计算机(domain)的哪个程序(port)寻找哪个服务(path),并注明获取服务的具体细节(path),以及要用什么样的协议通信(schema)。

这里包含一些细节:

  • 当协议是 HTTP 时,端口号默认是 80,可以省略端口。
  • 当协议是 HTTPS 时,端口号默认是 443,可以省略端口。
  • schemadomainpath 是必须的,其他的根据具体要求填写。

误区

Q:在网络中看到一张图片,路径为 https://www.baidu.com/img/bd_logo1.png,那么这个图片是存放在百度服务器上的吗?

A:不是,URL 地址只不过从网络中某台计算机的某个程序要某个服务,程序收到 URL 地址后给什么、给不给是由后端程序来决定。它访问的是程序,而不是路径,不代表对应路径上的资源。

Q:为什么 VSCode 的插件 Live Server 可以通过 URL 访问本地文件?

A:因为 Live Server 是一个静态资源服务器,它会将本地文件映射到一个虚拟路径上,然后通过 URL 访问虚拟路径,虚拟路径会被映射到本地文件,从而实现访问本地文件的功能。它本质上是一个程序。

HTTP

超文本传输协议是一个广泛运用于互联网的应用层协议。该协议规定两个方面的内容:

  • 传递消息的模式
  • 传递消息的格式

传递消息的模式

传递消息的模式

HTTP 使用了一种极简单的消息传递模式,【请求-响应】模式。发起请求的称之为客户端,接收请求并完成响应的称之为服务器。【请求-响应】完成后,一次交互结束。

传递消息的格式

这里推荐一个 VSCode 插件:REST Client,可以直接在 VSCode 中发送 HTTP 请求,并且可以查看响应结果。 请求

注意:请求体是可选的,无论是否有请求体,请求体结束后都要换两行。

HTTP 消息格式是一种纯文本的格式,文本分为三部分组成:

http
<!-- 请求行 -->
GET / HTTP/1.1

<!-- 请求头 -->
HOST: www.taobao.com


<!-- 请求体 -->
http
<!-- 请求行 -->
POST /api/user HTTP/1.1

<!-- 请求头 -->
HOST: study.duyiedu.com


<!-- 请求体:格式一 -->
loginId=admin&loginPwd=123456
<!-- 请求体:格式二 -->
loginId:admin
loginPwd:123456
  1. 请求行
  2. 请求头
  3. 请求体

请求行

请求行是 HTTP 消息的第一行,它包含了请求方法、请求路径、HTTP 版本等信息。

请求行第一个单词是请求方法,在 HTTP 协议中,请求方法仅有语义的区别,只是表达了这次请求的【愿望】。比如 GET 表示客户端想要获取一些东西,POST 表示客户端想要发送一些东西。

常见的请求方法有:

  • GET:获取资源
  • POST:提交数据
  • PUT:更新资源
  • DELETE:删除资源

请求行第二个单词是请求路径,它是请求的目标资源的路径。

请求行第三个单词是 HTTP 版本,它是 HTTP 协议的版本号。

请求头

请求头是 HTTP 消息的第二部分,它包含了请求的元数据,比如请求头字段名和字段值。

请求头字段名和字段值之间使用冒号分隔,多个请求头之间使用换行分隔。

常见的请求头字段有:

  • Host:请求的服务器地址(必写)
  • User-Agent:客户端信息
  • Accept:客户端能够接收的数据类型 - Content-Type:请求体的数据类型
  • Content-Length:请求体的长度

请求体

请求体是 HTTP 消息的第三部分,它是客户端发送给服务器的数据。

请求体的格式可以是文本格式,也可以是二进制格式,由请求头 Content-Type 字段来决定;请求体的长度可以通过请求头中的 Content-Length 字段来指定。

常见格式为:

  • application/x-www-form-urlencoded:表单数据,键值对形式
  • application/json:JSON 格式数据
  • multipart/form-data:文件上传数据
  • text/plain:纯文本数据
  • text/html:HTML 文档数据
  • image/jpeg:图片数据

一般的,x-www-form-urlencoded 格式的表单数据只能传字符,如果要传文件(如头像图片等),只能转为 base64 编码后再传。这样会有一定的性能损失,所以一般文件上传使用 multipart/form-data 格式。

请求体的内容可以通过请求方法来指定,比如 GET 请求没有请求体,POST 请求有请求体。

响应行

响应行是 HTTP 响应消息的第一行,它包含了 HTTP 版本、状态码和状态描述等信息。

响应行第一个单词是 HTTP 版本,表示服务器使用的 HTTP 协议版本。

响应行第二个单词是状态码,表示服务器对请求的处理结果。

常见的响应码有:

分类分类描述
1xx指示信息,表示请求已接收,继续处理
2xx成功,表示请求已被成功接收、理解、接受
3xx重定向,表示要完成请求,需要进一步操作
4xx客户端错误,表示请求有语法错误或请求无法实现
5xx服务器端错误,表示服务器未能实现合法的请求

常见的状态码有:

  • 200:请求成功
  • 301:永久重定向,浏览器遇到这个响应会本地缓存新的地址,下次请求直接用新的地址
  • 302:临时重定向,浏览器不会缓存新的地址,每次请求都需要带上原始地址
  • 400:客户端请求错误
  • 401:未授权
  • 403:禁止访问
  • 404:未找到
  • 500:服务器内部错误

响应行第三个单词是状态描述,表示服务器对请求的处理结果的描述。

响应头

响应头是 HTTP 响应消息的第二部分,它包含了响应的元数据,如响应的内容类型、内容长度、服务器信息等。

常见的响应头有:

  • Content-Type:响应体的数据类型消息格式(重要)
  • Content-Length:响应体的字节长度
  • Server:服务器信息
  • Date:响应时间
  • Last-Modified:资源最后修改时间
  • ETag:资源的唯一标识符
  • Cache-Control:缓存控制
  • Expires:资源的过期时间
  • Set-Cookie:设置 Cookie
  • Location:重定向地址

响应体

响应体是 HTTP 响应消息的第三部分,它包含了服务器返回的实际数据,如 HTML、JSON、图片等。