referrerpolicy-以最小的成本实现系统的图片上传

news/2025/3/19 15:51:42/文章来源:https://www.cnblogs.com/renzhiwei2017/p/18781166

背景

系统上传图片一般有以下三种方案:

  1. 购买云存储(比如 AWS S3、阿里云 OSS、腾讯云 COS),获取图片URL
  2. 直接将图片上传到服务器,存储在本地作为静态资源
  3. 使用第三方的图片服务(比如有道、博客园),借用对方资源

结合本系统需求:自建博客尽可能减少预算,方案1放弃;方案二似乎可行,但随着图片增加会不停的占用资源,且不方便清除未使用的图片。最后决定方案三。

使用第三方图片,经常会遇到图片无法加载的问题。例如,你可能会在富文本编辑器(如 Tiptap)中直接粘贴 Markdown 格式的图片链接,如下所示:

![image](https://img.example.com/image.png)

然而,图片却无法显示,浏览器控制台报错:​403 Forbidden。这是因为图片服务器启用了 ​防盗链机制,通过检查 Referer 请求头来限制访问。当图片嵌入到你的网站时,浏览器会发送包含你的网站地址的 Referer,导致图片服务器拒绝访问。

为了解决这个问题,我们可以使用 referrerpolicy 属性,控制浏览器是否发送 Referer 头。本文将详细介绍 referrerpolicy 的作用、使用场景以及如何在实际开发中应用它。

什么是 Referer 头?

Referer 是 HTTP 请求头的一部分,用于告诉服务器请求的来源。例如,当你在 https://example.com/page 页面中加载一张图片 https://img.example.com/image.png 时,浏览器会发送以下请求头:

httpGET /image.png HTTP/1.1
Host: img.example.com
Referer: https://example.com/page

Referer 头的作用包括:

  1. 防盗链:图片服务器可以通过检查 Referer 头,限制只有特定域名的请求才能访问资源。
  2. 流量统计:服务器可以分析 Referer 头,了解用户是从哪个页面跳转过来的。
  3. 安全防护:某些服务器会根据 Referer 头判断请求是否合法。

什么是 referrerpolicy

referrerpolicy 是一个 HTML 属性,用于控制浏览器在发送请求时是否包含 Referer 头。通过设置 referrerpolicy,我们可以决定是否发送 Referer 头,以及发送哪些信息。

常用值

描述
no-referrer 完全不发送 Referer 头。
no-referrer-when-downgrade 默认值。HTTPS 页面加载 HTTP 资源时不发送 Referer 头,其他情况发送。
origin 只发送当前页面的域名(如 https://example.com),而不是完整 URL。
origin-when-cross-origin 同源请求发送完整 URL,跨域请求只发送域名。
same-origin 同源请求发送 Referer 头,跨域请求不发送。
strict-origin 只发送域名,且 HTTPS 页面加载 HTTP 资源时不发送。
strict-origin-when-cross-origin 同源请求发送完整 URL,跨域请求只发送域名,且 HTTPS 页面加载 HTTP 资源时不发送。
unsafe-url 总是发送完整 URL,即使从 HTTPS 页面加载 HTTP 资源。

使用场景

1. 绕过防盗链机制

当图片服务器启用了防盗链机制时,我们可以通过设置 referrerpolicy="no-referrer",阻止浏览器发送 Referer 头,从而绕过限制。

<img src="https://img.example.com/image.png" referrerpolicy="no-referrer">

2. 保护隐私

在某些场景下,我们可能不希望泄露当前页面的 URL。例如,当用户点击外部链接时,可以通过设置 referrerpolicy="no-referrer",避免发送 Referer 头。

<a href="https://external.com" referrerpolicy="no-referrer">External Link</a>

3. 减少信息泄露

在 HTTPS 页面加载 HTTP 资源时,默认会发送 Referer 头,这可能导致信息泄露。通过设置 referrerpolicy="no-referrer-when-downgrade",可以避免这种情况。

<img src="http://img.example.com/image.png" referrerpolicy="no-referrer-when-downgrade">

在 Tiptap 中的应用

如果你在 Tiptap 编辑器中直接粘贴 Markdown 格式的图片链接,可能会遇到 403 Forbidden 问题。可以通过以下方式解决:

1. 自定义 Image 扩展

在 Tiptap 中扩展默认的 Image 节点,添加 referrerpolicy 属性。

import { mergeAttributes } from "@tiptap/core";const CustomImage = Image.extend({addAttributes() {return {...this.parent?.(),referrerpolicy: {default: "no-referrer",},};},renderHTML({ node, HTMLAttributes }) {return ["img",mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {referrerpolicy: "no-referrer", // 强制添加 referrerpolicy}),];},
});

2. 在 Tiptap 中使用自定义扩展

将 CustomImage 添加到 Tiptap 的扩展列表中。

import { Editor } from "@tiptap/core";
import CustomImage from "./CustomImage";const editor = new Editor({extensions: [CustomImage],
});

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

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

相关文章

grafana创建下拉框

grafana如何创建下拉框: 1.在dashabord中进行配置: 1.1进入你想要添加下拉框的dashboard中,点击Edit1.2 点击Settings 1.3 选择Variables-》Add New variable 1.4 选择variable type,输入变量的name,label 选择数据源data source 写入sql,点击Run query可以立马查看到查询出…

一次100W+数据级别的渲染优化

组织架构的列表页有关于公司人员架构的树形结构展示,某大客户有10万员工,造成组织架构的列表渲染卡顿,用户点击经常造成页面崩溃。 需求背景:左边是树形目录,多层级展示,层级结构未作限制。点击左边目录会展示对应的列表,点击右边对应用户的组织属性,也会联动左边的目录…

小程序 反编译

背景 小程序测试难点,数据包加密?有签名存在?导致测试受阻 工具 wedecode wedecode https://github.com/biggerstar/wedecode1.首次使用,源码安装方式 git clone https://github.com/biggerstar/wedecode npm install # 如果 npm 安装很慢, 可以使用右侧命令换国内的淘宝…

日志文件必须输出到控制台才香对吗

在实际工作中发现很多人喜欢将日志输出到控制台,有的甚至直接只是输出到控制台,都不输出到日志文件中。 这种操作看似人畜无害,实际上直接影响着系统的性能,很多时候还难以排查,这里我从实际举例都背后原因来分析为什么这么做并不香。通常的日志配置 这里我们使用经常使用…

C#通过FTP获取服务端文件

一、简介实际需求是在前端修改了配置文件后,由上位机统一分发给所有设备,因为下位机支持FTP协议,因此选用FTP来实现文件传输功能。 二、准备工作 1、FTP服务搭建FTP服务端选用FileZilla Server,免费开源,简单好用,可以下载中文版的。下载地址:下载 - FileZilla中文网,也…

20242942 2024-2025-2 《网络攻防实践》实验三

1.实验内容 (1)动手实践tcpdump 使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程进行嗅探,回答问题:你在访问www.tianya.cn网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什么? (2)动手实践Wireshark 使用Wireshark开源软件对在本机上以TELNET方式…

Oracle OCP认证没落了吗?

Oracle OCP认证没落了吗? Oracle的OCP认证是数据库领域必考的一个认证,但随着国产化的发展,国内很多企业开发了自己的数据库产品,这种情况对很多人造成了错误的认识:OCP被淘汰了吗?不然,从行业需求、技术趋势、认证体系变化等角度综合分析,Oracle OCP证书并未完全“没…

查看dll文件的publicKeyToken

输入: SN -T "C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin\log4net.dll"

把 DeepSeek 接入电话系统后,不知疲倦的智能客服向我们走来了

我们基于deepseek和Freeswitch做了一个智能电话客服。 它会基于给定的FAQ知识库来回答问题,自动进行语音识别和语音合成。 语音识别我们采用的是开源的FunAsr,语音合成采用的是第三方商用的API接口。我们接下来介绍下它的内部组成部分。【 第一阶段】当电话拨通电话后,电话服…

Seata的工作模式

Seata的分布式模型中各个角色的作用: 1.TM(事务管理器)是分布式事务的发起方,负责定义全局事务的边界(开始,提交,回滚),并于TC交互协调事务状态。 核心职责: ​ 通过@GlobalTransctional注解标记全局事务的起点。 ​ 向TC注册全局事务 ​ 根据业务逻辑决定全局事务的提交或回滚…

dify升级

一、需求 从0.14.2升级到0.15.3,要求模型供应商,创建的应用数据等等,不能丢失。二、安装0.14.2 下载dify代码cd /optgit clone https://github.com/langgenius/dify.gitcd dify/切换到tag 0.14.2git checkout 0.14.2git pull origin 0.14.2运行difycd dockercp .env.example…

机器人弧焊电源气体省气装置的工作原理是什么?

焊接机器人节气装置,作为一种在焊接流程中至关重要的气体调控设备,其核心宗旨在于在确保焊接作业品质卓越的同时,通过高度精确的气体流量调控机制,有效缩减气体的消耗量,进而达成显著的节气效益。该装置详尽地集成了气体质量流量控制器、适配的电源适配器、精准的电流传感…