webpack dev服务器CORS问题

Hao*_*Hao 29 cors superagent reactjs webpack-dev-server

webpack-dev-server v1.10.1用来提升我的Redux项目,我有以下选项:

contentBase: `http://${config.HOST}:${config.PORT}`,
quiet: false,
noInfo: true,
hot: true,
inline: true,
lazy: false,
publicPath: configWebpack.output.publicPath,
headers: {"Access-Control-Allow-Origin": "*"},
stats: {colors: true}
Run Code Online (Sandbox Code Playgroud)

在JS中,我使用requestfrom superagent来生成HTTP GET调用

request
          .get(config.APIHost + apiUrl)
          .set('Accept', 'application/json')
          .withCredentials()
          .end(function (err, res) {
                if (!err && res.body) {
                    disptach(() => {
                        return {
                            type: actionType || GET_DATA,
                            payload: {
                                response: res.body
                            }
                        }
                    });
                }
          });
Run Code Online (Sandbox Code Playgroud)

但是我收到了CORS错误:

XMLHttpRequest cannot load http://localhost:8000/api/getContentByType?category=all. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5050' is therefore not allowed access
Run Code Online (Sandbox Code Playgroud)

有什么建议来解决这个问题吗?非常感谢

gys*_*yss 34

使用webpack-dev-server 1.15.X,您可以在配置文件中使用此配置:

devServer: {
   contentBase: DIST_FOLDER,
   port: 8888,
   // Send API requests on localhost to API server get around CORS.
   proxy: {
      '/api': {
         target: {
            host: "0.0.0.0",
            protocol: 'http:',
            port: 8080
         },
         pathRewrite: {
            '^/api': ''
         }
      }
   }
},
Run Code Online (Sandbox Code Playgroud)

有了这个例子中,你会重定向所有的调用http://0.0.0.0:8888/api/*http://0.0.0.0:8080/*和CORS解决

  • 这对我不起作用。仍然出现异常消息,说访问从源“ http:// localhost:9000”获取“ http:// localhost:8080 / api / auth”的访问已被CORS策略阻止:“ Access-Control-Allow-Origin”标头的值是“ http:// localhost:7000”。我特意在后端添加了“ http:// localhost:7000”。只是为了验证代理是否在我的前端上正常工作,此设置不会限制我的api调用。 (2认同)

jaz*_*mit 33

解决它的另一种方法是直接将所需的CORS头添加到开发服务器:

devServer: {
  ...
  headers: {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
    "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
  }
}
Run Code Online (Sandbox Code Playgroud)

文档链接

  • 添加此功能对我不起作用,没有任何变化。仍然出现缺少access-control-allow-headers标头的错误。 (4认同)

Mic*_*ley 6

您正在运行JavaScript,localhost:5050但您的API服务器是localhost:8000.这违反了相同的原始策略,因此浏览器不允许它.

您可以修改API服务器以启用CORS,也可以按照"与现有服务器结合"下的webpack-dev-server页面上的说明将资产服务与webpack-dev-server和您自己的API服务器相结合.

  • 第二个链接现已破裂 (3认同)

ste*_*fan 5

有同样的问题,但我的 api 使用的是 https 协议(https://api ....)。必须使用 https 启动服务器并使用 https://localhost:8080

devServer: {
    https: true,
    headers: {
        "Access-Control-Allow-Origin": "*",
    },
    // ....
}
Run Code Online (Sandbox Code Playgroud)