跨域資源共享(CORS)是一項讓瀏覽器允許來自不同域名或端口的Web應用程序的訪問的標準。通常,同一源策略(Same-Origin Policy)會阻止腳本訪問不同源上的內容,因為它可能會導致跨站點腳本攻擊(Cross-Site Scripting,XSS)。但隨著Web應用程序變得越來越復雜,需要在客戶端JavaScript代碼中獲取來自其他網站的數據。這就是CORS的作用。
比如我們現在要通過 AJAX 請求一個 PHP 接口,如果請求的接口跟當前站點不在同一個域下,就需要做一些特殊處理。下面介紹一下如何使用CORS的AJAX請求PHP接口的方法。
首先,我們在 PHP 接口頭部加上以下代碼:
```php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header("Access-Control-Allow-Headers: X-Requested-With");
header('Access-Control-Allow-Headers: Content-Type, x-xsrf-token');
```
- Access-Control-Allow-Origin: 允許訪問的域名, '*' 表示允許所有域名訪問。
- Access-Control-Allow-Methods:允許的 HTTP 請求方法。
- Access-Control-Allow-Headers: 允許的請求頭字段。
在AJAX中,我們在請求頭中加上以下代碼:
```js
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
```
- Content-Type:請求的內容類型,這里我們使用的是application/json。
- X-Requested-With:請求的類型,這里我們使用的是XMLHttpRequest。
完整的代碼如下:
```js
let xhr = new XMLHttpRequest();
xhr.open('POST', 'https://example.com/api');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
// 處理請求結果
}
};
xhr.send(JSON.stringify(data));
```
這樣就可以通過 AJAX 請求 PHP 接口了。
當然,以上代碼是前端的實現方式,在PHP接口端也可以通過PHP的CORS庫解決跨域問題。
總之CORS就是一種解決跨域問題的方案,在使用 AJAX 請求 PHP 接口的時候,需要加上一些必要的請求頭信息,以確保請求被 PHP 接口正常接收。在復雜的 Web 應用中使用CORS能夠簡化前端的代碼實現,使得 AJAX 請求更加便捷,從而提高整個 Web 應用程序的性能。
下一篇core.php