2017-08-17 138 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

相關問題