当前位置: 首页 > news >正文

应用层协议 HTTP

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的请求和应答

http://www.lqws.cn/news/509491.html

相关文章:

  • 洛谷P1092 [NOIP 2004 提高组] 虫食算
  • openai-agents实现out_guardrails
  • DataSophon 1.2.1集成Flink 1.20并增加JMX 监控
  • [ruby on rails] ActiveJob中 discard_on,retry_on和 rescue_from的应用
  • 用福昕阅读器打开pdf文件,整个程序窗口自动缩小的问题
  • 14.OCR字符识别
  • 10-Python模块详解
  • 猿人学js逆向比赛第一届第十二题
  • 国产化条码类库Spire.Barcode教程:如何使用 C# 读取 PDF 中的条码(两种方法轻松实现)
  • 【前端】JS模块化解析-ESModule
  • C# VB.NET取字符串中全角字符数量和半角字符数量
  • 电机驱动基础
  • Rust 项目实战:多线程 Web 服务器
  • 第1篇:环境搭建与第一个Gin应用
  • 数字图像处理——滤波器核(kernel)
  • 构建你的 AI 模块宇宙:Spring AI MCP Server 深度定制指南
  • macOS 26 Tahoe
  • 2025年应用材料、机械与制造工程国际会议(ICAMMME 2025)
  • Starrocks 低基数全局字典优化
  • 桌面小屏幕实战课程:DesktopScreen 8 非易失性存储器NVS
  • 市面上重要的AI开发工具和框架
  • C++038(指针)
  • ci | cd
  • OpenHarmony如何获取app_signature证书指纹
  • jenkinsfile调用groovy
  • 如何为虚拟机上的 Manjaro Linux启用 VMware 拖放功能
  • API测试工具Parasoft SOAtest:应对API变化,优化测试执行
  • 简单项目 esp8266 红外接收 2025年6月24日21:35:32
  • JavaScript 存储对象 sessionStorage (会话存储) 和 localStorage(本地存储)
  • 正点原子——直流无刷电机-霍尔传感基本实现流程