前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >URL 中的 headers 和参数探究

URL 中的 headers 和参数探究

作者头像
airmelt
发布2022-12-02 11:24:16
2.6K0
发布2022-12-02 11:24:16
举报
文章被收录于专栏:air的代码小屋

最近在工作中碰到一个这样的问题,在做 Postman 请求的时候,Postman 返回的提示要求输入一个 token 来验证身份。开始我将这个 token 放在请求参数(request parameters)中,Postman 仍然提示我没有加入 token。后来经过同事提醒才知道,原来这个 token 需要放入标头(headers)中,这样才顺利完成了 Postman 的请求。那为什么这个 token 需要放入 headers 中,在链接(URL)中什么时候应该使用 headers 的参数什么时候又应该使用 URL 的请求参数呢?下面让我们一起带着问题来继续阅读。

我们都知道,在浏览器中想要找到自己的目标网页,需要在地址栏(URL bar)中输入 URL。URL 会带着你去目标网页。那 URL 是什么呢?通常 URL 指的是统一资源定位符(Uniform Resource Locator),它为我们表明了一个文件的存放地址以及我们如何找到这个文件。URL 主要由以下几个部分构成:协议部分(Scheme)、域名(Domain Name)、资源路径(Path to resource)以及参数(parameters)。用上图中的 URL 来举例:

  • 协议为 https,表明是安全版的 HTTP 协议
  • 域名为 learn.micsoft.com,也就是说我们要找的服务器是微软的
  • 资源路径为 /zh-cn/azure/,表示我们正在查看的是中文的 azure 文档
  • 参数为 / 后面的 ?product=popular,表示我们查询的产品是公开发布的

打个比方就是,你想找到我,我们约定好可以用寄信的方式(协议),收件人是 air(域名),地址为上海市闵行区紫星路 999 号微软公司(资源路径),最后我的座位号是 6666(参数),或者可以写成参数的形式 seatNo=6666。

在这里如果我们将资源路径也看作是一种参数,路径参数(path parameters),那么实际上我们需要讨论的就是路径参数和请求参数。路径参数是对于我们需要的资源的路径的明确定义。通过路径参数形成的逻辑层次结构,我们可以顺利地找到这个资源。类似我们在电脑的文件夹中一层一层的点击寻找目标文件,如下图所示是一张图片在我的 Macbook 上的路径;而请求参数,通常是对我们需要的资源进行了某项必需的动作,比如 page=10 表示我们当前进行了分页(pagination)的操作,当前页面为 10,再比如 gender=male 表示我们进行了过滤(filter)操作,只留下了男性用户。

了解了参数之后,接下来是探究 URL 的 headers。我们可能几乎没有听过这个词,但是应该都上过京东,京东的购物车功能就是使用 headers 中的 Cookie 实现的。那我们可以在哪儿看到 headers 呢?打开电脑的浏览器,按下 F12 打开开发者工具(DevTools),在网络(network)这个选项下,我们就可以找到 headers。

那 headers 究竟是什么呢?这里引用 Mozilla 上的描述:

HTTP headers(HTTP 首部,HTTP 头)表示在 HTTP 请求或响应中的用来传递附加信息的字段,修改所传递的消息(或者消息主体)的语义,或者使其更加精确。消息首部不区分大小写,开始于一行的开头,后面紧跟着一个 ':' 和与之相关的值。字段值在一个换行符(CRLF)前或者整个消息的末尾结束。 https://developer.mozilla.org/zh-CN/docs/Glossary/HTTP_header

headers 简单说来就是客户端的请求(request)和服务端响应(response)消息中附加携带的信息。具体来看可以将其分为 3 类:

执行操作。比如 Refresh 回应字段,用于设定可定时的重定向跳转,下面示例代码设定了 5 秒之后跳转到 "http://www.w3.org/pub/WWW/People.html"

代码语言:javascript
复制
Refresh: 5; url=http://www.w3.org/pub/WWW/People.html

元数据,就是创建这个消息的对象的属性。比如 User-Agent 请求字段,表示浏览器的身份标识字符串,可以利用这个字段来区分用户使用的设备。下面这段代码表示用户使用的操作系统为 Linux,浏览器为 Firefox。

代码语言:javascript
复制
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0

每次请求常规数据,一般来说是用于验证用户身份。比如 Authorization 请求字段,表示用于超文本传输协议的认证的认证信息,用户的令牌可以作为验证凭证访问网站。微软的网站常见的使用 Bearer 方式进行验证,bearer 令牌通过 OAuth 2.0 保护资源。下面为一个 Authorization 的示例。

代码语言:javascript
复制
Authorization: Bearer <token>

从以上的讨论我们不难得出结论,用于验证的 token 需要放到 headers 中,因为每次访问该网站都需要携带其作为验证凭证。

最后对 headers 和参数的使用进行总结。当我们需要定位或者过滤资源的时候,我们可以优先考虑选择参数;当我们需要进行验证或者传递附加消息的时候,我们可以优先考虑选择 headers。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 air的代码小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档