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

【HTTP】认识 URL 和 URL encode

文章目录

  • 认识 URL
  • URL 基本格式
    • **带层次的文件路径**
    • **查询字符串**
    • **片段标识符**
  • URL encode

认识 URL

计算机中非常重要的概念,并不仅仅是在 HTTP 中使用。用来描述一个网络资源所处的位置,全称“唯一资源定位符

  • URI 是“唯一资源标识符
  • 严格的说 URI 的范围比 URL 更广一些

标识一个变量的身份,可以使用变量的地址(C 语言),也可以使用变量的 hashcodeJava
标识身份就相当于是 URI 这样的东西;我们使用地址,就相当于是 URL(地址也可以起到标识身份的效果)

URL 基本格式

https://www.sogou.com/ 就是一个最简单的 URL

  • https://,协议的名称
  • www.sogou.com,域名

image.png


image.png

  • 登录信息写在这里不太安全,现在都是通过“单独的登录界面”进行身份验证
  • 这里的域名,也可以是 IP 地址(域名和 IP 地址可以互相转换的)
  • 这里的端口号,代表你要访问服务器的那个端口。当前服务器上会有很多程序,这些程序我们需要进行区分
    • 如果 URL 中不带端口号,浏览器就会默认给一个端口(服务器的端口,不是客户端的,也就不是系统随机分配的那个)。此处用什么端口作为默认值取决于协议:http==>80https==>443

带层次的文件路径

  • URL 代表的是网络上的资源位置,你就要知道
    1. 通过 IP 地址知道服务器在哪
    2. 通过端口号知道程序是哪个
    3. 通过路径知道是访问哪个资源
      这里可能会对应一个真实的硬盘文件,也可能会对应一个虚拟的文件

查询字符串

  • 是针对请求的内容做的补充说明
  • 是客户端给服务器传递信息的重要途径
  • 这里的组织方式是按照键值对的方式来组织的
    • 这里的键值对的内容,就是程序员自定义的,没有标准规定
    • 所以一般查询字符串具体是什么意思,作为外人无法得知,必须是写这个代码的程序猿才知道

片段标识符

  • 用来标识当前页面的某个部分。通过不同的片段标识可以完成页面的跳转(目录定位跳转)

结合上述 IP 地址、端口号、路径、查询字符串,就可以描述出一个网络资源了

  • IP 地址==>确定服务器是哪个
  • 端口号==>确定程序是哪个
  • 路径==>确定访问的资源是哪个
  • 查询字符串==>补充说明

URL encode

query string 里面是自定义的键值对。在 URL 中,本身有一些特殊符号具有特定的含义(/:?@…)

如果 URLquery string 中也包含同样的符号怎么办?

  • 如果直接写进去,就可能会导致服务器/浏览器解析失败
    靠谱的方法就是对上述符号进行"转义",转义的过程就叫“URL encode

不仅针对标点符号,还要对汉字进行转义。因为汉字的 UTF8/GBK 等编码值其中可能某个字节就恰好和某个符号的 ASCII 码一致,此时就麻烦了

当你在浏览器中搜索 C++的时候,+就会被转义成%2Bimage.png

  • + 的 ASCII 拿出来,使用十六进制表示,并且加上 %

当你在浏览器中搜索“蛋糕”的时候,“蛋糕”就会被转义成%E8%9B%8B%E7%B3%95 image.png|413

  • 但是在浏览器中看到的还是“蛋糕”,只有复制出去了才能看到。因为浏览器自动帮你转换了
  • 将““和““的 UTF8 编码进行十六进制表示,并且在前面加上%image.png|563

这里的 URL encode 是非常重要的。在实际开发中,当要构造一个 URL,尤其是 URLquery string 中要包含中文的时候,务必要进行编码!!!


http://www.kler.cn/a/312129.html

相关文章:

  • yolov7论文翻译
  • git status 命令卡顿的排查
  • Ubuntu 的 ROS 操作系统turtlebot3环境搭建
  • [Docker#4] 镜像仓库 | 部分常用命令
  • 【随机种子】Random Seed是什么?
  • 自监督学习:机器学习的未来新方向
  • KL散度(Kullback-Leibler)
  • java框架
  • 深入理解 MySQL MVCC:多版本并发控制的核心机制
  • vmware,centos8(虚拟机) 的安装
  • Python Web开发中的持续集成与持续交付(CI/CD)
  • cassandra指定配置文件的docker启动方法
  • 【学术会议征稿】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024)
  • 微信小程序能不能有一种公共的分包,能被普通的分包引用其资源?(内有解决方案)
  • 【测试】博客系统测试报告
  • docker面经
  • 【Mac】系统环境配置
  • mybatisplus分页查询学习
  • QT应用开发的C++功能框架以及实战入门开发项目场景
  • 计算机网路(应用层)
  • 中台架构下的数据仓库与非结构化数据整合
  • Nuxt Kit 中的插件:创建与使用
  • ffmpeg实现视频的合成与分割
  • 特征融合魔改,看这一篇就够了
  • Microsoft Edge 五个神级插件
  • vue 中属性值上变量和字符串怎么拼接