角度代理问题得到 index.html 或 cors 错误

Posted

技术标签:

【中文标题】角度代理问题得到 index.html 或 cors 错误【英文标题】:angular proxy issues getting index.html or cors error 【发布时间】:2019-04-17 20:51:25 【问题描述】:

大家好,我的 Angular 客户端有一些问题。 每当我使用这样的代理向我的 Spring 后端发出发布请求时......


   "/api":  
      "target": "http://localhost:3000", 
      "secure": false, 
      "changeOrigin": true,
      "pathRewrite": 
          "^/api": "" 
       
   

如果我将 changeOrigin 设置为 False,那么它可以按预期在后端运行。登录效果很好。唯一奇怪的是角度客户端的响应。我没有从后端服务器获取原始响应,而是获取了我的角度应用程序的 index.html 文件的内容。 httpClient.post.subscribe(...) 中的响应只是 Index.html 文件的内容。

然后我尝试将 changeOrigin 设置为 true。但后来什么都没有了。 我收到一个 cors 错误,我的 Spring Backend 拒绝了该请求。为什么? 我想当我希望在后端禁用 cors 时,使用代理是可行的方法。至少在设置开发环境方面是这样。

在后端,我的 Spring Security 看起来像这样:

@Override
public void configure(HttpSecurity http) throws Exception 
    http.csrf().disable().exceptionHandling()
            .authenticationEntryPoint(
                    (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED)
            )
            .and().authorizeRequests()
            .antMatchers("/login", "/authorize").permitAll()
            .anyRequest().authenticated()
            .and().formLogin().permitAll();//.and().httpBasic();


在我的浏览器中,客户端向我显示以下错误消息:

【问题讨论】:

试试"logLevel": "debug",看看它是否有助于弄清楚发生了什么 另外,当您向后端发出请求时,URL 是 http://localhost:4200/api/... 对吧? 是的请求将发送到localhost:4200/api/login 一个帖子请求例如 我已经打开了调试模式。它表示请求已正确转发到后端。甚至显示它的后端。唯一的错误消息是在我的浏览器中缺少访问控制源标头。 所以当您的前端在localhost:4200 和您的后端提供服务时,您收到有关访问控制来源的错误消息? 【参考方案1】:

为了解决我的问题,我在后端激活了跨源令牌。

@Override
public void configure(HttpSecurity http) throws Exception 
    http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

我认为如果我使用代理就没有必要了。

【讨论】:

以上是关于角度代理问题得到 index.html 或 cors 错误的主要内容,如果未能解决你的问题,请参考以下文章

移动应用程序避免或保护 CORS?

使用Nginx的反向代理多角度应用程序

使用角度 $http 调用 Quandl API 的 CORS 问题

弹簧靴服务角度

CORS 错误。无法从 index.html 访问父目录中的 assets 文件夹

IntelliJ 静态 Web 项目到 Tomcat 或 Angular COR