當我關注到 http 層的時候,發現很多 cier 對內容協商還不是很了解,下面我們一起來**一下什麼是內容協商,以及如何在即將到來的 codeigniter 4 中使用他。
簡而言之,內容協商是指客戶端和伺服器端就響應的資源內容進行交涉,然後提供給客戶端最為適合的資源。內容協商會以響應資源的語言、型別和編碼方式等作為判斷的基準(包含在請求頭中的某些accept
字段就是判斷的基準)。
舉個例子,我用 chrome 訪問 mozilla 的站點,可以看到下面的 http 請求頭資訊:
accept-encoding:gzip, deflate, sdch
accept-language:en-us,en;q=0.8
這些accept
資訊告訴我們瀏覽器所支援的格式,並提供這些格式的優先順序資訊(通過 q 的值來確定優先順序)。以上資訊說明瀏覽器在所有支援的內容型別中更希望接收 text/html 型別的內容。由於我的瀏覽器的語言設定是英語,所以accept-language
請求頭表示我更喜歡美式英語(en-us)的頁面。
很顯然,即使我們不提供任何內容協商資訊,web 站點還是可以照常執行,並且我們已經這樣做了很多年。然而事實上 web 伺服器可以幫我們處理某些形式的內容協商,我們通常不太善於利用這一點,但並不意味著伺服器不能處理這些資訊。
內容協商有兩個很吸引人的用處,乙個是用於那些支援多國語言的站點,另乙個是用於返回特定格式資料的 api 介面。
是不是必須要使用內容協商呢?可能不一定,他也許是把雙刃劍,有些人提議不要使用他,也有些人認為他就像切片麵包一樣令人喜愛。但如果你想用,那在 codeigniter 中使用內容協商也是很容易的。
這裡我不會對內容協商作過多詳細的介紹(詳細介紹將寫到使用者手冊中),這個例子簡單介紹了內容協商是如何確定輸出語言的。
class basecontroller extends \codeigniter\controller
}
這個例子表示該站點可以支援英語和法語,我們將支援的語言賦值到$supportedlangs
陣列裡,預示著預設語言是美式英語,但也支援普通英語和法語,然後簡單呼叫$negotiate->language()
方法,傳遞支援的語言型別,解析時就能識別正確的 http 頭,然後按照陣列裡定義的優先順序順序,返回最匹配的結果。如果兩種語言都無法匹配,就會使用陣列中的第乙個語言。
negotiate 類中的 4 個協商方法分別為:
並不是所有場景都用得著內容協商,但他卻是構建高質量 api 的乙個有力工具,並且也能夠創造性的應用於其他地方。
CodeIgniter4 管理多個應用
預設情況下,假定您僅打算使用codeigniter來管理乙個應用程式,該應用程式將在您的應用程式目錄中構建。但是,可以有多個應用程式共享乙個codeigniter安裝,甚至可以重新命名或重定位應用程式目錄。變數設定其名稱,就可以這樣做 可以將應用程式目錄移動到伺服器上與web根目錄不同的位置。為此,...
CodeIgniter4 概述 自動載入檔案
每個應用程式都包含許多位於不同位置的類。該框架提供了用於核心功能的類。您的應用程式將具有許多庫,模型和其他實體,以使其正常執行。您可能有專案正在使用的第三方類。跟蹤每個檔案的位置,然後將該位置硬編碼成一系列檔案,這requires 是一件非常麻煩的事情,而且容易出錯。這就是自動裝帶器的用武之地。co...
CodeIgniter中Router類的兩個方法
file location system core router.php 第乙個 fetch the current method access public return string function fetch method return this method 第二個 fetch the c...