选项而不是 Post:对预检请求的响应未通过访问控制检查。



我正在尝试访问REST API源,并且它正在与Postman或HTTP Requester一起找到。我的代码怎么了?

let keyUrl ="yourUrl"
getAPIKey(){
   let headers = new Headers();
  //  headers.append('Content-Type', 'text/plain');
   headers.append('Authorization', 'Bearer ' + btoa(this.cred.user + ":" + this.cred.pw));
   headers.append('Access-Control-Allow-Methods', 'GET, POST, PUT');
   headers.append("Access-Control-Allow-Headers","*");
   let options = new RequestOptions({
     headers: headers,
     method: RequestMethod.Post,
    });
    return this.http.post(this.keyUrl,options)
        .map((res: Response) => {
          console.log('##############')
          console.log(res.json())
        })
        .catch(this.handleError)
        .subscribe(
        status => console.log(status),
        error => this.handleError(error),
        () => console.log('DONE')
        );

     }

作为错误,我总是会得到:

对飞行前请求的响应不会传递访问控制检查:否 请求的"访问控制"标头 资源。因此,不允许来源'http://localhost:4200' 访问。

在我的后端,即使我发送了http.post。

我也遇到了这个问题,我花了很长的时间才能找到正确的解决方案

您也必须在服务器端设置标头。他们本质上需要接受"选项" - 要求。

这可能取决于您的服务器托管REST-API;如果您使用的是Apache-Server,则可以将其添加到您的httpd.conf中,并且应该有效:

<Directory />
Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
             Header set Access-Control-Allow-Origin "jakartab3:16090, epbtesti:16090, localhost:16090"
             Header set Access-Control-Allow-Credentials "true"
             Header add Access-Control-Allow-Headers "Content-Type, Accept"
             Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"

另外,它也应该在处理安全性的点(如果您这样做(工作。在这种情况下,将httpservletresponse的标题设置为

response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Origin-Methods", "GET, POST, OPTIONS");

希望这可以解决您的问题


编辑:试图解释为什么需要设置:

access-control-wall-wall-ofrigin可防止其他服务器访问您的休息服务 - 并且您的Angular-application在端口4200上运行在其自己的服务器上。对于Angular-Application,可以访问您的休息服务,正如我已经说过的,您需要根据我的答案设置服务器中托管休息服务的标题;它无法在其他地方工作,因为此安全功能可防止其他服务器访问您的休息服务

相关内容

最新更新