【HTTP】请求“报头”,Referer 和 Cookie

news2024/9/21 21:09:51

Referer

描述了当前这个页面是从哪里来的(从哪个页面跳转过来的)

浏览器中,直接输入 URL/点击收藏夹打开的网页,此时是没有 referer。当你在 sogou 页面进行搜索时,新进入的网页就会有 referer image.png|423

有一个非常典型的用途:广告中

  • 在搜索广告中,都是按照点击计费的,双方都要进行次数统计
  • 一个公司可能会在很多平台上投放广告,要知道这个点击是从哪个平台上来的,就可以看 referer

referer 是否会被篡改呢?
这种情况在十年前左右是非常常见的,运营商(中国移动/中国联通/中国电信)进行篡改。

  1. 有动机

    • 他们自己有广告系统,就可以把 referer 改成他们自己广告系统的 referer(比如,明明是从搜狗进入的改为从他们的网站进入的)
  2. 有能力

    • 运营商提供了通信设施,在对应的路由器/交换机上部署程序,让程序解析 HTTP 数据,把 referer 改成自己的就可以了

这种行为叫“运营商劫持”。当年,互联网那个还是个新鲜东西,对应的法律还不是特别的完备。官司当然能打,大了官司也肯定能打赢,但是中间花的时间一定会非常长(之前没有可以参考的法律条文或者是相关案例),再加上运营商手下也有强悍的法务团队,进行反复拉扯。赢了官司,输了买卖。

当时百度就联合搜狗、360 这些广告平台,一起去打官司。光法律还不够,在技术上还要进行反制,让你这样的劫持操作不能继续下去。这时候,HTTPS 就登场了。

HTTPS 中的 S 就是 SSL(网络中用于加密的协议),加密就能把 headerbody 进行加密,网络上传输就是密文了。运营商想要修改,就得先破解,就算你能解密,你也篡改不了(一旦修改就能被用户的浏览器感知到)

当时这些广告平台就纷纷升级成了 HTTPS,后续越来越多的网站都引入了 HTTPS。直到今天,现在网络上 HTTPS 的网站是绝对的主流,反而纯 HTTP 的网站很少见了

Cookie

非常重要的报头中的属性,要更复杂一些。程序员自定义的键值对


浏览器与持久化存储

Cookie 本质上是一个浏览器这边,进行本地持久化存储(数据要存储到硬盘中)数据的机制

浏览器作为电脑上的程序,能否直接读写本地磁盘文件呢?

  • 可以,因为系统提供了 API 用来操作文件,作为一个程序当然可以调用这些 API 来操作了

浏览器上运行的网页,能否通过浏览器提供的 API 来读写本地磁盘文件呢?

  • 理论可行,但浏览器禁止了这种做法(浏览器并没有给网页提供这样的 API),一个网页不能直接读写你的硬盘文件
  • 禁止这种做法是为了安全性。随手一点,网页就打开了。万一打开的是恶意网站,此时人家通过网页直接把你电脑上的所有学习资料都给你删了,必然会造成重大损失

但是确实有些网站,是需要把一些信息保存到浏览器这边,进行持久保存的。比如当前登录用户的身份信息。浏览器退而求其次,给网页提供了这样的 API,能够有限度(按照键值对的格式)的存储数据,而不能随意访问文件系统

Cookie 的作用

Cookie 就是这样的一种存储机制,还有 LocalStorageindexDB。他们都是浏览器提供的网页可以存储数据的机制

HTTP 请求中的 Cookie 字段,就是把本地存储的 Cookie 信息发送到服务器这边。HTTP 响应中会有一个 Set-Cookie 字段,就是服务器告诉浏览器你要在本地保存哪些信息。这些都是键值对结构,程序员自定义的

Cookie 的作用就非常类似于去医院看病的流程

  1. 先去挂号,办理一个就诊卡
  2. 来到了脑科,见到医生,医生对我说的第一句话:先刷下就诊卡就诊卡上面保存着我这边的一些患者信息,刷卡之后,医生就一目了然了。医生让我去做个 B 超
  3. 来到了对应科室,医生第一句话还是:先刷下就诊卡。刷卡之后,医生就看到了我要做什么检查
  4. 回到脑科,拿着单子给医生看结果,医生见到我们还是要我们刷就诊卡。之后医生就给我们开药
  5. 来到药房
  6. 来到护士站,看就诊卡,配药打针

  • 每次来到一个新的科室,都可以认为是客户端给服务器发起了一个新的请求
  • 每次刷的就诊卡,就相当于是使用 Cookie 中的信息,来让服务器对我这个客户端有了一个清楚的认识
  • 就诊卡本身,就是客户端手里拿着的持久存储数据的机制,就是 Cookie

几个重要结论

1. Cookie 从哪里来

服务器返回给浏览器的,通常都是首次访问/登陆成功之后

2. Cookie 到哪里去?

Cookie 会存储在浏览器本地主机的硬盘上,后续每次访问服务器都会带上 Cookie。不同的客户端,保存的 Cookie 是不同的。即使是一个主机,使用不同的浏览器,Cookie 大概率也不同

3. Cookie 中存什么?

键值对格式的数据。这里的内容都是程序员自定义的,和 query string 一样,外人无法知晓。不同网站的 Cookie 都是不一样的(不是一家的,键值对格式就不一样)

4. Cookie 在浏览器这边如何组织?

在硬盘本地保存,是按照不同的域名为维度分别存储。你的浏览器访问百度,有一组 Cookie;访问搜狗,也有一组 Cookie。他们彼此之间是隔离的,不会相互影响image.png|334

  1. Cookie 的用途是什么?

用来在客户端保存数据,其中最主要的是保存用户的身份标识,这样服务器就可以通过标识来区分用户了。
一些其他的业务数据一般不会存储到 Cookie 中,Cookie 随时可以删除掉,把业务数据存储在服务器,通过 Cookie 中的身份标识找到对应的数据(上面开的药,信息就不会存在就诊卡中,而是保存在医院的服务器中,可以通过就诊卡中的数据在医院服务器中找到要的信息)

浏览器中的账号密码不会在 Cookie 中保存,Cookie 是要传输给服务器的。一般浏览器保存的密码都是明文密码,明文密码放到 Cookie 中当然不合适。虽然有 HTTPS 能加密,但 HTTPS 是侧重于“不能被篡改”,而不是“不能被解密”


一个 HTTP 请求中,有以下部分可以携带程序员自定义的数据:

  1. query string
  2. Cookie
  3. body
  4. URLpath
  5. path
    之后使用 Spring 搭建网站,就是围绕上述几个部分,展开进一步的编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习-图像处理篇1.3pytorch神经网络例子

batch:一批图像数量 官方例子 #model import torch.nn as nn import torch.nn.functional as Fclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__()self.conv1 nn.Conv2d(3,16,5)self.pool1 nn.MaxPool2d(2, 2)self.conv2 nn.Conv2d(16, 32, 5)self.…

Python 找到给定点集的简单闭合路径(Find Simple Closed Path for a given set of points)

给定一组点,将这些点连接起来而不相交 例子: 输入:points[] {(0, 3), (1, 1), (2, 2), (4, 4), (0, 0), (1, 2), (3, 1}, {3, 3}}; 输出:按以下顺序连接点将 不造成任何交叉 {(0, 0), (3, …

将sqlite3移植到开发板上

1、下载c源码 sqlite官网下载C源码:SQLite Download Page 点击第二个链接下载 2、解压 1、将下载好的c源码,放在linux下, 2、解压压缩包:tar -zxvf sqlite-autoconf-3460100 新建一个用存放 编译出来的文件: mkd…

Web开发:使用C#创建、安装、调试和卸载服务以及要注意的写法

目录 一、创建服务 1.创建项目(.NET Framework) 2.重命名 3.编写逻辑代码 二、安装服务 1.方案一:利用VS2022安装文件的配置 选择添加安装程序 安装文件的介绍及配置 ​编辑​ 重新编译 工具安装 2.方案二:编写bat脚本安…

Excel match 函数使用方法,和 index 函数是绝配

大家好,这里是效率办公指南! 🔎 在处理Excel数据时,我们经常需要找出特定数据在列表或数组中的位置。MATCH函数正是为此设计的,它可以返回一个值在指定数组中的相对位置。今天,我们将详细介绍MATCH函数的使…

MySQL基础(13)- MySQL数据类型

目录 一、数据类型概述 1.MySQL中的数据类型 二、整型 1.数据类型可选属性 2.使用建议 三、浮点数、定点数、位类型 1.类型介绍 2.浮点类型 3.定点数类型 4.位类型 四、日期时间类型 1.YEAR 2.DATE 3.TIME 4.DATETIME 5.TIMESTAMP 6.TIMESTAMP和DATETIME的区别…

Android Studio开发发布教程

本文讲解Android Studio如何发布APP。 在Android Studiobuild菜单栏下点击Generate Singed Bundle/APK…打开对话框。 选择APK点击Next 点击Create New...进行创建

Flask找上下文源码

1. app Flask(__name__) app.__call__ 1.1 按住 command 键 点击 进到这个函数里 1.2 接着找 return 看看返回什么 点进去 1.3 找到定义函数 1.4 点进去先看这个里边有啥 1.5 找到定义类 1.6 找到RequestContext 类 1.7 找到 RequestContext ---> 的push 方法 1.8 点击 _c…

Redis面试真题总结(二)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ Redis常见的数据类型有哪些? string 字符串 字符串类型…

Mobile net V系列详解 理论+实战(3)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. 基础概念的讨论3.1 深度可分离卷积3.2 线性瓶颈3.3 个人理解 4. 模型架构细节5. 实验细节6. 实验讨论7. 总结 论文精讲部分 鉴于上一小节中采用的代码是V2的模型,因此本章节现对V2模型论文讲解,便于…

【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现

1.二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 前序遍历方式:根-左子树-右子树。 递归实现: 要传一个子函数来实先递归,原因是原函数返回值为vector,在原函数迭代,返回值就难…

基于python上门维修预约服务数据分析系统

目录 技术栈和环境说明解决的思路具体实现截图python语言框架介绍技术路线性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示操作可行性详细视频演示源码获取 技术栈和环境说明 结合用户的使用需求,本系统采用运用较为广…

一、机器学习算法与实践_03概率论与贝叶斯算法笔记

1、概率论基础知识介绍 人工智能项目本质上是一个统计学项目,是通过对 样本 的分析,来评估/估计 总体 的情况,与数学知识相关联 高等数学 ——> 模型优化 概率论与数理统计 ——> 建模思想 线性代数 ——> 高性能计算 在机器学…

Qt窗口——对话框

文章目录 对话框自定义对话框对话框分类消息对话框QMessageBox使用示例自定义按钮快速构造对话框 颜色对话框QColorDialog文件对话框QFileDialog字体对话框QFontDialog输入对话框QInputDialog 对话框 对话框可以理解成一个弹窗,用于短期任务或者简洁的用户交互 Qt…

AIoT智能工控板

在当今竞争激烈的商业环境中,企业需要强大的科技力量来助力腾飞,AIoT智能工控板就是这样的力量源泉。 其领先的芯片架构设计,使得主板的性能得到了极大的提升。无论是数据的处理速度、图形的渲染能力,还是多任务的并行处理能力&a…

【Linux笔记】虚拟机内Linux内容复制到宿主机的Window文件夹(文件)中

一、共享文件夹 I、Windows宿主机上创建一个文件夹 目录:D:\Centos_iso\shared_files II、在VMware中设置共享文件夹 1、打开VMware Workstation 2、选择需要设置的Linux虚拟机,点击“编辑虚拟机设置”。 3、在“选项”标签页中,选择“共…

【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析

2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析 更新进展 【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用…

Remix在SPA模式下,出现ErrorBoundary错误页加载Ant Design组件报错,不能加载样式的问题

Remix是一个既能做服务端渲染,又能做单页应用的框架,如果想做单页应用,又想学服务端渲染,使用Remix可以降低学习成本。最近,在学习Remix的过程中,遇到了在SPA模式下与Ant Design整合的问题。 我用Remix官网…

简单多状态dp第三弹 leetcode -买卖股票的最佳时机问题

309. 买卖股票的最佳时机含冷冻期 买卖股票的最佳时机含冷冻期 分析: 使用动态规划解决 状态表示: 由于有「买入」「可交易」「冷冻期」三个状态,因此我们可以选择用三个数组,其中: ▪ dp[i][0] 表示:第 i 天结束后&#xff0c…

探索AI编程新时代:GitHub Copilot如何重塑开发者工作效率

在当今技术瞬息万变的时代,软件开发者们每天都在努力寻找更高效的编程方法。面对繁忙的工作日程和不断增加的项目压力,如何在编码过程中大幅提升效率成为了一个备受关注的话题。在众多工具中,GitHub Copilot以其强大的AI驱动能力脱颖而出&…