应用协议
刀刀
3/23/2025
0 字
0 分钟
URL
URL 是同意资源定位符,用于定位互联网上的资源。
URL 是一个固定格式的字符串,包含以下信息:
http://www.example.com:80/index.html?id=1#t1
- 协议
schema
:用于指定访问资源的协议,如HTTP
、HTTPS
、FTP
等。 - 主机名
domain
:用于指定访问资源的主机名,如www.example.com
。 - 端口号
port
:用于指定访问资源的端口号,如 80、443 等。 - 路径
path
:用于指定访问资源的路径,如/index.html
。 - 查询参数
query
:用于指定访问资源的查询参数,如?key=value
。 - 锚点
hash
:用于指定访问资源的锚点,如#top
。
它表达了:从网络中哪台计算机(domain
)的哪个程序(port
)寻找哪个服务(path
),并注明获取服务的具体细节(path
),以及要用什么样的协议通信(schema
)。
这里包含一些细节:
- 当协议是
HTTP
时,端口号默认是 80,可以省略端口。 - 当协议是
HTTPS
时,端口号默认是 443,可以省略端口。 schema
、domain
、path
是必须的,其他的根据具体要求填写。
误区
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 消息格式是一种纯文本的格式,文本分为三部分组成:
<!-- 请求行 -->
GET / HTTP/1.1
<!-- 请求头 -->
HOST: www.taobao.com
<!-- 请求体 -->
<!-- 请求行 -->
POST /api/user HTTP/1.1
<!-- 请求头 -->
HOST: study.duyiedu.com
<!-- 请求体:格式一 -->
loginId=admin&loginPwd=123456
<!-- 请求体:格式二 -->
loginId:admin
loginPwd:123456
- 请求行
- 请求头
- 请求体
请求行
请求行是 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、图片等。