问题通常会在使用Angular前端和Spring Boot后端时出现。这是由于浏览器的同源策略造成的,它禁止页面加载或访问另一个域中的资源。因此,如果服务端应用程序没有正确配置,那么浏览器将发出此错误。 要解决此问题,可以在Spring Boot应用程序中添加CorsFilter,它会添加Access-Control-Allow-Origin标头来解决问题。CorsFilter示例代码如下所示:
@Configuration public class WebConfig { @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin(""); config.addAllowedHeader(""); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } }
在Angular应用程序中,我们需要在请求头中设置X-Requested-With属性,以避免出现此错误。这可以通过在HttpClient拦截器中添加以下代码来完成:
@Injectable()
export class InterceptService implements HttpInterceptor {
intercept(request: HttpRequest
然后在providers数组中添加:InterceptService。
此外,我们还可以使用过渡请求的方法来解决此问题。在Angular中,我们可以使用JSONP(JavaScript对象表示法)模块来完成跨域请求。但是,此方法仅适用于GET请求。它的工作原理是通过添加一个回调函数来创建JSONP请求。我们可以使用HTTP伪造器实现JSONP,请参见下面的代码片段:
constructor(private http: HttpClient, @Inject(DOCUMENT) private document: Document) { }
jsonp