什么是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.
這句話是什么意思呢?可以簡(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)可