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

資訊專欄INFORMATION COLUMN

CodeIgniter 4 的內(nèi)容協(xié)商

CarlBenjamin / 3080人閱讀

摘要:然而事實(shí)上服務(wù)器可以幫我們處理某些形式的內(nèi)容協(xié)商,我們通常不太善于利用這一點(diǎn),但并不意味著服務(wù)器不能處理這些信息。但如果你想用,那在中使用內(nèi)容協(xié)商也是很容易的。

當(dāng)我關(guān)注到 HTTP 層的時(shí)候,發(fā)現(xiàn)很多 CIer 對(duì)內(nèi)容協(xié)商還不是很了解,下面我們一起來(lái)探討一下什么是內(nèi)容協(xié)商,以及如何在即將到來(lái)的 CodeIgniter 4 中使用他。

什么是內(nèi)容協(xié)商?

簡(jiǎn)而言之,內(nèi)容協(xié)商是指客戶端和服務(wù)器端就響應(yīng)的資源內(nèi)容進(jìn)行交涉,然后提供給客戶端最為適合的資源。內(nèi)容協(xié)商會(huì)以響應(yīng)資源的語(yǔ)言、圖片類型和編碼方式等作為判斷的基準(zhǔn)(包含在請(qǐng)求頭中的某些 Accept 字段就是判斷的基準(zhǔn))。

舉個(gè)例子,我用 Chrome 訪問(wèn) Mozilla 的站點(diǎn),可以看到下面的 HTTP 請(qǐng)求頭信息:

accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

accept-encoding:gzip, deflate, sdch

accept-language:en-US,en;q=0.8

這些 accept 信息告訴我們?yōu)g覽器所支持的格式,并提供這些格式的優(yōu)先級(jí)信息(通過(guò) q 的值來(lái)確定優(yōu)先級(jí))。以上信息說(shuō)明瀏覽器在所有支持的內(nèi)容類型中更希望接收 text/html 類型的內(nèi)容。由于我的瀏覽器的語(yǔ)言設(shè)置是英語(yǔ),所以 accept-language 請(qǐng)求頭表示我更喜歡美式英語(yǔ)(en-US)的頁(yè)面。

很顯然,即使我們不提供任何內(nèi)容協(xié)商信息,Web 站點(diǎn)還是可以照常運(yùn)行,并且我們已經(jīng)這樣做了很多年。然而事實(shí)上 Web 服務(wù)器可以幫我們處理某些形式的內(nèi)容協(xié)商,我們通常不太善于利用這一點(diǎn),但并不意味著服務(wù)器不能處理這些信息。

內(nèi)容協(xié)商有兩個(gè)很吸引人的用處,一個(gè)是用于那些支持多國(guó)語(yǔ)言的站點(diǎn),另一個(gè)是用于返回特定格式數(shù)據(jù)的 API 接口。

是不是必須要使用內(nèi)容協(xié)商呢?可能不一定,他也許是把雙刃劍,有些人提議不要使用他,也有些人認(rèn)為他就像切片面包一樣令人喜愛(ài)。但如果你想用,那在 CodeIgniter 中使用內(nèi)容協(xié)商也是很容易的。

一個(gè)簡(jiǎn)單的例子

這里我不會(huì)對(duì)內(nèi)容協(xié)商作過(guò)多詳細(xì)的介紹(詳細(xì)介紹將寫(xiě)到用戶手冊(cè)中),這個(gè)例子簡(jiǎn)單介紹了內(nèi)容協(xié)商是如何確定輸出語(yǔ)言的。

class BaseController extends CodeIgniterController
{
    protected $language;

    public function __construct(...$params)
    {
        parent::__construct(...$params);

        $supportedLangs = ["en-US", "en", "fr"];

        $this->language = $this->request->negotiate("language", $supportedLangs);
    }
}

這個(gè)例子表示該站點(diǎn)可以支持英語(yǔ)和法語(yǔ),我們將支持的語(yǔ)言賦值到 $supportedLangs 數(shù)組里,預(yù)示著默認(rèn)語(yǔ)言是美式英語(yǔ),但也支持普通英語(yǔ)和法語(yǔ),然后簡(jiǎn)單調(diào)用 $negotiate->language() 方法,傳遞支持的語(yǔ)言類型,解析時(shí)就能識(shí)別正確的 HTTP 頭,然后按照數(shù)組里定義的優(yōu)先級(jí)順序,返回最匹配的結(jié)果。如果兩種語(yǔ)言都無(wú)法匹配,就會(huì)使用數(shù)組中的第一個(gè)語(yǔ)言。

Negotiate 類中的 4 個(gè)協(xié)商方法分別為:

media() 不同于通常的 Accept 請(qǐng)求頭,他可以用來(lái)請(qǐng)求不同版本的 html/text,或者音頻支持,圖像支持,等等。

charset() 不同于 Accept-Charset 請(qǐng)求頭,如果沒(méi)有匹配的話,默認(rèn)值為 UTF-8。

encoding() 不同于 Accept-Encoding 請(qǐng)求頭,可以決定任何客戶端支持使用的壓縮類型。

language() 不同于 Accept-Language 請(qǐng)求頭。

并不是所有場(chǎng)景都用得著內(nèi)容協(xié)商,但他卻是構(gòu)建高質(zhì)量 API 的一個(gè)有力工具,并且也能夠創(chuàng)造性的應(yīng)用于其他地方。

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

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

相關(guān)文章

  • CodeIgniter 4 請(qǐng)求和響應(yīng)

    摘要:在版中,我們將更加模塊化層,并構(gòu)建全新的類結(jié)構(gòu)來(lái)同時(shí)處理的請(qǐng)求和響應(yīng)。類類用于把程序的執(zhí)行結(jié)果返回給客戶端。類會(huì)捕獲控制器的輸出,并自動(dòng)設(shè)置為響應(yīng)的主體。在需要的時(shí)候,框架為你提供了精確控制響應(yīng)的能力。 CodeIgniter 4 對(duì)輸入和輸出的處理方式做了一個(gè)較大的改變。在上一個(gè)版本中,包括最新的 V3 版,輸入和輸出分別是用兩個(gè)包含相關(guān)函數(shù)的類來(lái)處理的。這樣的處理方式背后雖然沒(méi)有什...

    zzzmh 評(píng)論0 收藏0
  • Codeigniter 4.0-dev 版源碼學(xué)習(xí)筆記之三——核心文件 Codeigniter.ph

    摘要:行,是否強(qiáng)制訪問(wèn)。行,嘗試處理此次請(qǐng)求,詳細(xì)見(jiàn)方法。至此,的執(zhí)行主流程完畢。小結(jié)是的核心文件,它被調(diào)用后,完成了諸多的主流程操作。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 Codeigniter.php 是 CI 4 的核心所在,在這里接收并處理了 request 請(qǐng)求,安全檢查,緩存處理, URL 解析以及路由匹配,執(zhí)行過(guò)濾器,加載運(yùn)行 Controll...

    alighters 評(píng)論0 收藏0
  • 現(xiàn)在寫(xiě) PHP,你應(yīng)該知道這些

    摘要:首先你應(yīng)該是在用以上的版本,如果版本在這之下,是時(shí)候該升級(jí)了。按照其官網(wǎng)的說(shuō)法,這個(gè)組織的目的并不是告訴你你應(yīng)該怎么做,只是一些主流的框架之間相互協(xié)商和約定。和沒(méi)有出現(xiàn)在以上的列表中,是因?yàn)檫€沒(méi)有投票通過(guò)。不要被這些話所困擾。 首先你應(yīng)該是在用 PHP 5.3 以上的版本,如果 PHP 版本在這之下,是時(shí)候該升級(jí)了。我建議如果有條件,最好使用最新的版本。 你應(yīng)該看過(guò) PHP The R...

    supernavy 評(píng)論0 收藏0
  • PHP 框架 CodeIgniter 4 alpha 1 版發(fā)布了

    摘要:經(jīng)過(guò)漫長(zhǎng)的艱苦奮斗,版今天終于發(fā)布了。該版本具備所有主要功能,但仍存在一些問(wèn)題。認(rèn)為缺少什么在論壇中發(fā)布帖子。我們將很快在論壇啟動(dòng)候選新功能的工作,我們將從論壇中選出有價(jià)值的內(nèi)容你使用該版本時(shí)遇到的問(wèn)題在論壇中發(fā)布帖子。 經(jīng)過(guò)漫長(zhǎng)的艱苦奮斗,CodeIgnier 4.0.0 alpha 1 版今天終于發(fā)布了。 向 Lonnie Ezell 致敬!感謝他為實(shí)現(xiàn)愿景和核心實(shí)施所做的所有努力...

    james 評(píng)論0 收藏0
  • Codeigniter 4.0-dev 版源碼學(xué)習(xí)筆記之四——詳細(xì)路由過(guò)程

    摘要:行,判斷如果為空,那么返回默認(rèn)路由。行,把處理完畢后找到的返回。方法該方法是自動(dòng)按著約定規(guī)則去目錄去找路由的過(guò)程。此文可以轉(zhuǎn)載,但轉(zhuǎn)載前需要發(fā)郵件到進(jìn)行溝通,未溝通的均視作侵權(quán)。 前言 我個(gè)人覺(jué)得在當(dāng)前 MVC 流行的架構(gòu)下,要想去了解一個(gè)框架,或者是一個(gè)基于此架構(gòu)下的應(yīng)用程序,最好的入手方式就是先看路由,雖然路由不是 MVC 里的任何一個(gè),但是知道了路由的來(lái)龍去脈就知道了整個(gè)框架或者...

    NSFish 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<