Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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
Angularjs 选项而不是Post:对飞行前请求的响应不';不能通过访问控制检查。_Angularjs_Rest_Http - Fatal编程技术网

Angularjs 选项而不是Post:对飞行前请求的响应不';不能通过访问控制检查。

Angularjs 选项而不是Post:对飞行前请求的响应不';不能通过访问控制检查。,angularjs,rest,http,Angularjs,Rest,Http,我正在尝试访问RESTAPI源代码,它正在与postman或http请求程序一起使用finde。我的代码有什么问题 let keyUrl ="yourUrl" getAPIKey(){ let headers = new Headers(); // headers.append('Content-Type', 'text/plain'); headers.append('Authorization', 'Bearer ' + btoa(this.cred.user + ":"

我正在尝试访问RESTAPI源代码,它正在与postman或http请求程序一起使用finde。我的代码有什么问题

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')
        );


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

对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 进入


在我的后端,即使我发送了http.post,post请求也是“选项”。

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

您还必须在服务器端设置标题。他们基本上需要接受“选项”——请求

这可能取决于托管REST-API的服务器;如果您使用的是Apache服务器,您可以将其添加到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"
希望这能解决你的问题


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


Access Control Allow Origin阻止其他服务器访问您的REST服务,并且您的angular应用程序运行在自己的服务器上,即端口4200上。为了让angular应用程序能够访问您的REST服务,正如我已经说过的,您需要根据我的回答在托管REST服务的服务器中设置头;它在其他地方无法工作,因为此安全功能阻止其他服务器访问您的REST服务

我也有此问题,我花了很长时间才找到正确的解决方案

您还必须在服务器端设置标题。他们基本上需要接受“选项”——请求

这可能取决于托管REST-API的服务器;如果您使用的是Apache服务器,您可以将其添加到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"
希望这能解决你的问题


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


Access Control Allow Origin阻止其他服务器访问您的REST服务,并且您的angular应用程序运行在自己的服务器上,即端口4200上。为了让angular应用程序能够访问您的REST服务,正如我已经说过的,您需要根据我的回答在托管REST服务的服务器中设置头;它无法在其他地方工作,因为此安全功能阻止其他服务器访问您的REST服务

您的API需要接受
选项
请求。(仅供参考,
application/JSON
requests将始终发送选项请求,而
application/x-www-form-urlencoded
不发送)Ok,纯文本相同问题您的API需要接受
OPTIONS
请求。(仅供参考,
application/JSON
requests将始终发送选项请求,而
application/x-www-form-urlencoded
don't)与纯文本相同的问题Ok,是否有效?如果是的话,您是否介意将您的python脚本作为您自己问题的单独答案发布,并接受它,以便其他人可以看到对您有什么帮助?使用python脚本,它正在工作。奇怪。。如何处理Angular2导入请求url=“path”r=requests.post(url,auth=('user',“”))print(r.text)python脚本工作的原因与postman和http请求者工作的原因相同;我想您的angular应用程序来自与rest服务不同的端口?我刚刚测试了你在问题中发布的有角度的帖子请求,它是有效的;因此(尽管我以前没有见过这样的请求方法),您的问题一定是您来自不同的端口,并且postman和python脚本不支持您的angular服务器在端口4200上运行,正如您的问题所述;rest服务在哪个端口上运行?8080?您需要在托管REST服务的服务器上进行我在回答中建议的更改,否则它将不接受来自其他端口服务器的使用这些方法(“选项”、“post”)的请求-这就是您遇到的问题,python脚本并不在自己的服务器上运行,所以它使用默认端口,REST服务也可能使用默认端口,我想好了,它工作了吗?如果是的话,您是否介意将您的python脚本作为您自己问题的单独答案发布,并接受它,以便其他人可以看到对您有什么帮助?使用python脚本,它正在工作。奇怪。。如何处理Angular2导入请求url=“path”r=requests.post(url,auth=('user',“”))print(r.text)python脚本工作的原因与postman和http请求者工作的原因相同;我想您的angular应用程序来自与rest服务不同的端口?我刚刚测试了你在问题中发布的有角度的帖子请求,它是有效的;因此(尽管我以前没有见过这样的请求方法),您的问题一定是您来自不同的端口,并且postman和python脚本不支持您的angular服务器在端口4200上运行,正如您的问题所述;rest服务在哪个端口上运行?8080?您需要在托管REST服务的服务器上进行我在回答中建议的更改,否则它将不接受来自其他端口服务器的使用这些方法(“选项”、“post”)的请求-这就是您遇到的问题,python脚本并不是在自己的服务器上运行的,所以它使用默认端口,我认为REST服务也可能使用默认端口