摘要:對于在中的實現(xiàn)需要在項目中加入一個中間件,對于簡單請求,比如請求,在路由中加入該中間件即可。
之前做了一個公司的內(nèi)部管理系統(tǒng),現(xiàn)在希望通過在釘釘上開發(fā)一個小應(yīng)用查看相關(guān)數(shù)據(jù),在此過程中涉及了HTTP的跨域請求的問題,在了解相關(guān)信息后,打算基于CORS實現(xiàn)。關(guān)于CORS(跨域資源共享),見這篇文章。
CORS中,對于簡單請求,只需在服務(wù)器進(jìn)行相關(guān)的字段驗證后進(jìn)行響應(yīng)即可,主要是驗證請求的來源及請求的方法等是否是服務(wù)器許可的。
而對于復(fù)雜請求,則瀏覽器會先發(fā)送一個options請求到服務(wù)器進(jìn)行驗證,驗證通過后,再發(fā)送用戶的請求。再options請求中,服務(wù)器會返回允許的請求源、請求方法及頭部字段等。
對于CORS在Laravel中的實現(xiàn)需要在項目中加入一個中間件Cors,
"POST, GET, OPTIONS, PUT, DELETE", "Access-Control-Allow-Headers"=> "Content-Type, X-Auth-Token, Origin" ]; $response = $next($request); foreach($headers as $key => $value) $response->header($key, $value); return $response; } }
對于簡單請求,比如get請求,在路由中加入該中間件即可。
但對于復(fù)雜請求,則處理不了。(根據(jù)文檔,POST請求滿足某些條件是才是復(fù)雜請求,但不知道為何,我發(fā)出的POST請求都是復(fù)雜請求,即瀏覽器首先會觸發(fā)一次options請求,再提交客戶的實際請求)。
對于只是采取與簡單請求相同的方法,則對于復(fù)雜請求無法正確響應(yīng)。
以下是GET請求的請求-響應(yīng)信息:
以下是POST請求的響應(yīng):
可見POST請求中,瀏覽器先進(jìn)行了OPTIONS請求,但該請求的響應(yīng)中,并沒有GET響應(yīng)中的
Access-Control-Allow-Headers:Content-Type, X-Auth-Token, Origin Access-Control-Allow-Methods:POST, GET, OPTIONS, PUT, DELETE Access-Control-Allow-Origin:*
等跨域控制字段。
通過查詢資料,Laravel對于OPTIONS請求會自動常規(guī)響應(yīng)200。所以缺少必要的頭部信息。
所以,我通過在路由中專門加入一個處理options的路由
Route::options("cors/test",function(){ return response("ok") ->header("Access-Control-Allow-Methods","POST, GET, OPTIONS, PUT, DELETE") ->header("Access-Control-Allow-Headers","Content-Type, X-Auth-Token, Origin"); })->middleware("cors");
即保證了OPTIONS響應(yīng)了必要的頭部信息。
但該方法需要關(guān)閉Laravel中相應(yīng)路由的CSRF功能,具體在AppHttpMiddlewareVerifyCsrfToken添加
protected $except = [ "cors/*" ];
雖然解決了問題,但對于其中的很多細(xì)節(jié)還是不了解,需要進(jìn)一步學(xué)習(xí)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/22541.html
摘要:對于在中的實現(xiàn)需要在項目中加入一個中間件,對于簡單請求,比如請求,在路由中加入該中間件即可。 之前做了一個公司的內(nèi)部管理系統(tǒng),現(xiàn)在希望通過在釘釘上開發(fā)一個小應(yīng)用查看相關(guān)數(shù)據(jù),在此過程中涉及了HTTP的跨域請求的問題,在了解相關(guān)信息后,打算基于CORS實現(xiàn)。關(guān)于CORS(跨域資源共享),見這篇文章。CORS中,對于簡單請求,只需在服務(wù)器進(jìn)行相關(guān)的字段驗證后進(jìn)行響應(yīng)即可,主要是驗證請求的來...
摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態(tài)的,并且會應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:http://www.linganm...
摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態(tài)的,并且會應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:http://www.linganm...
摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態(tài)的,并且會應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:http://www.linganm...
閱讀 1253·2023-04-25 18:57
閱讀 2138·2023-04-25 16:28
閱讀 3940·2021-11-24 09:39
閱讀 3638·2021-11-16 11:45
閱讀 1827·2021-10-13 09:40
閱讀 1267·2019-08-30 15:52
閱讀 1723·2019-08-30 10:57
閱讀 663·2019-08-29 16:55