Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用angular 6绕过交叉原点错误(Firefox CORS错误、Chrome飞行前错误)_Java_Angular_Httpclient_Angular6 - Fatal编程技术网

Java 如何使用angular 6绕过交叉原点错误(Firefox CORS错误、Chrome飞行前错误)

Java 如何使用angular 6绕过交叉原点错误(Firefox CORS错误、Chrome飞行前错误),java,angular,httpclient,angular6,Java,Angular,Httpclient,Angular6,我正在开发一个前端,用作RESTAPI的客户端。使用角度6 问题是,当我使用HttpClient发送post请求时,会出现这个跨源错误。 我的代码: 服务: 在mozilla firefox中: 已阻止跨源请求:同一源策略不允许读取 位于的远程资源 . (理由: CORS请求未成功) 在google chrome中: 加载失败 :回应 预飞无效(重定向) 我已经测试了允许控件扩展到我的浏览器。很高兴知道我有一个内容类型标题:当您使用与用于加载Web应用的URL(包括端口)不同的URL调用服务时,

我正在开发一个前端,用作RESTAPI的客户端。使用角度6

问题是,当我使用HttpClient发送post请求时,会出现这个跨源错误。 我的代码:

服务: 在mozilla firefox中:

已阻止跨源请求:同一源策略不允许读取 位于的远程资源 . (理由: CORS请求未成功)

在google chrome中:

加载失败 :回应 预飞无效(重定向)


我已经测试了允许控件扩展到我的浏览器。很高兴知道我有一个内容类型标题:

当您使用与用于加载Web应用的URL(包括端口)不同的URL调用服务时,会发生CORS错误。这是浏览器内置的安全功能


为了避免这种情况,您的服务器需要通过添加头来允许跨源请求。您可以手动添加标题,这需要一点努力,或者,如果您使用的是Spring之类的工具,则会有一个注释。

有很多方法可以解决这个问题;关于如何处理CORSS客户端,请参见GitHub上的:

JSONP

警告:这不是每个API都允许的,在调用某些API时可能会中断

您可以使用JSONP(JSON的缩写)在生产中绕过CORS 有填充物,也是一种“黑客”。但这是一种广泛使用的黑客手段 许多API都支持这一点。您发送的不是纯JSON请求,而是 您正在将数据包装到一个得到计算的函数中。JSONP 在下面的链接中解释:

或使用代理:

代理

警告:很好的服务,但您依赖于这些服务 为了工作,如果它们出现故障,你的应用程序也会出现故障

您可以使用代理您的请求并自动 为您的应用程序启用CORS:

然后,您必须通过在请求前添加以下URL之一来调用API,例如:


谢谢Steve,所以在客户端没有太多事情要做,是吗?是的。在客户端执行操作基本上破坏了浏览器的安全性。这是我的第一个爱好,直到我阅读了文档。
export class ApiConfigLogin {
      constructor(private http: HttpClient,
        private dataSrvc: DataService) {}

      private _url = this.dataSrvc.getMainUrl() + '/sec-login';

      private options = {
        headers: new HttpHeaders().set('Content-Type', 'application/json')
      };
      getResults(reqbody): Observable < ApiConfigLoginInterface > {
        console.log(this._url);
        return this.http.post < ApiConfigLoginInterface > (this._url, reqbody, this.options);
      }
    }
this._ApiConfigLogin.getResults(body)
      .subscribe(data => {
        this.enableForms();
        if (data.status === 401) {
          this.lowerMessage = data.message;
        } else {
          console.log(1);
        }
      });