chaihongjun.me

vite构建工具开发vue3项目解决接口图片返回403无法显示

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

vite构建工具开发vue3项目解决接口图片返回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 ,图片就可以正常的显示了。


知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»