欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Laravel開啟跨域請(qǐng)求的方法

 更新時(shí)間:2019年10月13日 17:13:07   作者:leedaning  
今天小編就為大家分享一篇Laravel開啟跨域請(qǐng)求的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

項(xiàng)目中用到了接口,外部調(diào)用的時(shí)候老是請(qǐng)求不到,本地請(qǐng)求卻沒問題,查了下說是因?yàn)榭缬虻膯栴}。

根據(jù)網(wǎng)上所說解決方法如下:

1、建立中間件Cors.php

命令:php artisan make:middleware Cors

在/app/Http/Middleware/ 目錄下會(huì)出現(xiàn)一個(gè)Cors.php 文件。

2、在handle 方法中加入如下內(nèi)容:

 $response = $next($request);
 $response->header('Access-Control-Allow-Origin', '*');
 $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept, multipart/form-data, application/json');
 $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
 $response->header('Access-Control-Allow-Credentials', 'false');
 return $response;

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

對(duì)于跨域訪問并需要伴隨認(rèn)證信息的請(qǐng)求,需要在 XMLHttpRequest 實(shí)例中指定 withCredentials 為 true。

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

在響應(yīng)中指定 Access-Control-Allow-Credentials 為 true 時(shí),Access-Control-Allow-Origin 不能指定為 *(這個(gè)一定要注意,我就是在這個(gè)地方調(diào)了好久)

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

Cors.php文件內(nèi)容如下:

<?php

namespace App\Http\Middleware;

use Closure;

class Cors
{
 /**
 * 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('Access-Control-Allow-Origin', '*');
 $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, Accept, multipart/form-data, application/json');
 $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
 $response->header('Access-Control-Allow-Credentials', 'false');
 return $response;
 }
}

3、在 Kernel.php文件中的$middleware中加入剛剛添加的中間件:\App\Http\Middleware\Cors::class,

如:

 protected $middleware = [
 \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
 \App\Http\Middleware\EncryptCookies::class,
 \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
 \Illuminate\Session\Middleware\StartSession::class,
 \Illuminate\View\Middleware\ShareErrorsFromSession::class,
 \App\Http\Middleware\Cors::class,
 ];

以下內(nèi)容為網(wǎng)絡(luò)摘抄:

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

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

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

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

Response Header

Access-Control-Allow-Origin : 指明哪些請(qǐng)求源被允許訪問資源,值可以為 “*”,”null”,或者單個(gè)源地址。

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

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

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

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

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

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

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

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

Request Header

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

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

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

Author:leedaning

以上這篇Laravel開啟跨域請(qǐng)求的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論