【一起学Rust | 框架篇 | Tauri2.0框架】在Tauri应用中设置Http头(Headers)

文章目录

  • 前言
  • 一、配置准备
    • 1. 检查版本
    • 2. 使用条件
    • 3. 支持的请求头(并不是全部支持)
  • 二、使用步骤
    • 1. 如何配置header
    • 2. 框架集成
      • 1. 对于`Vite`系列、`Nuxt`、`Next.js`这种前端框架
        • `Vite`系列框架
        • `Angular`系列框架
        • `Nuxt`系列框架
        • `Next.js`系列框架
      • 2. 对于`Yew`和`Leptos`这种全栈框架


前言

Tauri是一个基于Rust的跨平台桌面应用框架,允许开发者使用Web技术(如HTML、CSS和JavaScript)创建桌面应用。Tauri2.0是该框架的最新版本,提供了许多新功能和改进。其中一个重要的功能是对Http头(Headers)的支持。在本文中,我们将探讨如何在Tauri应用中设置Http头,包括为什么设置Http头是必要的、如何设置Http头,以及一些常见的Http头设置场景。

在Web开发中,Http头(Headers)是Http请求和响应的一部分,用于传递额外的信息。Http头可以用来指定请求的方法、请求体的格式、认证信息等。设置Http头是必要的,因为它可以帮助开发者控制Http请求的行为,例如指定请求的缓存策略、设置跨域资源共享(CORS)头等。特别是在Tauri应用中,设置Http头可以帮助开发者与后端服务器进行更好的交互。

在应用开发过程中,对于http的headers控制是一个通常的需求,在过去的tauri版本中,如果你想要设置http请求头,就需要ipc调用rust层的方法,然后再设置请求头,就比较麻烦,或者你可以试试用Fetch看看能否得到你想要的效果。但是现在,最近Tauri官方就给出了配置http请求头的方法,尽管并不能尽善尽美,但也足够开发使用了。


一、配置准备

1. 检查版本

首先确认你的tauri版本要大于2.1.0,因为这是后面新增的特性,如果你是刚刚从头创建的Tauri项目,那么可以跳过这步。

2. 使用条件

然后就是要明确知道什么时候会用上这个配置。

配置中定义的标头会随对网页视图的响应一起发送。这并不包括进程间通信(IPC)消息和错误响应。更具体地说,通过crates/tauri/src/protocol/tauri.rs中的get_response函数发送的每个响应都将包含这些标头。

3. 支持的请求头(并不是全部支持)

  • Access-Control-Allow-Credentials
  • Access-Control-Allow-Headers
  • Access-Control-Allow-Methods
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age
  • Cross-Origin-Embedder-Policy
  • Cross-Origin-Opener-Policy
  • Cross-Origin-Resource-Policy
  • Permissions-Policy
  • Timing-Allow-Origin
  • X-Content-Type-Options
  • Tauri-Custom-Header

以上请求头的意义均可在MDN找到
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

以下是官方建议

  1. Tauri-Custom-Header并非用于生产环境。
  2. 内容安全策略(Content-Security-Policy,CSP)在此处未定义。(暂时先不用管)

二、使用步骤

1. 如何配置header

官方文档写的,tauri的header支持以下值

  • 字符串
  • 字符串数组
  • key-value对象,但是value必须是字符串
  • null

标头值始终会针对实际响应转换为字符串。根据配置文件的外观,某些标头值需要进行组合。以下是创建复合标头的规则:

  • string - 与最终转化的结果保持一致
  • Array - 结果是用, 连接起来
  • key-value - 最终打包的格式是key + 空格 + value,然后结尾用;分割
  • null - 最终会被忽略

例如

// src-tauri/tauri.conf.json
{//..."app":{//..."security": {//..."headers": {"Cross-Origin-Opener-Policy": "same-origin","Cross-Origin-Embedder-Policy": "require-corp","Timing-Allow-Origin": ["https://developer.mozilla.org","https://example.com",],"X-Content-Type-Options": null, // 忽略"Access-Control-Expose-Headers": "Tauri-Custom-Header","Tauri-Custom-Header": {"key1": "'value1' 'value2'","key2": "'value3'"}},// 告诉内容安全策略(CSP)手动制定请求头。"csp": "default-src 'self'; connect-src ipc: http://ipc.localhost",}}
}

Tauri-Custom-Header并非用于生产环境。对于测试:请记得相应地设置Access-Control-Expose-Headers

在这个示例中,Cross-Origin-Opener-PolicyCross-Origin-Embedder-Policy被设置为允许使用SharedArrayBuffer (文档在MDN)。Timing-Allow-Origin允许从列出的网站加载的脚本通过资源定时 API 访问详细的网络定时数据。

最终的请求头结果会转化为

access-control-allow-origin:  http://tauri.localhost
access-control-expose-headers: Tauri-Custom-Header
content-security-policy: default-src 'self'; connect-src ipc: http://ipc.localhost; script-src 'self' 'sha256-Wjjrs6qinmnr+tOry8x8PPwI77eGpUFR3EEGZktjJNs='
content-type: text/html
cross-origin-embedder-policy: require-corp
cross-origin-opener-policy: same-origin
tauri-custom-header: key1 'value1' 'value2'; key2 'value3'
timing-allow-origin: https://developer.mozilla.org, https://example.com

2. 框架集成

一些开发环境需要额外的设置,以模拟生产环境。

1. 对于Vite系列、NuxtNext.js这种前端框架

Vite系列框架

对于使用Vite来构建的项目(包括Qwik, React, Solid, Svelte, 和 Vue),只所需的标头添加到vite.config.ts中。

import { defineConfig } from 'vite';export default defineConfig({// ...server: {// ...headers: {'Cross-Origin-Opener-Policy': 'same-origin','Cross-Origin-Embedder-Policy': 'require-corp','Timing-Allow-Origin': 'https://developer.mozilla.org, https://example.com','Access-Control-Expose-Headers': 'Tauri-Custom-Header','Tauri-Custom-Header': "key1 'value1' 'value2'; key2 'value3'"},},
})
Angular系列框架

Angular需要写入angular.json,按照以下方式

{//..."projects":{//..."insert-project-name":{//..."architect":{//..."serve":{//..."options":{//..."headers":{"Cross-Origin-Opener-Policy": "same-origin","Cross-Origin-Embedder-Policy": "require-corp","Timing-Allow-Origin": "https://developer.mozilla.org, https://example.com","Access-Control-Expose-Headers": "Tauri-Custom-Header","Tauri-Custom-Header": "key1 'value1' 'value2'; key2 'value3'"}}}}}}
}
Nuxt系列框架

Nuxt系列框架需要写入的文件是nuxt.config.ts

// nuxt.config.ts
export default defineNuxtConfig({//...vite: {//...server: {//...headers:{'Cross-Origin-Opener-Policy': 'same-origin','Cross-Origin-Embedder-Policy': 'require-corp','Timing-Allow-Origin': 'https://developer.mozilla.org, https://example.com','Access-Control-Expose-Headers': 'Tauri-Custom-Header','Tauri-Custom-Header': "key1 'value1' 'value2'; key2 'value3'"}},},
});
Next.js系列框架

Next.js并不依赖于Vite,但是异曲同工,写入的文件是next.config.js

// next.config.js
module.exports = {//...async headers() {return [{source: '/*',headers: [{key: 'Cross-Origin-Opener-Policy',value: 'same-origin',},{key: 'Cross-Origin-Embedder-Policy',value: 'require-corp',},{key: 'Timing-Allow-Origin',value: 'https://developer.mozilla.org, https://example.com',},{key: 'Access-Control-Expose-Headers',value: 'Tauri-Custom-Header',},{key: 'Tauri-Custom-Header',value: "key1 'value1' 'value2'; key2 'value3'",},],},]},
}

2. 对于YewLeptos这种全栈框架

这种全栈框架只需要新建个文件Trunk.toml,然后按照以下内容写入即可

# Trunk.toml
#...
[serve]
#...
headers = {"Cross-Origin-Opener-Policy" = "same-origin","Cross-Origin-Embedder-Policy" = "require-corp","Timing-Allow-Origin" = "https://developer.mozilla.org, https://example.com","Access-Control-Expose-Headers" = "Tauri-Custom-Header","Tauri-Custom-Header" = "key1 'value1' 'value2'; key2 'value3'"
}

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

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

相关文章

Uniapp 开发中遇到的坑与注意事项:全面指南

文章目录 1. 引言Uniapp 简介开发中的常见问题本文的目标与结构 2. 环境配置与项目初始化环境配置问题解决方案 项目初始化注意事项解决方案 常见错误与解决方案 3. 页面与组件开发页面生命周期注意事项示例代码 组件通信与复用注意事项示例代码 样式与布局问题注意事项示例代码…

【蓝桥杯集训·每日一题2025】 AcWing 6135. 奶牛体检 python

6135. 奶牛体检 Week 1 2月21日 农夫约翰的 N N N 头奶牛站成一行,奶牛 1 1 1 在队伍的最前面,奶牛 N N N 在队伍的最后面。 农夫约翰的奶牛也有许多不同的品种。 他用从 1 1 1 到 N N N 的整数来表示每一品种。 队伍从前到后第 i i i 头奶牛的…

算法系列之搜素算法-二分查找

在算法中,查找算法是处理数据集合的基础操作之一。二分查找(Binary Search)是一种高效的查找算法,适用于有序数组或列表。本文将介绍二分查找的基本原理、Java实现。 二分查找介绍 二分查找是一种在有序数组中查找特定元素的算法…

JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能

提到飞行记录器,或许你的脑海中并未立刻浮现出清晰的画面,但一说起“黑匣子”,想必大多数人都能恍然大悟,知晓其重要性及用途。在航空领域,黑匣子作为不可或缺的设备,默默记录着飞行过程中的每一项关键数据…

C#开发——ConcurrentDictionary集合

ConcurrentDictionary<TKey, TValue> 是 C# 中一个专为多线程场景设计的线程安全字典集合&#xff0c;位于 System.Collections.Concurrent 命名空间中。它允许多个线程同时对字典进行读写操作&#xff0c;而无需额外的同步措施。 一、集合特征 此集合有如下特征…

Unity百游修炼(2)——Brick_Breaker详细制作全流程

一、项目简介 Brick Breaker 是一款经典的打砖块游戏&#xff0c;本次案例将使用 Unity 引擎来实现该游戏的核心功能。 游戏画面如下&#xff1a; Brick_ breaker 二、项目结构概览和前期准备 &#xff08;1&#xff09;在 Unity 项目视图中&#xff0c;我们可以看到几个重要…

KubeSphere平台安装

KubeSphere简介 KubeSphere 是一款功能强大的容器管理平台&#xff0c;以下是其简介&#xff1a; 1&#xff09;基本信息 开源项目&#xff1a;基于 Apache-2.0 授权协议开源&#xff0c;由 Google Go、Groovy、HTML/CSS 和 Shell 等多种编程语言开发。基础架构&#xff1a;…

UE5销毁Actor,移动Actor,简单的空气墙的制作

1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数&#xff0c;它会立即标记 Actor 为销毁状态&#xff0c;并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程&#xff0c;调用 Destroy() 后&#xff0c;Actor 立即进入销毁过程。具体…

Hadoop 基础原理

Hadoop 基础原理 基本介绍Hadoop 的必要性Hadoop 核心组件Hadoop 生态系统中的附加组件 HDFSHDFS 集群架构HDFS 读写流程HDFS 写流程HDFS 读流程 NameNode 持久化机制 MapReduce底层原理示例 Hadoop 是一个由 Apache 基金会开发的分布式系统基础架构&#xff0c;主要解决海量数…

Linux编辑器

1.三种模式 2.图例 3.wq 4.光标的使用

2.24DFS和BFS刷题

洛谷P2895&#xff1a;用BFS走出危险区域&#xff0c;危险区域存在时间&#xff0c;我们用ma记录最快变成危险区域的时间&#xff0c; 然后每次枚举时间1然后跟ma数组比较看能不能走&#xff0c;然后时间复杂度为O(305^2)。 #include<iostream> #include<cstring>…

TMDS视频编解码算法

因为使用的是DDR进行传输&#xff0c;即双倍频率采样&#xff0c;故时钟只用是并行数据数据的5倍&#xff0c;而不是10倍。 TMDS算法流程&#xff1a; 视频编码TMDS算法流程实现&#xff1a; timescale 1 ps / 1ps //DVI编码通常用于视频传输&#xff0c;将并行数据转换为适合…

C++中tuple的用法

C中tuple的用法 在C中&#xff0c;std::tuple 是一个模板类&#xff0c;用于存储一组不同类型的值。它类似于 Python 中的元组&#xff0c;但具有更强大的功能&#xff0c;例如支持不同类型的元素和更复杂的操作。std::tuple 是 C11 标准引入的&#xff0c;位于 <tuple>…

计算机网络————(一)HTTP讲解

基础内容分类 从TCP/IP协议栈为依托&#xff0c;由上至下、从应用层到基础设施介绍协议。 1.应用层&#xff1a; HTTP/1.1 Websocket HTTP/2.0 2.应用层的安全基础设施 LTS/SSL 3.传输层 TCP 4.网络层及数据链路层 IP层和以太网 HTTP协议 网络页面形成基本 流程&#xff1a…

【网络编程】广播和组播

数据包发送方式只有一个接受方&#xff0c;称为单播。如果同时发给局域网中的所有主机&#xff0c;称为广播。只有用户数据报(使用UDP协议)套接字才能广播&#xff1a; 广播地址以192.168.1.0 (255.255.255.0) 网段为例&#xff0c;最大的主机地址192.168.1.255代表该网段的广…

小程序如何实现跨页面通信

前言 最近有很多同学问&#xff0c;小程序里面如何进行跨页面通信。看了下之前的老代码&#xff0c;基本都是基于onShow或者localStorage。虽然可以实现&#xff0c;但是并不怎么优雅。 今天就来聊一聊&#xff0c;小程序的跨页面通信的几种实现方案。或许会有你想要的方案&a…

【工具】win-画图 保留图片信息并仅改变图片比例的工具

Windows 系统自带的“画图”工具 Windows 系统自带的“画图”&#xff08;Paint&#xff09;工具可以进行简单的图片编辑&#xff0c;包括调整图片大小和比例。 使用方法&#xff1a; 打开“画图”工具&#xff08;可以通过在开始菜单中搜索“画图”或“Paint”&#xff09;。…

如何编辑autodl中以.bashrc结尾的隐藏文件

在nnunet的运行过程中遇到了设置环境变量的问题。之前没有接触过linux系统&#xff0c;但是autodl里面默认是linux系统。.bashrc 是一个在 Bash shell 启动时执行的脚本文件&#xff0c;常用于设置环境变量、定义别名、加载函数等&#xff0c;用户可以通过编辑这个文件来定制自…

实验3 知识表示与推理

实验3 知识表示与推理 一、实验目的 &#xff08;1&#xff09;掌握知识和知识表示的基本概念&#xff0c;理解其在AI中的深刻含义与意义&#xff1b; &#xff08;2&#xff09;熟悉AI中常用的知识表示方法的优缺点及其应用场景&#xff1b; &#xff08;3&#xff09;掌握产…

在 M1 Mac 上解锁 TensorFlow GPU 加速:从环境搭建到实战验证

在 M1 Mac 上解锁 TensorFlow GPU 加速&#xff1a;从环境搭建到实战验证 前言&#xff1a;苹果芯片的深度学习新纪元 随着 Apple Silicon 芯片的普及&#xff0c;M1/M2/M3 系列 Mac 已成为移动端深度学习开发的新选择。本文将以 TensorFlow 2.x 为例&#xff0c;手把手教你如…