成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel 開啟跨域功能

muzhuyu / 1063人閱讀

摘要:跨域的請求出于安全性的原因,瀏覽器會限制中的跨域請求。跨源共享標(biāo)準(zhǔn)需要瀏覽器和服務(wù)端共同配合才能完成,目前瀏覽器廠商已經(jīng)可以將請求部分自動完成,所以跨源資源訪問的重點還是在于服務(wù)器端。指明預(yù)請求或者跨域請求的來源。

跨域的請求

出于安全性的原因,瀏覽器會限制 Script 中的跨域請求。由于 XMLHttpRequest 遵循同源策略,所有使用 XMLHttpRequest 構(gòu)造 HTTP 請求的應(yīng)用只能訪問自己的域名,如果需要構(gòu)造跨域的請求,那么開發(fā)者需要配合瀏覽器做出一些允許跨域的配置。

W3C 應(yīng)用工作組推薦了一種跨資源共享的機制,這種機制讓 Web 應(yīng)用服務(wù)器能支持跨站訪問控制,從而使得安全的進(jìn)行跨站數(shù)據(jù)傳輸成為可能,該機制通過幾種方式來對原有模式進(jìn)行了擴展:

響應(yīng)的頭部應(yīng)該追加 Access-Control-Allow-Orign,用來表明哪些請求源被允許訪問資源內(nèi)容

瀏覽器會對請求源和響應(yīng)中的值進(jìn)行匹配驗證

對于跨域的請求,瀏覽器會預(yù)發(fā)送一個非簡單方式的請求,來判斷給定資源是否準(zhǔn)備接受跨域資源訪問

服務(wù)端應(yīng)用通過檢查請求頭部的 Orign 來判定請求是否跨域。

跨源資源共享標(biāo)準(zhǔn)

跨源資源共享標(biāo)準(zhǔn)通過新增一系列 HTTP 頭,讓服務(wù)器能聲明哪些來源可以通過瀏覽器訪問該服務(wù)器上的資源。另外,對哪些會對服務(wù)器數(shù)據(jù)造成破壞性響應(yīng)的 HTTP 請求方法(特別是 GET 以外的 HTTP 方法,或者搭配某些 MIME 類型的 POST 請求),標(biāo)準(zhǔn)強烈要求瀏覽器必須先以 OPTIONS 請求方式發(fā)送一個預(yù)請求(preflight request),從而獲取知服務(wù)器端對跨源請求所支持 HTTP 方法。在確認(rèn)服務(wù)器允許跨源請求的情況下,以實際的 HTTP 請求方法發(fā)送那個真正的請求。服務(wù)器端也可以通知客戶端,是不是需要隨同請求一起發(fā)送信用信息(包括 Cookies 和 HTTP 認(rèn)證相關(guān)數(shù)據(jù))。

跨源共享標(biāo)準(zhǔn)需要瀏覽器和服務(wù)端共同配合才能完成,目前瀏覽器廠商已經(jīng)可以將請求部分自動完成,所以跨源資源訪問的重點還是在于服務(wù)器端。

下面列出一些標(biāo)準(zhǔn)中可用的響應(yīng)頭和請求頭。

Response Header

Access-Control-Allow-Origin : 指明哪些請求源被允許訪問資源,值可以為 "*","null",或者單個源地址。

Access-Control-Allow-Credentials : 指明當(dāng)請求中省略 creadentials 標(biāo)識時響應(yīng)是否暴露。對于預(yù)請求來說,它表明實際的請求中可以包含用戶憑證。

Access-Control-Expose-Headers : 指明哪些頭信息可以安全的暴露給 CORS API 規(guī)范的 API。

Access-Control-Max-Age : 指明預(yù)請求可以在預(yù)請求緩存中存放多久。

Access-Control-Allow-Methods : 對于預(yù)請求來說,哪些請求方式可以用于實際的請求。

Access-Control-Allow-Headers : 對于預(yù)請求來說,指明了哪些頭信息可以用于實際的請求中。

Origin : 指明預(yù)請求或者跨域請求的來源。

Access-Control-Request-Method : 對于預(yù)請求來說,指明哪些預(yù)請求中的請求方式可以被用在實際的請求中。

Access-Control-Request-Headers : 指明預(yù)請求中的哪些頭信息可以用于實際的請求中。

Request Header

Origin : 表明發(fā)送請求或預(yù)請求的來源。

Access-Control-Request-Method : 在發(fā)送預(yù)請求時帶該請求頭,表明實際的請求將使用的請求方式。

Access-Control-Request-Headers : 在發(fā)送預(yù)請求時帶有該請求頭,表明實際的請求將攜帶的請求頭。

中間件

在 Laravel 中允許跨域請求,我們可以構(gòu)建一個追加響應(yīng)的中間件,用來添加專門處理跨域的請求的響應(yīng)頭:

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

}

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

對于跨域訪問并需要伴隨認(rèn)證信息的請求,需要在 XMLHttpRequest 實例中指定 withCredentialstrue。

這個中間件你可以根據(jù)自己的需求進(jìn)行構(gòu)建,如果需要在請求中伴隨認(rèn)證信息(包含 cookie,session)那么你就需要指定 Access-Control-Allow-Credentialstrue, 因為對于預(yù)請求來說如果你未指定該響應(yīng)頭,那么瀏覽器會直接忽略該響應(yīng)。

在響應(yīng)中指定 Access-Control-Allow-Credentialstrue 時,Access-Control-Allow-Origin 不能指定為 *

后置中間件只有在正常響應(yīng)時才會被追加響應(yīng)頭,而如果出現(xiàn)異常,這時響應(yīng)是不會經(jīng)過中間件的。

PS: 歡迎關(guān)注簡書 Laravel 專題,也歡迎 Laravel 相關(guān)文章的投稿 :),作者知識技能水平有限,如果你有更好的設(shè)計方案歡迎討論交流,如果有錯誤的地方也請批評指正,在此表示感謝謝謝 :)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21850.html

相關(guān)文章

  • 「新輪子」PHP CORS (Cross-origin resource sharing),解決 P

    摘要:而我的新輪子也并不是專門解決它的問題的,而是順便解決而已。概述這個包,支持在所有的項目中使用。一旦出現(xiàn)成員,代表允許全部。列出允許跨域請求的方法列表,默認(rèn)是代表所有方法。信息地址嗯,新輪子,求一波。 showImg(https://segmentfault.com/img/bV5VxN?w=844&h=656); 是的,可能了解 Laravel 的都知道,在 Laravel 中簡單的設(shè)...

    lbool 評論0 收藏0
  • laravel記錄

    摘要:開啟跨域?qū)τ诳缬蛟L問并需要伴隨認(rèn)證信息的請求,需要在實例中指定為在響應(yīng)中指定為時,不能指定為自定義命令命令生成文件這里是命令行調(diào)用的名字如這里的命令行調(diào)用的時候就是這里填寫命令行的描述當(dāng)執(zhí)行 laravel開啟跨域 //對于跨域訪問并需要伴隨認(rèn)證信息的請求,需要在 XMLHttpRequest 實例中指定 withCredentials 為 true,在響應(yīng)中指定 Access-Con...

    roland_reed 評論0 收藏0
  • Nginx入門到實戰(zhàn)(2)場景實現(xiàn)篇

    摘要:上一章了解了的基礎(chǔ)理論與配置,這一章將介紹在各種不同場景下的不同使用方法一靜態(tài)資源服務(wù)靜態(tài)資源類型非服務(wù)器動態(tài)運行生成的文件,換句話說,就是可以直接在服務(wù)器上找到對應(yīng)文件的請求瀏覽器端渲染圖片視頻文件,任意下載文件靜態(tài)資源服務(wù)場景什么是例 上一章了解了nginx的基礎(chǔ)理論與配置,這一章將介紹nginx在各種不同場景下的不同使用方法 一、靜態(tài)資源WEB服務(wù) 1.靜態(tài)資源類型 非服務(wù)器動態(tài)...

    netmou 評論0 收藏0
  • 【日常填坑】之a(chǎn)jax請求laravel的api接口

    摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態(tài)的,并且會應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:http://www.linganm...

    Arno 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<