2017-08-17 141 views
1

我正在使用Angular 2 & Ionic 2应用程序。我不得不改变到另一台服务器进行测试和API已停止与以下错误消息的工作:预检的响应在Angular 2中具有无效的HTTP状态代码403

预检响应具有无效的HTTP状态码403

我加入这个为.htaccess

<IfModule mod_headers.c> 
    Header append Vary User-Agent env=!dont-vary 
    Header add Access-Control-Allow-Origin "*" 
    Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
</IfModule> 

这对我的角度提供商:

loginUser(data): Observable<any> { 
    let username: string = data.username; 
    let password: string = data.password; 
    let headers: Headers = new Headers(); 
    let url = this.domain + "/wp-json/wp/v2/users/me?context=edit"; 
    let bt = btoa(username + ":" + password); 

    this.storage.save('bt', {'bt':bt}); 
    headers.append("Authorization", "Basic " + bt); 
    headers.append('Access-Control-Allow-Headers', 'Content-Type'); 
    headers.append("Content-type", "application/x-www-form-urlencoded"); 
    headers.append('Access-Control-Allow-Origin', '*'); 

    return this.http.get(url, {headers: headers}).map(res => res.json()) 
    } 

另外,我启用了一个Chrome插件,用于启用CORS问题,并在我处于localhost项目时处理其他情况。

我试过了我发现的一切,我不确定我还能做什么。

检查在Chrome浏览器开发控制台的网络选项卡,响应这是一个:

<HTML> 
<HEAD> 
<TITLE>403 Forbidden</TITLE> 
</HEAD> 
<BODY> 
<H1>Forbidden</H1> 
You do not have permission to access this document. 
<P> 
<HR> 
<ADDRESS> 
Web Server at my domain here 
</ADDRESS> 
</BODY> 
</HTML> 

基础上的答案,这是我重写规则藏汉:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L] 
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
+0

从你提供的东西我看你从前端角度做得很好。后端服务出现问题。你知道403 HTTP代码被用于'禁止',所以你不能做你想做的事情。 –

+0

如果您仍然启用了该Chrome插件,则需要将其停用,并将其关闭。因为否则它只会干扰你的故障排除 – sideshowbarker

+0

你确认你实际上可以直接浏览到浏览器中的'/ wp-json/wp/v2/users/me?context = edit',你试试吗?因为配置问题可能与预检选项无关,但是无论使用什么类型的HTTP方法请求该URL,您都可以获得配置问题。也就是说,你的Apache配置基本上只是对该URL的任何请求做'全部拒绝'。问题的细节并不表明是否是这种情况。 – sideshowbarker

回答

1

403个响应状态指示服务器后端未配置为处理OPTIONS请求的常见问题,包括CORS preflight OPTIONS requests

服务器必须以OPTIONS请求进行响应与一个2xx成功状态,通常为200或204

如果服务器没有做到这一点,和你在一个请求触发浏览器做了CORS preflight OPTIONS request,那么它没有什么区别Access-Control-*头配置为响应 - 因为如果预检失败,浏览器停在那里,并且永远不会继续执行GET请求问题中的代码片段是要发送的。

对于问题中的代码片段,代码添加的Authorization标题触发浏览器执行预检,以及需要服务器处理OPTIONS请求的内容。

配置服务器以正确的方式处理OPTIONS请求(发送200或204个成功消息)的答案取决于它运行的服务器软件。这个问题表明服务器的运行Apache,所以你可以尝试在你的.htaccess添加此:

RewriteEngine On 
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L] 

更新

如果你在你的.htaccess东西是限制为/wp-json/wp/v2/users/me以某种方式访问,您需要将其包装在<LimitExcept OPTIONS>…</LimitExcept>;例如:

<LimitExcept OPTIONS> 
    Require valid-user 
</LimitExcept> 
+0

因此,我看到您处理OPTIONS请求的.htaccess位。添加后你还会得到403吗?如果是这样,并且.htaccess中有一些其他代码限制对/ wp-json/wp/v2/users/me路由的访问,那么您需要使其不限制对OPTIONS请求的访问权限我猜只对GET请求)。至于身份验证,需要明确的一点是浏览器在发出OPTIONS请求时不会发送授权请求头。所以OPTIONS请求必须在没有需要授权头的情况下工作。 – sideshowbarker

+0

这两个服务器中的.htaccess完全相同。但是你可能在另一部分是正确的。我检查了网络选项卡,并且没有请求标头上的基本身份验证。 – Tasos

+0

有关如何确保事项对OPTIONS请求正常工作的另一个建议,请参阅添加到答案的更新 – sideshowbarker

0

HttpOptions不追加授权的要求,你需要使用AllowAnonymous在选项端点

+0

我对服务器端设置不熟悉。你能否复制粘贴上面的.htaccess文件并替换你所指的部分? – Tasos

0

您可以通过这个很容易得到!让我们跟随我现在

  1. 在桌面上创建一个快捷方式的快捷 enter image description here
  2. 右键单击,然后单击属性 enter image description here
  3. 编辑目标属性

enter image description here

  1. 将其设置为“C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe”--5。禁用 - 网络安全的user-data-DIR = “C:/ ChromeDevSession” enter image description here
  2. 在Visual Studio代码,运行离子服务-l enter image description here
  3. 你会看到新标签中打开http://localhost:8100/ionic-lab。你应该知道,这个链接是在普通的chrome选项卡中打开的,而不是我们设置的“disable-web-security”chrome。 enter image description here
  4. 双击我们设置的快捷方式打开“disable-web-security”chrome选项卡。然后将http://localhost:8100/ionic-lab粘贴到此选项卡中。 enter image description here

因此,与宇商贸-API时,我们得到的多个错误的原因,这个“网络安全”的谷歌。然后你只需要禁用它,而你实际上不需要任何CORS扩展。因此,如果您已安装,请立即将其删除。

这个解决方案我写给学习这门课的人https://www.udemy.com/ionic-3-apps-for-woocommerce-build-an-ecommerce-mobile-app/。这是一款使用woo-commerce-api从Wordpress(本地或活动服务器)设置和获取数据的离子电子商务应用程序。如果您在使用其他语言而不是离子语言时遇到问题,它仍然可以正常工作

其实我已经在Google上搜索了很多东西来找到这个解决方案。我希望这可以帮助你们所有人。现在,我需要睡觉,因为明天我与我的讲师有关于这个离子项目的最终报告

看到亚! Quy Le

相关问题