什么是Content Negotation呢?翻譯成中文的話就是"內(nèi)容協(xié)商"。當(dāng)然,如果不清楚HTTP規(guī)范(RFC 2616)的話,可以對這個翻譯也是一頭霧水。
先來看看RFC 2616對其的定義是
The process of selecting the best representation for a given response when there are multiple representations available.
這句話是什么意思呢?可以簡單的理解為:當(dāng)存在多個不同的表現(xiàn)形式時,對給定的響應(yīng)選擇一個最好的表現(xiàn)形式的過程
其涉及到相關(guān)的請求報文頭部有下面幾個:
Accept:響應(yīng)可接收的Media Type,如"application/json"等
Accept-Charset:可接收的字符集,如"UTF-8"等
Accept-Encoding:可接收的內(nèi)容編碼,如"gzip"等
Accept-Language:優(yōu)先選用的自然語言,如"en-us等
本文主要用到的是Accept這個請求報文頭!
注:RFC 2616在2014年被拆分成了6個單獨(dú)的協(xié)議!具體可以參見下面的兩個鏈接:
http://www.w3.org/Protocols/rfc2616/rfc2616.html
https://tools.ietf.org/html/rfc2616
前言
可能看了前面一節(jié)的背景介紹,大家可能會一臉懵逼,似乎跟本文的主題并不沾邊,但是多了解一點(diǎn)相關(guān)的知識也是必不可少的
這樣我們也可以知道Content Negotation存在的意義。才能對它的使用有一個更精確的定位。
我們都知道Nancy是基于Http協(xié)議開發(fā)的一個輕量級的Web框架,所以它的內(nèi)部必然會涉及到Content Negotation的實現(xiàn)。
其實在Nancy的實現(xiàn)和在Web Api的實現(xiàn)可