应用协议----网络基础(二)
URL
URL(uniform resource locator,统一资源定位符)用于定位网络服务

url是一个固定格式的字符串

它表达了:
从网络中的哪台计算机(domain)中的哪个程序(port)寻找哪个服务(path),并标明了获取服务的具体细节(path),以及要用什么样的协议通信(schema)
其中有些细节:
- http的默认的端口80,默认端口可省略
- https的默认端口443,默认端口可省略
- schema、path、domain是必填的,其他的可以根据实际情况填写
HTTP
超文本传输协议(Hypertext Transfer Protocol)是一种用于在Web上进行通信的应用层协议。它是一种无状态、基于请求-想要模式的协议,常用于浏览器雨服务器之间的通信。
99%的情况下,前端开发接触的都是HTTP协议。
该协议规定了两个方面的内容:
- 传递消息的模式
- 传递消息的格式
传递消息的模式:

http采用的是请求-响应的消息传递模式,发起请求的成为客户端,接收请求并完成响应的称为服务端。【请求-响应】完成后,一次交互结束。
传递消息的格式:

如上图所示,http的消息格式是一种纯文本的格式,文本分为三个部分:
- 请求行:包含请求方法,请求的url和协议版本,如:GET /example.html HTTP/1.1
- 请求头:包含一系列的健值对,每对键值都表示一个请求的特定属性或者要求,如:Accept: text/html,application/xhtml+xml
- 空行:用来分隔请求头部和请求体的空行
- 请求体(可选):在一些post方法中,请求体可以包含要发送给服务器的数据
GET /example.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Accept: text/html,application/xhtml+xml
而相应格式恰好与之对应,包括
- 状态行:包含响应的状态码和状态信息,格式为:
<协议版本> <状态码> <状态信息> - 响应头部:包含一系列的键值对,每对键值对都表示一个响应的特定属性或元数据,格式为:
<头部字段名>: <字段值> - 空行:用于分隔响应头部和响应体的空行
- 响应体:包含服务器返回的实际数据,可以是HTML页面、文本、图片等Ï
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1274
Date: Tue, 17 May 2023 10:00:00 GMT
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Welcome to the Example Page!</h1>
<!-- 页面其他内容 -->
</body>
</html>
vscode中的rest client可以更直观的查看http请求

一些常用的关键信息
请求方法:
get:获取
post:提交
delete:删除
put:修改
面试题:get和post有什么区别
一般被问到这个问题 都会从缓存、数据长度限制、安全性等方面去回答,但是根据http1.1 RC7231规范描述 ,各种请求方式之间并没有什么区别,仅仅代表本次请求的【愿望】
以下列举一些常见的请求头
| 字段名 | 说明 | 示例 |
|---|---|---|
| Accept | 能够接受的回应内容类型(Content-Types) | Accept: text/plain |
| Accept-Charset | 能够接受的字符集 | Accept-Charset: utf-8 |
| Accept-Encoding | 能够接受的编码方式列表 | Accept-Encoding: gzip, deflate |
| Accept-Language | 能够接受的回应内容的自然语言列表 | Accept-Language: en-US |
| Authorization | 用于超文本传输协议的认证的认证信息 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
| Cache-Control | 用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令 | Cache-Control: no-cache |
| Connection | 该浏览器想要优先使用的连接类型 | Connection: keep-alive Connection: Upgrade |
| Cookie | 服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议Cookie | Cookie: $Version=1; Skin=new; |
| Content-Length | 以 八位字节数组 (8位的字节)表示的请求体的长度 | Content-Length: 348 |
| Content-Type | 请求体的 多媒体类型 |
Content-Type: application/x-www-form-urlencoded(默认的表单数据提交格式,将表单字段和值编码为URL参数格式)、 application/json(json格式,常用于发送和接受Json数据)、 application/xml(xml格式)、 multipart/form-data(用于上传文件和发送包含文件的表单数据,支持文件和文本字段的混合)、 text/plain(文本数据)、 application/octet-stream(二进制文件的字节流)、 image/jpeg:表示JPEG格式的图片,文件扩展名通常为.jpg或.jpeg。 image/png:表示PNG格式的图片,文件扩展名通常为.png。 image/gif:表示GIF格式的图片,文件扩展名通常为.gif。 image/bmp:表示BMP格式的图片,文件扩展名通常为.bmp。 image/tiff:表示TIFF格式的图片,文件扩展名通常为.tiff或.tif。 image/webp:表示WebP格式的图片,文件扩展名通常为.webp。 |
| Date | 发送该消息的日期和时间 | Date: Tue, 15 Nov 1994 08:12:31 GMT |
| Expect | 表明客户端要求服务器做出特定的行为 | Expect: 100-continue |
| Host | 服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号 | Host: en.wikipedia.org:80 Host: en.wikipedia.org |
| If-Match | 仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要作用时,用作像 PUT 这样的方法中,仅当从用户上次更新某个资源以来,该资源未被修改的情况下,才更新该资源 | If-Match: "737060cd8c284d8af7ad3082f209582d" |
| If-Modified-Since | 允许在对应的内容未被修改的情况下返回304未修改 | If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT |
| If-None-Match | 允许在对应的内容未被修改的情况下返回304未修改 | If-None-Match: "737060cd8c284d8af7ad3082f209582d" |
| If-Range | 如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个新的实体 | If-Range: "737060cd8c284d8af7ad3082f209582d" |
| Range | 仅请求某个实体的一部分 | Range: bytes=500-999 |
| User-Agent | 浏览器的浏览器身份标识字符串 | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0 |
| Origin | 发起一个针对 跨来源资源共享 的请求 | Origin: http://www.example-social-network.com |
常见的响应头-Content-Type
Content-Type标注了附带的响应体是什么格式
text/plain: 普通的纯文本text/html:html文档text/javascript或application/javascript:js代码text/css:css代码image/jpeg:jpg图片attachment:附件- 其他
MIME类型

浙公网安备 33010602011771号