如何利用PHP 快速解決跨域問題
跨域介紹
瀏覽器擁有同源策略限制確保安全,同源策略會阻止一個域的Javascript腳本和另外一個域的內容進行交互。
當一個請求url的協議、域名(包括多級域名)、端口三者之間任意一個與當前頁面url不同即為跨域。
跨域介紹
- 1)無法讀取非同源網頁的 Cookie、LocalStorage 和 IndexedDB
- 2)無法接觸非同源網頁的 DOM 節點
- 3)無法向非同源地址發送 AJAX 請求
跨域解決方案
1)JSONP(隻支持GET請求)
Javascript:
<script src="http://test.com/data.php?callback=dosomething"></script> // 向服務器test.com發出請求,該請求的查詢字符串有一個callback參數,用來指定回調函數的名字 // 處理服務器返回回調函數的數據 <script type="text/javascript"> function dosomething(res){ // 處理獲得的數據 console.log(res.data) } </script>
data.php:
header('Content-type: application/json'); //獲取回調函數名 $jsoncallback = htmlspecialchars($_REQUEST ['callback']); //json數據 $json_data = '["customername1","customername2"]'; //輸出jsonp格式的數據 echo $jsoncallback . "(" . $json_data . ")";
2)CORS 跨域資源分享(Cross-Origin Resource Sharing)
- 1、普通跨域請求:隻需服務器端設置 Access-Control-Allow-Origin
- 2、帶cookie跨域請求:前後端都需要進行設置
PHP:
header("Access-Control-Allow-Origin:*");
或者 Nginx:
location ~ .*\.php$ { add_header 'Access-Control-Allow-Origin' '*'; # 就加這句就行 include fcgi.conf; fastcgi_pass 127.0.0.1:10080; fastcgi_index index.php; expires off; }
Javascript:
$.ajax({ url: 'http://www.test.com:8080/login', type: 'get', data: {}, xhrFields: { withCredentials: true // 前端設置是否帶cookie }, crossDomain: true, // 會讓請求頭中包含跨域的額外信息,但不會含cookie });
3)WebSocket 瀏覽器與服務器的全雙工通信,同時也是跨域的一種解決方案
4)Nginx 反向代理
server { # nginx監聽所有 test.com:9000 端口收到的請求 listen 9000; server_name test.com; # test.com:9000 會被轉發到 192.168.25.20:9000 location / { proxy_pass http://192.168.25.20:9000; } # test.com:9000/api/ 會被轉發到 "192.168.25.20:9000/api/" location /api/ { proxy_pass http://192.168.25.20:9000; } }
到此這篇關於如何利用PHP 快速解決跨域問題的文章就介紹到這瞭,更多相關PHP 跨域內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Nginx跨域問題解析與解決
- 超實用的Nginx常見配置合集分享
- Nginx 代理解決跨域問題多種情況分析
- nginx中的兩個模塊的proxy_pass的區別解析
- Nginx報404錯誤的詳細解決方法