yii2怎么進(jìn)行http請(qǐng)求處理

yii2怎么進(jìn)行http請(qǐng)求處理

VerbFilter

VerbFilter?是針對(duì) http 請(qǐng)求方式的過(guò)濾器,作用是定義訪(fǎng)問(wèn)指定動(dòng)作所允許的HTTP請(qǐng)求,若不允許的HTTP請(qǐng)求到來(lái),則會(huì)拋出一個(gè) HTTP 405 錯(cuò)誤。若不指定允許的請(qǐng)求方式,則默認(rèn)允許當(dāng)所有類(lèi)型的請(qǐng)求方式 。 ? ? ? ? (推薦學(xué)習(xí):yii教程

接下來(lái),試一試?VerbFilter?的簡(jiǎn)單使用。

首先,在 SiteController 中添加代碼

public?function?actionInfo() ????{ ????????return?YII::createObject([ ????????????'class'?=>?'yiiwebResponse', ????????????'format'?=>?yiiwebResponse::FORMAT_JSON, ????????????'data'?=>?[ ????????????????'message'?=>?'hello?world', ????????????????'code'?=>?100, ????????????], ????????]); ????}

上述代碼,返回一個(gè)利用 FORMAT_JSON 格式化的字符串

使用URL:http://localhost/basic/web/index.php?r=site/info 訪(fǎng)問(wèn)的時(shí)候,成功返回

{"message":"hello?world","code":100}

接著,在 behaviors() 中添加代碼

public?function?behaviors() ????{ ????????return?[ ????????????...?... ????????????'verbs'?=>?[ ????????????????'class'?=>?VerbFilter::className(), ????????????????'actions'?=>?[ ????????????????????'logout'?=>?['post'],??????????????????? ????????????????????'info'?=>?['post'], ????????????????], ????????????], ????????]; ????}

上述代碼,在 behaviors() 中使用了過(guò)濾器?VerbFilter?,指明訪(fǎng)問(wèn)動(dòng)作 info 時(shí),只能使用 POST 請(qǐng)求方式

此時(shí),使用RESTClient工具,選擇 GET 請(qǐng)求方式進(jìn)行訪(fǎng)問(wèn)的時(shí)候,返回 405 錯(cuò)誤

再次修改代碼

public?function?behaviors() ????{ ????????return?[ ????????????...?... ????????????'verbs'?=>?[ ????????????????'class'?=>?VerbFilter::className(), ????????????????'actions'?=>?[ ????????????????????'logout'?=>?['post'],??????????????????? ????????????????????'info'?=>?['post','get'], ????????????????], ????????????], ????????]; ????}

允許POST和GET兩種請(qǐng)求方式訪(fǎng)問(wèn)動(dòng)作Info,使用RESTClient工具訪(fǎng)問(wèn),選擇 GET 請(qǐng)求方式進(jìn)行訪(fǎng)問(wèn)的時(shí)候獲取到返回值

{"message":"hello?world","code":100}

此時(shí)使用工具 RESTClient ,通過(guò) post 發(fā)送請(qǐng)求,返回 405 錯(cuò)誤。

這時(shí)候,修改 web.php 文件

'request'?=>?[ ????????????//?!!!?insert?a?secret?key?in?the?following?(if?it?is?empty)?-?this?is?required?by?Cookie?validation ????????????'cookieValidationKey'?=>?'4mWc84oNsYJpc-nnnjMwyOOiCTgcThig', ????????????'enableCookieValidation'?=>?false, ????????????'enablecsrfValidation'?=>?false, ????????],

添加上這兩行代碼,警用cookie保護(hù)與CSRF防范策略

?'enableCookieValidation'?=>?false, ?'enableCsrfValidation'?=>?false,

再次通過(guò) post 發(fā)送請(qǐng)求訪(fǎng)問(wèn),成功。

注:CSRF驗(yàn)證

因?yàn)閃eb網(wǎng)頁(yè)訪(fǎng)問(wèn)的時(shí)候,form表單中會(huì)有對(duì)應(yīng)的一個(gè)隱藏input:_csrf進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)才可以正常進(jìn)行訪(fǎng)問(wèn);

而非網(wǎng)頁(yè)訪(fǎng)問(wèn)方式(不通過(guò)Web表單,例如用命令行cURL請(qǐng)求)是無(wú)法通過(guò)csrf驗(yàn)證的。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享