隨著越來越多的網路應用程式開始支援跨站點請求和JSONP技術,PHP中的API設計者必須考慮如何處理這些請求。在本文中,我們將探討如何在PHP中處理JSONP和跨站點請求。 首先,我們來看看JSONP。 JSONP(JSON with Padding)是一種允許在客戶端和伺服器之間跨網域請求資料的技術。它是透過使用JavaScript程式碼動態建立一個標記來實現的,該標記的src屬性是一個指向API的URL,該API將傳回一個JSONP回應。 </p> <p>為了支援JSONP,我們需要在API中加入一些程式碼。首先,我們需要檢查API請求中是否帶有「callback」參數,該參數指定了要在客戶端上執行的回調函數的名稱。如果存在該參數,我們需要在響應中使用該回呼函數來包裝JSON響應。這樣,客戶端JavaScript程式碼就可以輕鬆地讀取和處理回應,而無需擔心跨域限制。 </p> <p>下面是一個PHP範例程式碼,示範如何支援JSONP:</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><?php $data = array('name' => 'John', 'age' => 30); $json = json_encode($data); if(isset($_GET['callback'])){ echo $_GET['callback'] . '(' . $json . ')'; } else { echo $json; } ?></pre><div class="contentsignin">登入後複製</div></div><p>在上述範例中,如果API要求包含了「callback」參數,則傳回JSONP回應;否則,傳回JSON回應。 </p><p>現在,我們來看看如何處理跨網站請求。跨站點請求(Cross-Origin Resource Sharing,CORS)是一種允許在客戶端瀏覽器和伺服器之間進行跨網域請求的技術。透過使用CORS,我們可以讓客戶端JavaScript程式碼從另一個網域的API中取得數據,而無需代理伺服器或其他解決方案。 </p><p>在PHP中啟用CORS很簡單,我們只需要在回應的Header中加入一些資訊。例如:</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><?php header("Access-Control-Allow-Origin: *"); //允许所有域名 header("Access-Control-Allow-Methods: GET, POST"); //允许的HTTP方法 header("Access-Control-Allow-Headers: Content-Type"); //允许客户端发送的Header ?></pre><div class="contentsignin">登入後複製</div></div><p>以上範例中,我們透過在回應Header中加入「Access-Control-Allow-Origin」、「Access-Control-Allow-Methods」和「Access-Control-Allow-Headers」來啟用CORS。這樣,客戶端就可以從任何網域取得數據,而HTTP方法和Header也受到限制。 </p> <p>總之,PHP中的API設計者需要考慮如何支援JSONP和CORS,以便客戶端JavaScript程式碼可以從其他網域取得資料。 JSONP和CORS都提供了一種安全、可靠的跨站點請求方式,並且可以讓客戶端程式碼更加靈活、易於開發和維護。 </p>