首頁 後端開發 php教程 詳解laravel如何開啟跨域功能

詳解laravel如何開啟跨域功能

Jan 03, 2018 pm 04:28 PM
laravel 功能 開啟

laravel如何開啟跨域功能?本文主要為大家介紹了關於laravel如何開啟跨域功能的相關資料,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。希望對大家有幫助。

前言

本文主要介紹了關於laravel開啟跨域功能的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

跨域的請求

出於安全性的原因,瀏覽器會限制 Script 中的跨域請求。由於 XMLHttpRequest 遵循同源策略,所有使用 XMLHttpRequest 建構 HTTP 請求的應用只能存取自己的域名,如果需要建構跨域的請求,那麼開發者需要配合瀏覽器做出一些允許跨域的配置。

W3C 應用程式工作小組推薦了一種跨資源共享的機制,這種機制讓Web 應用伺服器能支援跨站存取控制,從而使得安全的進行跨站資料傳輸成為可能,該機制透過幾種方式來對原有模式進行了擴展:

  • 回應的頭部應該追加Access-Control-Allow-Orign,用來表明哪些請求來源被允許存取資源內容

  • 瀏覽器會對請求來源和回應中的值進行匹配驗證

  • #對於跨網域的請求,瀏覽器會預先傳送一個非簡單方式的請求,來判斷給定資源是否準備接受跨域資源存取

  • 服務端應用程式透過檢查請求頭部的Orign 來判定請求是否跨域。

跨來源資源共享標準

#跨來源資源共享標準透過新增一系列HTTP 頭,讓伺服器能聲明哪些來源可以透過瀏覽器存取該伺服器上的資源。另外,對哪些會對伺服器資料造成破壞性回應的HTTP 請求方法(特別是GET 以外的HTTP 方法,或搭配某些MIME 類型的POST 請求),標準強烈要求瀏覽器必須先以OPTIONS 請求方式傳送一個預請求(preflight request),從而取得知伺服器端對跨來源請求所支援HTTP 方法。在確認伺服器允許跨來源請求的情況下,以實際的 HTTP 請求方法傳送那個真正的請求。伺服器端也可以通知客戶端,是否需要隨同請求一起傳送信用資訊(包括 Cookies 和 HTTP 認證相關資料)。

跨來源共用標準需要瀏覽器和服務端共同配合才能完成,目前瀏覽器廠商已經可以將請求部分自動完成,所以跨來源資源存取的重點還是在於伺服器端。

下面列出一些標準中可用的回應頭和請求頭。

Response Header

  • #Access-Control-Allow-Origin : 指明哪些請求來源被允許存取資源,值可以為"*", "null",或單一來源位址。

  • Access-Control-Allow-Credentials : 指明當請求中省略 creadentials 識別時回應是否暴露。對於預先請求來說,它表明實際的請求中可以包含使用者憑證。

  • Access-Control-Expose-Headers : 指明哪些頭資訊可以安全的暴露給 CORS API 規範的 API。

  • Access-Control-Max-Age : 指明預先要求可以在預先要求快取中存放多久。

  • Access-Control-Allow-Methods : 對於預先要求來說,哪些請求方式可以用於實際的請求。

  • Access-Control-Allow-Headers : 對於預先要求來說,指明了哪些頭資訊可以用於實際的請求中。

  • Origin : 指明預先要求或跨域請求的來源。

  • Access-Control-Request-Method : 對於預先請求來說,指明哪些預請求中的請求方式可以用在實際的請求中。

  • Access-Control-Request-Headers : 指明預先要求中的哪些頭資訊可以用於實際的請求中。

Request Header

  • #Origin : 表示傳送請求或預先要求的來源。

  • Access-Control-Request-Method : 在傳送預先要求時帶該請求頭,表示實際的請求將使用的請求方式。

  • Access-Control-Request-Headers : 在傳送預先要求時帶有該請求頭,表示實際的請求將攜帶的請求頭。

中間件

在Laravel 中允許跨域請求,我們可以建立一個追加回應的中間件,用來添加專門處理跨網域的請求的回應頭:

<?php namespace App\Http\Middleware;

use Closure;
use Response;
class EnableCrossRequestMiddleware {

 /**
 * Handle an incoming request.
 *
 * @param \Illuminate\Http\Request $request
 * @param \Closure $next
 * @return mixed
 */
 public function handle($request, Closure $next)
 {

 $response = $next($request);
  $response->header(&#39;Access-Control-Allow-Origin&#39;, config(&#39;app.allow&#39;));
  $response->header(&#39;Access-Control-Allow-Headers&#39;, &#39;Origin, Content-Type, Cookie, Accept&#39;);
  $response->header(&#39;Access-Control-Allow-Methods&#39;, &#39;GET, POST, PATCH, PUT, OPTIONS&#39;);
  $response->header(&#39;Access-Control-Allow-Credentials&#39;, &#39;true&#39;);
  return $response;
 }

}
登入後複製

其中有以下需要注意的地方:

  • 對於跨網域訪問並需要伴隨認證資訊的請求,需要在XMLHttpRequest 實例中指定withCredentials 為true。

  • 這個中間件你可以根據自己的需求進行構建,如果需要在請求中伴隨認證資訊(包含cookie,session)那麼你就需要指定Access-Control-Allow-Credentials 為true,因為對於預請求來說如果你未指定該回應頭,那麼瀏覽器會直接忽略該回應。

  • 在回應中指定Access-Control-Allow-Credentials 為true 時,Access-Control-Allow-Origin 無法指定為*

  • 後置中間件只有在正常響應時才會被追加響應頭,而如果出現異常,這時響應是不會經過中間件的。

相關推薦:

#如何重寫Laravel中如何重寫資源路由

#詳解Laravel如何透過預先載入最佳化Model查詢

#######詳解修改Laravel中url()的根位址##### #####

以上是詳解laravel如何開啟跨域功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Bangla 部分模型檢索中的 Laravel Eloquent ORM) Bangla 部分模型檢索中的 Laravel Eloquent ORM) Apr 08, 2025 pm 02:06 PM

LaravelEloquent模型檢索:輕鬆獲取數據庫數據EloquentORM提供了簡潔易懂的方式來操作數據庫。本文將詳細介紹各種Eloquent模型檢索技巧,助您高效地從數據庫中獲取數據。 1.獲取所有記錄使用all()方法可以獲取數據庫表中的所有記錄:useApp\Models\Post;$posts=Post::all();這將返回一個集合(Collection)。您可以使用foreach循環或其他集合方法訪問數據:foreach($postsas$post){echo$post->

Powertoys的目的是什麼? Powertoys的目的是什麼? Apr 03, 2025 am 12:10 AM

PowerToys是微軟推出的免費工具集合,旨在提升Windows用戶的生產力和系統控制。它通過獨立模塊提供功能,如FancyZones管理窗口佈局和PowerRename批量重命名文件,使用戶工作流程更順暢。

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

Laravel的地理空間:互動圖和大量數據的優化 Laravel的地理空間:互動圖和大量數據的優化 Apr 08, 2025 pm 12:24 PM

利用地理空間技術高效處理700萬條記錄並創建交互式地圖本文探討如何使用Laravel和MySQL高效處理超過700萬條記錄,並將其轉換為可交互的地圖可視化。初始挑戰項目需求:利用MySQL數據庫中700萬條記錄,提取有價值的見解。許多人首先考慮編程語言,卻忽略了數據庫本身:它能否滿足需求?是否需要數據遷移或結構調整? MySQL能否承受如此大的數據負載?初步分析:需要確定關鍵過濾器和屬性。經過分析,發現僅少數屬性與解決方案相關。我們驗證了過濾器的可行性,並設置了一些限制來優化搜索。地圖搜索基於城

Laravel和後端:為Web應用程序提供動力邏輯 Laravel和後端:為Web應用程序提供動力邏輯 Apr 11, 2025 am 11:29 AM

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 Apr 18, 2025 am 09:24 AM

在使用CraftCMS開發網站時,常常會遇到資源文件緩存的問題,特別是當你頻繁更新CSS和JavaScript文件時,舊版本的文件可能仍然被瀏覽器緩存,導致用戶無法及時看到最新的更改。這個問題不僅影響用戶體驗,還會增加開發和調試的難度。最近,我在項目中遇到了類似的困擾,經過一番探索,我找到了wiejeben/craft-laravel-mix這個插件,它完美地解決了我的緩存問題。

laravel用戶登錄功能 laravel用戶登錄功能 Apr 18, 2025 pm 12:48 PM

Laravel 提供了一個全面的 Auth 框架,用於實現用戶登錄功能,包括:定義用戶模型(Eloquent 模型)創建登錄表單(Blade 模板引擎)編寫登錄控制器(繼承 Auth\LoginController)驗證登錄請求(Auth::attempt)登錄成功後重定向(redirect)考慮安全因素:哈希密碼、防 CSRF 保護、速率限制和安全標頭。此外,Auth 框架還提供重置密碼、註冊和驗證電子郵件等功能。詳情請參閱 Laravel 文檔:https://laravel.com/doc

laravel有哪些版本 laravel新手版本選擇方法 laravel有哪些版本 laravel新手版本選擇方法 Apr 18, 2025 pm 01:03 PM

在面向初学者的 Laravel 框架版本选择指南中,本文深入探討了 Laravel 的版本差異,旨在協助初學者在眾多版本之間做出明智的選擇。我們將重點介紹每個版本的關鍵特徵、比較它們的優缺點,並提供有用的建議,幫助新手根據他們的技能水準和項目需求挑選最合適的 Laravel 版本。對於初學者來說,選擇一個合適的 Laravel 版本至關重要,因為它可以顯著影響他們的學習曲線和整體開發體驗。

See all articles