亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

CarlBenjamin / 3119人閱讀

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

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

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

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

舉個例子,我用 Chrome 訪問 Mozilla 的站點,可以看到下面的 HTTP 請求頭信息:

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)先級信息(通過 q 的值來確定優(yōu)先級)。以上信息說明瀏覽器在所有支持的內(nèi)容類型中更希望接收 text/html 類型的內(nèi)容。由于我的瀏覽器的語言設(shè)置是英語,所以 accept-language 請求頭表示我更喜歡美式英語(en-US)的頁面。

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

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

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

一個簡單的例子

這里我不會對內(nèi)容協(xié)商作過多詳細的介紹(詳細介紹將寫到用戶手冊中),這個例子簡單介紹了內(nèi)容協(xié)商是如何確定輸出語言的。

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);
    }
}

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

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

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

charset() 不同于 Accept-Charset 請求頭,如果沒有匹配的話,默認值為 UTF-8。

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

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

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

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

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

相關(guān)文章

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

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

    zzzmh 評論0 收藏0
  • Codeigniter 4.0-dev 版源碼學習筆記之三——核心文件 Codeigniter.ph

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

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

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

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

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

    james 評論0 收藏0
  • Codeigniter 4.0-dev 版源碼學習筆記之四——詳細路由過程

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

    NSFish 評論0 收藏0

發(fā)表評論

0條評論

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