Oli*_*Oli 9962 json content-type http-headers
我一直在忙着JSON一段时间,只是把它作为文本推出它并没有伤害任何人(我知道),但我想开始正确地做事.
我见过这样的JSON内容类型很多所谓的"标准":
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Run Code Online (Sandbox Code Playgroud)
但哪个是正确的,还是最好的?我认为它们之间存在安全性和浏览器支持问题.
我知道有一个类似的问题,如果REST API返回JSON,那么MIME类型是什么?,但我想要一个稍微有针对性的答案.
Gum*_*mbo 10017
对于JSON文本:
application/json
JSON文本的MIME媒体类型是
application/json.默认编码为UTF-8.(来源:RFC 4627).
对于带回调的JSONP(可运行的javascript):
application/javascript
以下是相关评论中提到的一些博客文章.
text/htmlJSONapplication/json(DEAD 2018-06-26)小智 1583
IANA已将JSON的官方MIME类型注册为application/json.
当被问及为什么不text/json,克罗克福德似乎说JSON是不是真正的JavaScript也不是文字,也IANA更有可能来伸手application/*比text/*.
更多资源:
Ali*_*xel 857
对于JSON:
Content-Type: application/json
Run Code Online (Sandbox Code Playgroud)
对于JSON-P:
Content-Type: application/javascript
Run Code Online (Sandbox Code Playgroud)
Mik*_*aev 623
当然,JSON的正确MIME媒体类型是application/json,但有必要实现应用程序中预期的数据类型.
例如,我使用Ext GWT,服务器响应必须为text/html,但包含JSON数据.
客户端,Ext GWT表单监听器
uploadForm.getForm().addListener(new FormListenerAdapter()
{
@Override
public void onActionFailed(Form form, int httpStatus, String responseText)
{
MessageBox.alert("Error");
}
@Override
public void onActionComplete(Form form, int httpStatus, String responseText)
{
MessageBox.alert("Success");
}
});
Run Code Online (Sandbox Code Playgroud)
如果使用application/json响应类型,浏览器建议我保存文件.
使用Spring MVC的服务器端源代码片段
return new AbstractUrlBasedView()
{
@SuppressWarnings("unchecked")
@Override
protected void renderMergedOutputModel(Map model, HttpServletRequest request,
HttpServletResponse response) throws Exception
{
response.setContentType("text/html");
response.getWriter().write(json);
}
};
Run Code Online (Sandbox Code Playgroud)
Bha*_*vin 459
响应是根据URL中传递的查询参数动态生成的数据.
例:
{ "Name": "Foo", "Id": 1234, "Rank": 7 }
Run Code Online (Sandbox Code Playgroud)
内容类型: application/json
带填充的JSON.响应是JSON数据,函数调用包围它.
例:
functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
Run Code Online (Sandbox Code Playgroud)
内容类型: application/javascript
Gou*_*eau 397
如果您使用的是Ubuntu或Debian并且通过Apache提供.json文件,则可能需要使用正确的内容类型来提供文件.我这样做主要是因为我想使用Firefox扩展JSONView
Apache模块mod_mime将有助于轻松完成此任务.但是,使用Ubuntu,您需要编辑文件/etc/mime.types并添加该行
application/json json
Run Code Online (Sandbox Code Playgroud)
然后重启Apache:
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)
sha*_*wat 292
毫无疑问,这application/json是JSON响应的最佳MIME类型.
但是我有一些经验,application/x-javascript因为一些压缩问题我不得不使用.我的托管环境是与GoDaddy共享托管.他们不允许我更改服务器配置.我已将以下代码添加到我的web.config文件中以压缩响应.
<httpCompression>
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<dynamicTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>
Run Code Online (Sandbox Code Playgroud)
通过使用它,.aspx页面使用g-zip压缩但JSON响应不是.我补充道
<add mimeType="application/json" enabled="true"/>
Run Code Online (Sandbox Code Playgroud)
在静态和动态类型部分.但这根本不会压缩JSON响应.
之后我删除了这个新添加的类型并添加了
<add mimeType="application/x-javascript" enabled="true"/>
Run Code Online (Sandbox Code Playgroud)
在静态和动态类型部分中,并更改了响应类型
.ashx(异步处理程序)来
application/x-javascript
Run Code Online (Sandbox Code Playgroud)
现在我发现我的JSON响应是用g-zip压缩的.所以我个人建议使用
application/x-javascript
Run Code Online (Sandbox Code Playgroud)
仅当您要在共享托管环境中压缩JSON响应时.因为在共享主机中,它们不允许您更改IIS配置.
Con*_*nan 241
并非一切都适用于内容类型application/json.
如果您使用Ext JS表单提交上传文件,请注意浏览器解析服务器响应以创建文档<iframe>.
如果服务器使用JSON发送返回对象,则Content-Type必须将标头设置为text/html,以告知浏览器将文本未更改地插入到文档正文中.
VLo*_*Boy 224
JSON是一种特定于域的语言(DSL)和一种独立于JavaScript的数据格式,因此具有自己的MIME类型application/json.对MIME类型的尊重当然是客户端驱动的,因此text/plain可以进行字节传输,但是你会不必要地将解释推送到供应商应用程序域 - application/json.你会通过XML传输text/plain吗?
但老实说,你选择的MIME类型是建议客户端如何解释数据 - text/plain或者text/HTML(当它不是HTML时)就像类型擦除一样 - 它与使用类型语言制作所有类型为Object的对象一样没有信息.
我所知道的没有浏览器运行时将采用JSON文档并自动将其作为JavaScript可访问对象提供给运行时而无需干预,但如果您正在使用残缺客户端,则这是完全不同的事情.但这不是整个故事 - RESTful JSON服务通常没有JavaScript运行时,但它并没有阻止它们使用JSON作为可行的数据交换格式.如果客户端瘫痪...那么我会考虑通过Ajax模板服务来注入HTML .
应用程序/ JSON!
Ema*_*nde 207
如果您处于客户端环境中,那么对于支持良好的Web应用程序,必须调查跨浏览器支持.
application/json正如其他人已经突出显示的那样,正确的HTTP Content-Type 也是如此,但是有些客户端不能很好地处理它,这就是jQuery推荐默认值的原因text/html.
fcm*_*fcm 164
正如许多其他人所提到的,application/json是正确的答案.
但尚未解释的是你提出的其他选择意味着什么.
application/x-javascript:JavaScript之前的实验MIME类型application/javascript是标准的.
text/javascript:现在已经过时了.您应该application/javascript在使用javascript时使用.
text/x-javascript:针对上述情况的实验MIME类型.
text/x-json:application/json正式注册之前JSON的实验MIME类型.
总而言之,每当您对内容类型有任何疑问时,都应该检查此链接
raj*_*aja 147
在JSP中,您可以在page指令中使用它:
<%@ page language="java" contentType="application/json; charset=UTF-8"
pageEncoding="UTF-8"%>
Run Code Online (Sandbox Code Playgroud)
JSON 的正确MIME媒体类型是application/json.JSP将使用它向客户端发送响应.
Suk*_*ane 113
" application/json"是正确的JSON内容类型.
def ajaxFindSystems = {
def result = Systems.list()
render(contentType:'application/json') {
results {
result.each{sys->
system(id:sys.id, name:sys.name)
}
}
resultset (rows:result.size())
}
}
Run Code Online (Sandbox Code Playgroud)
小智 107
使用此媒体类型的应用程序:JSON已用于在使用所有这些编程语言编写的应用程序之间交换数据:ActionScript,C,C#,Clojure,ColdFusion,Common Lisp,E,Erlang,Go,Java,JavaScript,Lua,Objective CAML,Perl,PHP,Python,Rebol,Ruby,Scala和Scheme.
您会注意到IANA.org 没有列出任何其他媒体类型,事实上甚至application/javascript已经过时了.所以这application/json是唯一可能的正确答案.
浏览器支持是另一回事.
支持最广泛的非标准媒体类型是text/json或text/javascript.但一些大牌甚至使用text/plain.
更奇怪的是Flickr发送的Content-Type标头,它将JSON返回为text/xml.谷歌使用text/javascript它的一些ajax apis.
例子:
curl -I "https://ajax.googleapis.com/ajax/services/search/video?v=1.0&q=jsonexample"
Run Code Online (Sandbox Code Playgroud)
输出: Content-Type: text/javascript
curl -I "https://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=f82254c1491d894f1204d8408f645a93"
Run Code Online (Sandbox Code Playgroud)
输出: Content-Type: text/xml
Lom*_*baX 88
正确的MIME类型是 application/json
但
我经历过浏览器类型或框架用户所需的许多情况:
text/html
application/javascript
Run Code Online (Sandbox Code Playgroud)
小智 74
我用下面的
contentType: 'application/json',
data: JSON.stringify(SendData),
Run Code Online (Sandbox Code Playgroud)
Ale*_*ych 65
发布时,Content-Type标头应设置为" application/json ".侦听请求的服务器应包括" Accept = application/json ".在Spring MVC中你可以这样做:
@RequestMapping(value="location", method = RequestMethod.POST, headers = "Accept=application/json")
Run Code Online (Sandbox Code Playgroud)
将标头添加到响应中:
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
Run Code Online (Sandbox Code Playgroud)
Che*_*ana 57
application/jsonPHP中的工作非常适合存储数组或对象数据.
我使用此代码将数据放入Google Cloud Storage(GCS)中的JSON,该数据可以公开查看:
$context = stream_context_create([
'gs' => [
'acl'=>'public-read',
'Content-Type' => 'application/json',
]
]);
file_put_contents(
"gs://BUCKETNAME/FILENAME.json",
json_encode((object) $array),
false,
$context
);
Run Code Online (Sandbox Code Playgroud)
要直接获取数据:
$data = json_decode(file_get_contents("gs://BUCKETNAME/FILENAME.json"));
Run Code Online (Sandbox Code Playgroud)
Ank*_*ani 49
如果JSON带有填充,那么它将是application/jsonp.如果JSON没有填充,那么它将是application/json.
要处理这两种情况,最好使用:'application/javascript',而不用担心是填充还是填充.
小智 49
对于JSON,我正在使用:
Content-Type: application/json
Run Code Online (Sandbox Code Playgroud)
这在IETF的JSON数据交换格式7158提议,第1.2节:JSON的规范中有所描述.
jgo*_*mo3 42
在REST上下文中使用JSON时,扩展已接受的响应...
关于使用和何时表示REST资源和集合,存在强烈的争论.application/x-resource+jsonapplication/x-collection+json
如果你决定遵循jsonapi规范,你应该使用application/vnd.api+json,因为它已被记录.
尽管没有通用的标准,很明显,被转移的资源增加的语义证明了更明确的内容类型而不仅仅是application/json.
根据这种推理,其他上下文可以证明更具体的内容类型.
小智 41
PHP开发人员使用这个:
<?php
header("Content-type: application/json");
// Do something here...
?>
Run Code Online (Sandbox Code Playgroud)
Kri*_*hna 38
如果从JSON中的REST API获取数据,则必须使用content-type
For JSON data: Content-Type:application/json
For HTML data: Content-Type:text/html,
For XHTML data: Content-Type:application/xhtml+xml,
For XML data: Content-Type:text/xml, application/xml
Run Code Online (Sandbox Code Playgroud)
Ire*_*ghe 25
JSON(JavaScript Object Notation)和JSONP("带有填充的JSON")格式似乎非常相似,因此它们应该使用哪种MIME类型可能会非常混乱.即使格式看起来非常相似,但它们之间存在一些细微差别.
因此,无论什么时候怀疑,我都有非常简单的方法(在大多数情况下都能很好地找到),即去检查相应的RFC文档.
JSON RFC 4627(JavaScript对象表示法的应用程序/ json媒体类型(JSON))是JSON格式的规范.它在第6节中说,JSON文本的MIME媒体类型是
application/json.
Run Code Online (Sandbox Code Playgroud)
JSONP
JSONP("带填充的JSON")在浏览器中的处理方式与JSON不同.JSONP被视为常规JavaScript脚本,因此它应该使用application/javascript,JavaScript的当前官方MIME类型.但是,在许多情况下,text/javascriptMIME类型也可以正常工作.
请注意,RFC 4329(脚本媒体类型)文档text/javascript已将其标记为已过时,建议使用类型.但是,由于遗留原因,它仍然被广泛使用,并且它具有跨浏览器支持(对于MIME类型并不总是这种情况,特别是对于旧版浏览器).application/javascripttext/javascriptapplication/javascript
Kas*_*ngi 25
Content-Type: application/json- json
Content-Type: application/javascript- json-P
Content-Type: application/x-javascript- javascript
Content-Type: text/javascript- javascript但过时的旧IE版本曾用作html属性.
Content-Type: text/x-javascript- JavaScript媒体类型但是过时
Content-Type: text/x-json- 在应用程序/ json正式注册之前的json.
sam*_*oon 21
最常见的MIME 类型是 application/json。以下是所有 JSON 内容类型的列表:
\nContent-Type: application/json- JSONContent-Type: text/x-json- application/json正式注册之前的 JSON。Content-Type: application/javascript- JSON-PContent-Type: application/x-javascript- JavaScript过时的类型:
\nContent-Type: text/javascript- JavaScript但已过时。较旧的 Internet\xc2\xa0Explorer 版本过去将其用于 HTML 属性。Content-Type: text/x-javascript- JavaScript 媒体类型,但已过时附加参考资料:
\nRFC4627 - application/jsonJavaScript 对象表示法 (JSON) 的媒体类型
你的问题的一部分与我相关,因为我刚刚遇到它。
第三方提供商正在提供可供多个客户端使用的 REST 服务。它是一个直接的 REST,使用查询参数调用,返回格式良好的 JSON。我已经用 PHP 和 Java 对其进行了测试,它按预期工作。
我的客户使用 Oracle Service Bus 作为其应用程序服务器和 Internet 之间的网关。当我制作 OSB 服务时,它因Invalid message format错误而崩溃。原来content-type被退回的是text/html。OSB 按照此标头处理响应;在文本、XML 和 JSON 之间进行转换。在本例中,响应是 JSON,但标头没有这么说。我联系了提供商,得到了答复:“我们不会更改它,因为它不会影响其他任何人”。
标题Content-Type指定内容应该是什么,而不是实际内容内容。也就是说,在您的消费程序中,您可以检查或忽略它并以任何方式处理内容。另一个例子,您可以返回 GIF 数据,但将内容类型指定为 JSON,然后继续忽略标头并读取图像数据。这不会损害您的程序,但可能会损害其他程序。
这个故事的寓意是:玩得开心。
小智 7
要指定有趣的JSON结果,请在请求标头中添加"application/json",如下所示:
"Accept:application/json"是一种理想的响应格式.
"内容类型:应用程序/ JSON"指定您的要求的内容格式,但有时你同时指定application/json和application/xml,但这些质量可能会有所不同.哪个服务器将发回不同的响应格式,请看示例:
Accept:application/json;q=0.4,application/xml;q=8
Run Code Online (Sandbox Code Playgroud)
这将返回XML,因为XML具有更高的质量.
这取决于观点。
如果您是发送请求的客户端,那么这application/json是正确的选择。
但如果你是接收请求的服务器,你必须做好准备,客户端也可能发送编码。所以application/json和application/json; charset=utf-8都是有效的。
两种情况下的媒体类型相同。但内容类型不同。
适当的当前标准是application/json.虽然默认编码是UTF-8,但值得一提的是它也可以是UTF-16或utf-32.当JSON以UTF-16或UTF-32编写时,必须使用二进制内容传输编码.
这里有关于json的更多信息:https://tools.ietf.org/html/rfc4627
有关二进制传输编码的更多信息,请访问:https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html
作为一些研究,
最常见的 MIME 类型是
应用程序/json
让我们看一个例子来区分 json 和 javascript。
当不知道将如何使用这些数据时使用它。当仅以 JSON 格式从服务器提取信息时,它可能是通过链接或从任何文件中提取的,在这种情况下,将使用它。
例如-
<?php
header('Content-type:application/json');
$directory =[
['Id'=> 1, 'Name' => 'this' ],
['Id'=> 2, 'Name' => 'is'],
['Id'=> 3, 'Name' => 'stackoverflow'],
];
// Showing the json data
echo json_encode($directory);
?>
Run Code Online (Sandbox Code Playgroud)
输出是,
[{"Id":1, "Name":"this"}, {"Id":2, "Name":"is"}, {"Id":3, "Name":"stackoverflow"}]
Run Code Online (Sandbox Code Playgroud)
它在预定义数据的使用时使用。它由客户端 ajax 应用程序调用的应用程序使用。当数据为 JSON-P 或 JSONP 类型时使用。
例如
<?php
header('Content-type:application/javascript');
$dir =[
['Id'=> 1, 'Name' => 'this' ],
['Id'=> 2, 'Name' => 'is'],
['Id'=> 3, 'Name' => 'stackoverflow'],
];
echo "Function_call(".json_encode($dir).");";
?>
Run Code Online (Sandbox Code Playgroud)
输出是,
Function_call([{"Id":1, "Name":"this"}, {"Id":2, "Name":"is"}, {"Id":3, "Name":"stackoverflow"}])
Run Code Online (Sandbox Code Playgroud)
对于其他 MIME 类型,请在此处查看完整详细信息,
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
| 归档时间: |
|
| 查看次数: |
2648000 次 |
| 最近记录: |