14820
1969
我一直在弄亂JSON一段時間,只是將它作為文本推出,它並沒有傷害任何人(據我所知),但是我想正確地開始做事。
我已經看到許多所謂的JSON內容類型的“標準”:
應用程序/ json
應用程序/ x-javascript
文字/ javascript
文字/ x-javascript
文字/ x-json
但是,哪一個是正確的,還是最好的?我發現在它們之間存在安全性和瀏覽器支持問題。
我知道有一個類似的問題,如果REST API返回JSON,則為哪種MIME類型?但是我想要一個更有針對性的答案。 
1個
2
下一個
對於JSON文本:
應用程序/ json
JSON文本的MIME媒體類型為application / json。默認編碼為UTF-8。 (來源:RFC 4627)。
對於帶回調的JSONP(可運行的JavaScript):
應用程序/ javascript
以下是相關評論中提到的一些博客文章:
為什麼不應該將text / html用於JSON
Internet Explorer有時與application / json有關
相當完整的Mimetype列表及其用途
來自@gnrfan的IANA上的官方MIME類型列表
|
IANA已將JSON的官方MIME類型註冊為application / json。
當被問及為什麼不是text / json時,Crockford似乎說JSON並不是JavaScript也不是文本,而且IANA比text / *更可能分發application / *。
更多資源:
媒體類型
請求評論4627
bluesmoon:JSON具有一種類型
|
對於JSON:
內容類型:application / json
對於JSON-P:
內容類型:應用程序/ JavaScript
|
當然,JSON的正確MIME媒體類型是application / json,但是有必要了解應用程序中期望的數據類型。
例如,我使用Ext GWT,並且服務器響應必須為text / html,但包含JSON數據。
客戶端,Ext GWT表單偵聽器
uploadForm.getForm()。addListener(new FormListenerAdapter()
{
@Override
公共無效onActionFailed(表單,int httpStatus,字符串responseText)
{
MessageBox.alert(“ Error”);
}
@Override
公共無效onActionComplete(表單,int httpStatus,字符串responseText)
{
MessageBox.alert(“成功”);
}
});
如果使用application / json響應類型,瀏覽器建議我保存文件。
使用Spring MVC的服務器端源代碼片段
返回新的AbstractUrlBasedView()
{
@SuppressWarnings(“未選中”)
@Override
受保護的void renderMergedOutputModel(地圖模型,HttpServletRequest請求,
HttpServletResponse響應)引發異常
{
response.setContentType(“ text / html”);
response.getWriter()。write(json);
}
};
|
JSON:
響應是根據URL中傳遞的查詢參數動態生成的數據。
例:
{“ Name”:“ Foo”,“ Id”:1234,“ Rank”:7}
內容類型:application / json
JSON-P:
帶有填充的JSON。
響應是JSON數據,並包裝了一個函數調用。
例:
functionCall({“ Name”:“ Foo”,“ Id”:1234,“ Rank”:7}));
內容類型:應用程序/ JavaScript
|
如果您使用的是Ubuntu或Debian,並且通過Apache提供.json文件,則可能需要提供具有正確內容類型的文件。我這樣做主要是因為我想使用Firefox擴展JSONView
Apache模塊mod_mime將幫助您輕鬆完成此任務。但是,在Ubuntu中,您需要編輯文件/etc/mime.types並添加以下行
application / json json
然後重新啟動Apache:
sudo服務apache2重新啟動
|
如果要從客戶端調用ASP.NET Web服務,則必須使用application / json使其正常工作。我相信這對於jQuery和Ext框架是相同的。
|
JSON的正確內容類型是application / json,除非您使用的是JSONP,也稱為JSON with Padding,它實際上是JavaScript,因此正確的內容類型將是application / javascript。
|
毫無疑問,application / json是JSON響應的最佳MIME類型。
但是由於一些壓縮問題,我有一些必須使用application / x-javascript的經驗。我的託管環境是與GoDaddy共享的託管。它們不允許我更改服務器配置。我已將以下代碼添加到我的web.config文件中以壓縮響應。
















通過使用此選項,.aspx頁使用g-zip壓縮,但JSON響應未壓縮。我加了

在靜態和動態類型部分中。但這根本不會壓縮JSON響應。
之後,我刪除了這個新添加的類型並添加了

在靜態和動態類型部分中,並更改了響應類型
.ashx(異步處理程序)
應用程序/ x-javascript
現在,我發現我的JSON響應已使用g-zip壓縮。所以我個人建議使用
應用程序/ x-javascript
僅當您要在共享託管環境上壓縮JSON響應時。因為在共享主機中,它們不允許您更改IIS配置。
|
僅當使用application / json作為MIME類型時,我才具有以下內容(截至2011年11月,使用最新版本的Chrome,帶有Firebug的Firefox):
從服務器加載JSON後,Chrome將不再發出警告。
Firebug將在響應中添加一個標籤,向您顯示JSON數據
格式化。如果MIME類型不同,它將顯示為
“響應內容”。
|
並非所有內容都適用於內容類型application / json。
如果您使用Ext JS表單提交來上傳文件,請注意瀏覽器會解析服務器響應以為