应用层协议HTTP
引言
应用层协议是程序员自己制定的,但是良好的协议是保证网络通信的基础,前代的计算工程师已经帮助我们制定了一些很好用的应用层协议,http(hybertext transfer protocol)(超文本传输协议)就是其中之一。
http协议是客户端和服务器之间通信的基础,客户端通过HTTP协议像服务器发送请求,服务器收到请求之后处理并返回响应。HTTP协议是一个无连接,无状态的协议,每次请求都需要建立新的连接,服务器不会保存客户端的状态的信息。
URL
俗称网址
URL(Uniform Resource Locator,统一资源定位符)是用于在互联网上定位资源的字符串。它是我们访问网页、下载文件、调用 API 等操作时使用的地址。URL 是 URI(统一资源标识符)的一种具体形式。
一个完整的url一般如下
协议://用户名:密码@子域名.域名.顶级域名:端口号/路径/文件名?查询参数#片段
https://john:password@www.example.com:8080/path/to/page.html?search=query#section1
协议:https
域名:www.example.com
端口:8080
路径:/path/to/page.html
查询参数:search=query
片段:section1
URL编码
- URL 中只能包含特定字符(字母、数字和少数符号)。
- 其他字符(如空格、中文等)需要通过 URL 编码 转换为 % 开头的十六进制值。
示例:
空格编码为 %20
中文“你好”编码为 %E4%BD%A0%E5%A5%BD
HTTP请求的格式
- 首行 : 方法 + URL + 版本
- Header: 请求的属性,冒号分割键值对,\r\n最为分隔符,遇到空行表示结束
- Body允许为空,如果Body不为空,Header中会有Content-lenth字段标记Body的长度
HTTP相应的格式
- 首行是HTTP版本 + 状态码 + 状态码描述
- 后面就是参数报头
- 换行符分隔内容和正文
- 正文
HTTP请求的方法
就是HTTP请求中的第一个字段
在日常中最常见的就是GET和POST两种方法
GET方法
用途: 用于请求 URL 指定的资源。
示例: GET /index.html HTTP/1.1
特性: 指定资源经服务器端解析后返回响应内容。
在后端中我们前端的文件,一般存储在wwwRoot为根的目录下,比如/index.html就是请求wwwRoot/index.html这个文件,我们将index.html中的字符填充进入Response中的body中
浏览器就能正确的识别我们的前端文件,然后就是以图形化界面展示给用户。
POST方法
用途: 用于传输实体的主体, 通常用于提交表单数据。
示例: POST /submit.cgi HTTP/1.1
特性: 可以发送大量的数据给服务器, 并且数据包含在请求体中。
form 表单: https://www.runoob.com/html/html-forms.html
状态码 + 状态描述
状态码是是一个比较大的话题,想要比较深入了解所有的状态码的相关的情况,可以自己去搜索
HTTP中常见的header
请求头(Request Headers)
Host: 指定服务器域名和端口号。
User-Agent: 客户端信息,如浏览器类型和操作系统。
Accept: 客户端可接受的 MIME 类型。
Accept-Language: 客户端可接受的语言。
Accept-Encoding: 客户端可接受的内容编码,如 gzip。
Authorization: 包含认证信息,如 Bearer Token。
Content-Type: 请求体的 MIME 类型,如 application/json。
Content-Length: 请求体的大小(字节)。
Cookie: 包含客户端发送的 cookie。
Referer: 请求来源的 URL。
Cache-Control: 缓存指令,如 no-cache。
Connection: 控制连接状态,如 keep-alive。
响应头(Response Headers)
Content-Type: 响应体的 MIME 类型,如 text/html。
Content-Length: 响应体的大小(字节)。
Content-Encoding: 响应体的编码方式,如 gzip。
Set-Cookie: 服务器设置的 cookie。
Cache-Control: 缓存指令,如 max-age=3600。
Expires: 响应过期时间。
Last-Modified: 资源最后修改时间。
ETag: 资源唯一标识符,用于缓存验证。
Location: 重定向目标 URL。
Server: 服务器软件信息。
Access-Control-Allow-Origin: 允许跨域请求的源。
WWW-Authenticate: 要求客户端进行认证。
通用头(General Headers)
Date: 消息生成的日期和时间。
Connection: 控制连接状态,如 keep-alive。
Transfer-Encoding: 传输编码方式,如 chunked。
总结
应用层协议本来需要程序员自己去指定,但是HTTP等良好的协议值得我们程序员进行学习其中的思想或者直接作为项目协议进行利用。