API接口返回是图片有时候会做防盗链等配置,在开发环境可能无法正常在前端项目中显示。当前文章通过配置vite前端代理来解决开发阶段图片不显示的问题。以往配置vite代理都是针对数据接口,这里是针对数据接口返回的图片链接,无法在开发阶段正常使用,组件渲染的时候浏览器控制台显示403:

这里已经很明显的告知了,请求被拒绝的原因 :ks-deny-reason: referer-acl-deny 明确指出,请求因为 Referer 校验失败而被拒绝。可能的原因包括:
1. 请求缺少 Referer 头。
2. Referer 头的值不符合服务器的 ACL 规则(例如,来源域名不在白名单中)。
所以,Vite配置代理请求过程中保证请求头中的Referer和图片的一致就解决这个问题了。
server: {
proxy: {
// 匹配图片请求的路径
'/proxy-image': {
target: 'https://example.com', // 图片服务器地址
changeOrigin: true, // 修改请求的 Origin
rewrite: (path) => path.replace(/^\/proxy-image/, ''), // 路径重写
headers: {
Referer: 'https://example.com', // 设置合法的 Referer,和图片服务器地址一致
},
},
},
},然后在组件中获取代理后的图片:
<template>
<van-swipe class="my-swipe" indicator-color="white" :autoplay="3000" v-if="recommend && recommend.length > 0">
<van-swipe-item v-for="item in recommend" :key="item.did" class="swipe-item">
<img :src="getProxyImageUrl(item.pic)" />
</van-swipe-item>
</van-swipe>
</template>
<script setup>
import { computed } from 'vue'
const props = defineProps(['recommend'])
const recommend = computed(() => props.recommend);
// 获取代理后的图片链接
const getProxyImageUrl = (url) => {
return `/proxy-image${new URL(url).pathname}`; // 只保留路径部分,"/proxy-image" 会被代理到图片服务器地址
};
</script>然后再npm run dev ,图片就可以正常的显示了。
