应用层协议 HTTP

发布于:2025-06-25 ⋅ 阅读:(18) ⋅ 点赞:(0)

HTTP 协议

        应用层协议是程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。

        在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至 关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输 超文本(如 HTML 文档)。

        HTTP 协议是客户端服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求(response),服务器收到请求后处理并返回响应(resquest)。HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

http协议是基于TCP的协议

URL

平时我们俗称的 "网址" 其实就是说的 URL

urlencode(URL 编码)  和  urldecode(URL 解码)

像 / ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现.

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义. 转义的规则如下: 将需要转码的字符转为 16 进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位做一位,前面加上%,编码成%XY 格式

总结:将用户请求的中的字符转为符合 URL 传输要求的格式

urlencode

"hello world!" → "hello+world%21"
"价格=100" → "%E4%BB%B7%E6%A0%BC%3D100"

urldecode

"hello+world%21" → "hello world!"
"%E4%BB%B7%E6%A0%BC%3D100" → "价格=100"

例如:

"+" 被转义成了 "%2B"

urldecode 就是 urlencode 的逆过程;

HTTP 协议请求与响应格式

HTTP 请求

  • 首行: [方法] + [url] + [版本]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束
  • Body: 空行后面的内容都是 Body. Body 允许为空字符串.
  • 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度;

HTTP 响应

  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束
  • Body: 空行后面的内容都是 Body. Body 允许为空字符串.
  • 如果 Body 存在, 则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一 个 html 页面, 那么 html 页面内容就是在 body 中.

demo1:一个http的请求和应答


网站公告

今日签到

点亮在社区的每一天
去签到