Iview-admin: 你们的工具方法util.ajax关于跨域问题

Created on 24 Oct 2017  ·  28Comments  ·  Source: iview/iview-admin

原本我是想在webpack.dev.config.js添加proxy的配置,让后自己封装axios,可是技术菜也不知道哪里出了问题,让后看到你们处理ajax的封装,想问下这里有用代理来跨域,或者有什么跨域的方法,谢谢!

helpful

Most helpful comment

分享加我的解决方法:
在webpack.dev.config.js中module.exports添加如下devServer。因为作者在package.json做了一些关于webpack-dev-server的基础配置如下:

"scripts": {
    "dev": "webpack-dev-server --content-base ./ --open --inline --hot --compress --history-api-fallback --config build/webpack.dev.config.js",
  },

所以devServer只要添加proxy配置就好了,如下:

devServer: {
        port: 8089,
        proxy: {
          '/api': {
            target: 'http://yuanhang.youledi.cn/',
            pathRewrite: {'^/api' : ''},
            changeOrigin: true
          }
        }
    }

详细可以看webpack-dev-server文档:http://webpack.github.io/docs/webpack-dev-server.html

All 28 comments

同问。

我模仿vue-cli在webpack.base.config.js添加了http-proxy-middleware插件的设置,进行跨域请求的代理,想提PR,不知道大大同不同意(●'◡'●)。

查一下 webpack-dev-server 的文档

我查了webpack-dev-server,还有http-proxy-middleware插件文档,问题解决了,就是想你们会不会需要加上这个,毕竟开发环境中跨域还是需要的吧.

业务有需求的话可以自行加入。

好的。

我在webpack.base.config.js中添加了
devServer: {
historyApiFallback: true,
hot: true,
inline: true,
stats: { colors: true },
port: '8081',
proxy: {
'/api': {
target: 'http://yuanhang.youledi.cn',
pathRewrite: {'^/column' : '/column'},
changeOrigin: true
}
}
}
让后axios 或者用你的util.ajax请求加‘/api’总是404能帮忙看看吗,谢谢。

@dolphinfine 你的proxy跨域问题解决了吗

@YTU94 我目前正在开发静态页面。还没有搞这个

@YTU94 你改成这样:pathRewrite: {"^/api" : ""}试试。明显这里错了。或者去掉这句。api代替的是http://yuanhang.youledi.cn

@dolphinfine 不行哦,总是提示404,也不知道路劲哪不对,fuck

分享加我的解决方法:
在webpack.dev.config.js中module.exports添加如下devServer。因为作者在package.json做了一些关于webpack-dev-server的基础配置如下:

"scripts": {
    "dev": "webpack-dev-server --content-base ./ --open --inline --hot --compress --history-api-fallback --config build/webpack.dev.config.js",
  },

所以devServer只要添加proxy配置就好了,如下:

devServer: {
        port: 8089,
        proxy: {
          '/api': {
            target: 'http://yuanhang.youledi.cn/',
            pathRewrite: {'^/api' : ''},
            changeOrigin: true
          }
        }
    }

详细可以看webpack-dev-server文档:http://webpack.github.io/docs/webpack-dev-server.html

@YTU94 赞一个。我已经按照这个配置成功了。

跨域还是服务端做比较方便~~

@YTU94 我的为啥还是404

@codeItachi 404可能是路劲的问题,你注意下路径中 /,有的地方是需要的

axios跨域吗?
axios.create({
baseURL: ajaxUrl,
timeout: 30000,
withCredentials: true//注意是这个配置
});
首先你像我这样上面加一个配置
然后服务端开启一个运行跨域的配置,我的服务端是springboot的,
添加一个配置:
@Configuration
public class CorsConf {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/");
registry.addMapping("/api//");
registry.addMapping("/auth/
");
registry.addMapping("/common/**");
}
};
}
}

我的服务是通过ssh隧道映射到本机的127.0.0.1:8090端口的 , webpack开发服务器已经修改成

devServer: {
        port: 8089,
        proxy: {
            '/api': {
                target: 'http://127.0.0.1:8090/',
                secure: false,
                changeOrigin: true,
                pathRewrite: {'^/api': ''}
            }
        }
    }

控制台还是会报错

Failed to load http://127.0.0.1:8090/api/userinfo/index: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8089' is therefore not allowed access.
createError.js:16 Uncaught (in promise) Error: Network Error
    at createError (createError.js:16)
    at XMLHttpRequest.handleError (xhr.js:87)

但是network当中发现已经请求成功了,请大神指导,
而且发现/api并没有被替换成'',请求成功的地址还是http://127.0.0.1:8090/api/userinfo/index

@YTU94 已按照此方法解决

@ChasLui 你不应该访问http://127.0.0.1:8089/api/userinfo/index 这个代理地址吗
如果你还是需要访问8090的端口,那请在8090的服务做 CROS 的配置就好了。

@kevin70 感谢,最后开发代理还是没配置成功,最后是只能配CROS解决了

我配置了devServer 代理信息,直接在浏览器输入代理地址可以访问,用util.ajax去访问就报错了。Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access. The response had HTTP status code 403.

已经被折腾好几天了,被叼了。😔

奇了个怪,用util.ajax会报错,反而直接用axios就没有报错。求解答

你看看我写的那样,实在不行贴出你的代码,不然谁知道你什么问题

用火狐浏览器的cors插件

跨域配置和允许局域网访问配置可以按照下面方法一并解决
在webpack.base.config.js中与plugins同一级增加下面代码:
devServer: {
host: '0.0.0.0',
port: 8089,
proxy: {
'/api': {
target: 'http://127.0.0.1:8090/',
changeOrigin: true
}
}
}

在package.json中修改scripts对象中的dev为:(增加了--disable-host-check )
"dev": "webpack-dev-server --disable-host-check --content-base ./ --open --inline --hot --compress --config build/webpack.dev.config.js",

我的终于解决了! https://www.iphpt.com/detail/125/ 你们参考参考

http-proxy-middleware

怎么解决的?有代码吗?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

zhangwei900808 picture zhangwei900808  ·  5Comments

codeItachi picture codeItachi  ·  5Comments

hardphp picture hardphp  ·  6Comments

Nightsky-Dec picture Nightsky-Dec  ·  5Comments

lizongwen picture lizongwen  ·  4Comments