什么是Content Negotation呢?翻譯成中文的話就是"內(nèi)容協(xié)商"。當(dāng)然,如果不清楚HTTP規(guī)范(RFC 2616)的話,可以對(duì)這個(gè)翻譯也是一頭霧水。

先來(lái)看看RFC 2616對(duì)其的定義是

The process of selecting the best representation for a given response when there are multiple representations available.

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

這句話是什么意思呢?可以簡(jiǎn)單的理解為:當(dāng)存在多個(gè)不同的表現(xiàn)形式時(shí),對(duì)給定的響應(yīng)選擇一個(gè)最好的表現(xiàn)形式的過(guò)程

其涉及到相關(guān)的請(qǐng)求報(bào)文頭部有下面幾個(gè):

  • Accept:響應(yīng)可接收的Media Type,如"application/json"等

  • Accept-Charset:可接收的字符集,如"UTF-8"等

  • Accept-Encoding:可接收的內(nèi)容編碼,如"gzip"等

  • Accept-Language:優(yōu)先選用的自然語(yǔ)言,如"en-us等

本文主要用到的是Accept這個(gè)請(qǐng)求報(bào)文頭!

注:RFC 2616在2014年被拆分成了6個(gè)單獨(dú)的協(xié)議!具體可以參見(jiàn)下面的兩個(gè)鏈接:

http://www.w3.org/Protocols/rfc2616/rfc2616.html

https://tools.ietf.org/html/rfc2616

前言

可能看了前面一節(jié)的背景介紹,大家可能會(huì)一臉懵逼,似乎跟本文的主題并不沾邊,但是多了解一點(diǎn)相關(guān)的知識(shí)也是必不可少的

這樣我們也可以知道Content Negotation存在的意義。才能對(duì)它的使用有一個(gè)更精確的定位。

我們都知道Nancy是基于Http協(xié)議開(kāi)發(fā)的一個(gè)輕量級(jí)的Web框架,所以它的內(nèi)部必然會(huì)涉及到Content Negotation的實(shí)現(xiàn)。

其實(shí)在Nancy的實(shí)現(xiàn)和在Web Api的實(shí)現(xiàn)可