Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: proxy / 会导致项目访问Whitelabel Error Page #1829

Closed
zero9527 opened this issue Mar 12, 2024 · 4 comments
Closed

[Bug]: proxy / 会导致项目访问Whitelabel Error Page #1829

zero9527 opened this issue Mar 12, 2024 · 4 comments
Assignees

Comments

@zero9527
Copy link

System Info

System:
OS: macOS 13.6.4
CPU: (16) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
Memory: 66.55 MB / 16.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 18.19.1 - ~/.nvm/versions/node/v18.19.1/bin/node
Yarn: 1.22.19 - ~/.yarn/bin/yarn
npm: 10.2.4 - ~/.nvm/versions/node/v18.19.1/bin/npm
pnpm: 8.15.4 - ~/.nvm/versions/node/v18.19.1/bin/pnpm
Browsers:
Chrome: 122.0.6261.112
Safari: 17.3.1

Details

浏览器访问如下:
image

  • 项目没有固定的请求前缀,默认请求都转发到BASE_URL
  • 同样的配置之前vue-cli+webpack正常

猜测是rspack本地服务devServer把页面访问的路径匹配到 / 的代理了,这里应该要加个content-type判断?

Reproduce link

No response

Reproduce Steps

代理配置如下:
rspack.config.ts 部分配置

server: {
  proxy: {
    "/": {
      "target": "http://test-xxx.com",
      "secure": true,
      "changeOrigin": true,
      "pathRewrite": {},
      "headers": {
        "X-Forwarded-Host": "test-xxx.com"
      }
    }
  }
}

项目启动

{
  "scripts": {
    "serve:qa": "rsbuild dev --env-mode qa -c rspack.config.ts",
  }
}
npm run serve:qa
@LingyuCoder
Copy link
Contributor

rsbuild 的 dev server 应该有一些定制逻辑,这个问题 @chenjiahan 看看

@chenjiahan
Copy link
Member

@9aoy cc

@chenjiahan chenjiahan transferred this issue from web-infra-dev/rspack Mar 14, 2024
@chenjiahan chenjiahan added the bug Something isn't working label Mar 14, 2024
@9aoy
Copy link
Contributor

9aoy commented Mar 14, 2024

根据 proxy 配置的语意并没有问题,这里是由于 rsbuild server 和 webpack-dev-server 中间件执行顺序不一样所以产生差异。

这里不确定你想要 proxy "/" 的使用场景,也许你可以修改 proxy 配置,让 proxy 仅代理你指定的页面。

测试了下, webpack 没问题是因为 webpack-dev-server 中 webpack-dev-middleware 中间件执行早于 proxy,所以请求没有走到 proxy,直接在 webpack-dev-middleware 处理时返回了。

https://github.com/webpack/webpack-dev-server/blob/08cab58bb8759e96bf4774bec28901e9f96a3f3a/lib/Server.js#L1986

rsbuild 里顺序不一样,proxy 会早一些,所以先代理到了 target。如果是 vite 的话,也是 proxy 早一些,也会有同样的问题。

@9aoy 9aoy removed the bug Something isn't working label Mar 14, 2024
@zero9527
Copy link
Author

根据 proxy 配置的语意并没有问题,这里是由于 rsbuild server 和 webpack-dev-server 中间件执行顺序不一样所以产生差异。

这里不确定你想要 proxy "/" 的使用场景,也许你可以修改 proxy 配置,让 proxy 仅代理你指定的页面。

测试了下, webpack 没问题是因为 webpack-dev-server 中 webpack-dev-middleware 中间件执行早于 proxy,所以请求没有走到 proxy,直接在 webpack-dev-middleware 处理时返回了。

https://github.com/webpack/webpack-dev-server/blob/08cab58bb8759e96bf4774bec28901e9f96a3f3a/lib/Server.js#L1986

rsbuild 里顺序不一样,proxy 会早一些,所以先代理到了 target。如果是 vite 的话,也是 proxy 早一些,也会有同样的问题。

目前确实是这样暂时解决的,把所有确定的请求前缀,需要代理的都配置了,所以没有需要 / 的代理了

@9aoy 9aoy closed this as completed Mar 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants