簡體   English   中英

Ajax調用給我跨域錯誤

[英]Ajax call giving me cross domain error

我剛剛將我的應用程序移動到生產服務器並在我嘗試使用“www”訪問頁面時收到錯誤當我嘗試將頁面加載為“ http://example.com ”時,它正確加載頁面和內容我嘗試訪問像“www.example.com”這樣的頁面我的所有ajax調用都給出了如下錯誤:

XMLHttpRequest無法加載http://example.com/dashboard/ 請求的資源上不存在“Access-Control-Allow-Origin”標頭。 因此,不允許來源“ http://www.example.com ”訪問。

我正在使用PHP角度。

您的網站是否使用www並且沒有相同的方式? 如果沒有,也許你可以添加重寫規則到htaccess這樣的版本與www和沒有它將以同樣的方式服務? 在這種情況下,您不應該遇到跨域錯誤

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

出現此問題是因為您尚未在服務器端設置訪問控制源。 您可以通過在服務器端設置它來解決此問題

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *"); 

當您從瀏覽器發出請求時,瀏覽器會在任何一種情況下執行預取(有時它不會),它會檢查Access-Control-Allow-Origin實際上允許您的客戶端站點在不同的域上發出請求(Web安全性內容)。 如果這與您發送請求的位置不匹配,瀏覽器會阻止請求並且不會發送請求。

要發出請求,您需要編輯服務器端(在PHP上),您應該允許該域,它還支持通配符:

<?php
header("Access-Control-Allow-Origin: www.example.com");
?>

現在您可以從任何地方開始發出請求,您也可以將請求限制到特定域,以便只有一個域可以向您發送請求,例如:

header("Access-Control-Allow-Origin: example.com");

這是可以預料的。 同源政策規定:

如果協議,端口(如果指定了一個端口) 和主機對兩個頁面都相同,則兩個頁面具有相同的原點。

www.example.comexample.com是不同的主機名,所以你是跨越起源。

雖然口語化是指跨域請求,但它是重要的跨域請求; 跨域請求只是其中的一部分。

不要將您的網站托管在多個主機名上,選擇一個並堅持使用它。 (您可能希望設置從另一個重定向到它)。

使用相對而不是絕對URI也會降低這種錯誤的可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM