白白是baibai 2024-03-15 14:40 采纳率: 45.5%
浏览 317
已结题

vue项目中代理了iframe中的网页,但是该网页是服务端渲染,代理后报404错误找不到资源。

vue项目中代理了iframe中的网页,但是该网页是服务端渲染,代理后报404错误找不到资源。
场景demo展现:
下面是代理写法:

img

下面是服务端渲染的页面随便引入的资源

img


下面是代理后报404错误

img

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-15 14:41
    关注

    引自免费微信小程序:皆我百晓生

    在Vue项目中使用代理服务器(devServer.proxy)处理iframe中的服务端渲染页面时,出现404错误和MIME类型不匹配的问题,这是因为代理配置可能没有正确处理iframe中静态资源的路径。针对你提供的配置信息,可以尝试如下方式调整:

    // vue.config.js
    module.exports = {
      devServer: {
        proxy: {
          // 针对你的场景,可能需要将/api更改为一个能匹配 iframe 中所有资源的正则表达式
          '^/api(.*)': {
            target: 'http://localhost:10001',
            changeOrigin: true,
            secure: false,
            pathRewrite: { // 由于iframe中的资源路径是相对路径,这里无需重写路径
              '^/api': ''
            },
            // 添加以下内容以转发任何非API请求到目标服务器
            onProxyReq(proxyReq, req, res) {
              // 根据实际情况调整req.url以指向正确的资源
              if (!req.url.startsWith('/api')) {
                proxyReq.path = req.url.replace(/^\/[^\/]+\//, '/'); // 去除前端项目的上下文路径
              }
            }
          }
        }
      }
    };
    

    上述配置中,我们修改了代理规则以匹配更多的URL,并且在onProxyReq钩子函数中处理了非API的请求。这样,当iframe中加载资源时,如果资源路径不是/api开头的,将会被转发到后端服务器的相应路径。

    然而,请注意,根据iframe中资源的实际路径,可能还需要进一步微调onProxyReq里的代码逻辑。同时,确保iframe中的资源引用路径是相对于其自身的HTML文件的,这样才能保证代理转发至正确的目标地址。

    另外,对于报错中提及的MIME类型问题,这通常是因为服务端返回的内容类型与预期不符,例如HTML文件作为CSS或JS执行,这种情况下需要检查后端服务器是否正确设置了响应头Content-Type。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月18日
  • 创建了问题 3月15日