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

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.rhkb.cn/news/431254.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 257. 二叉树的所有路径,dfs

LeetCode 257. 二叉树的所有路径 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 目录 LeetCode 257. 二叉树的所有路径算法选择数据结构解题步骤算法流程算法代码算法分析易错点和注意事项相似题目 算法选择 深度优…

Excel 冻结多行多列

背景 版本:office 2021 专业版 无法像下图内某些版本一样,识别选中框选的多行多列。 如下选中后毫无反应,点击【视图】->【冻结窗口】->【冻结窗格】后自动设置为冻结第一列。 操作 如下,要把前两排冻结起来。 选择 C1&a…

2-102基于matlab的蒙特卡洛仿真

基于matlab的蒙特卡洛仿真,对64QAM和BPSK进行蒙特卡洛仿真,并绘出误码率曲线。程序已调通,可直接运行。 下载源程序请点链接: 2-102基于matlab的蒙特卡洛仿真

详解机器学习经典模型(原理及应用)——支持向量机

一、什么是支持向量机 支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,可用于解决数据分类(二分类)和回归问题。在分类问题上,SVM的核心思想是在特征空间中找到一个最优的超平面&#x…

jupyter安装与使用——Ubuntu服务器

jupyter安装与使用——Ubuntu服务器 一、安装miniconda3/anaconda31. 下载miniconda32. 安装miniconda33. 切换到bin文件夹4. 输入pwd获取路径5. 打开用户环境编辑页面6. 重新加载用户环境变量7. 初始化conda8.验证是否安装成功9.conda配置 二、安装jupyter2.1 conda安装2.2 配…

视频汇聚/视频存储/安防视频监控EasyCVR平台RTMP推流显示离线是什么原因?

视频汇聚/视频存储/安防视频监控EasyCVR视频汇聚平台兼容性强、支持灵活拓展,平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 EasyCVR安防监控视频综合管理平台采用先进的网络传输技术&#xff0…

PHP探索校园新生态校园帮小程序系统小程序源码

探索校园新生态 —— 校园帮小程序系统,让生活更精彩! 🌱【开篇:走进未来校园,遇见新生态】🌱 你是否厌倦了传统校园的繁琐与单调?是否渴望在校园里也能享受到便捷、智能的生活体验&#xff1…

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: A. 使用表存储数据,格式统一,便于维护。…

Windows版本下Redis安装与使用---详解

目录 1、下载Redis压缩包 2、解压到文件夹 3、启动Redis服务 4、打开Redis客户端进行连接 5、使用一些基础操作来测试 6、Redis常用的服务指令 7、C#项目使用redis 8、C#中使用StackExchange.Redis库操作Redis 9、执行 Redis 命令 10、常见报错和相关指令 1、下载Redi…

C语言——文件操作

目录 文件是什么 程序文件 数据文件 二进制文件和文本文件 文件名 文件的作用 文件的打开和关闭 流和标准流 流 标准流 文件指针 文件打开和关闭 打开文件:fopen 关闭文件:fclose 测试代码 文件具体操作 顺序读写 fputc ​编辑 fget…

【有啥问啥】 Self-Play技术:强化学习中的自我进化之道

Self-Play技术:强化学习中的自我进化之道 在人工智能的快速发展中,强化学习(Reinforcement Learning, RL)已成为推动智能体自主学习与优化的关键力量。Self-Play技术,作为强化学习领域的一项前沿创新,通过…

【智能大数据分析 | 实验一】MapReduce实验:单词计数

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…

git学习报告

文章目录 git学习报告如何配置vscode终端安装PowerShell安装 Microsoft.Powershell.Preview使用 git的使用关于团队合作 git指令本地命令:云端指令 git学习报告 如何配置vscode 安装powershell调教window终端,使其像Linux一样,通过Linux命令…

现代桌面UI框架科普及WPF入门1

现代桌面UI框架科普及WPF入门 文章目录 现代桌面UI框架科普及WPF入门桌面应用程序框架介绍过时的UI框架MFC (Microsoft Foundation Class)缺点 经典的UI框架**WinForms****QT****WPF** 未来的UI框架**MAUI****AvaloniaUI** WPF相对于Winform,QT,MFC的独立…

SysML图例-病毒检测设备

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> SysML图中词汇 SiNW-FET Silicon nanowire field-effect transistors,硅纳米线-场效应晶体管 更多信息可参见: 用于新冠检测的场效应晶体管生物传…

将CSS OKLCH颜色转换为十六进制HEX颜色和十六进制整数格式

我查找了全网都查不到OKLCH()方法是颜色转换方法,那今天小编就给大家分享我的方法,可能会有点点误差,但是大体不影响。 程序员必备宝典https://tmxkj.top/#/示例:oklch(0.253267 0.015896 252.418) 得到H…

YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了 VanillaNet,一种拥抱设计优雅的神经网络架构。通过避免高深度、快捷方式和复杂操…

多级目录SQL分层查询

需求&#xff1a;有多级目录&#xff0c;而目录的层级是不固定的&#xff0c;如下图所示&#xff1a; 数据结构&#xff1a; sql语句&#xff1a; <select id"getList" resultType"com.hikvision.idatafusion.dhidata.bean.vo.knowledgebase.KnowledgeBaseT…

瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;是Laval官方社区主荐的一款鸿蒙开发主板。 一、安装输入法并查看输入…

Fyne ( go跨平台GUI )中文文档-Fyne总览(二)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2​​​​​​​ 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne…