response中如何设置contentType

response中如何设置contentTypeajax开发中,常遇到下面的几种情况:1服务端需要返回一段普通文本给客户端2服务端需要返回一段HTML代码给客户端3服务端需要返回一段XML代码给客户端4服务端需要返回一段javascript代码给客户端5服务端需要返回一段json串给客户端================================对于每一种返回类型规范的做法是要在服务端…

大家好,又见面了,我是你们的朋友全栈君。ajax开发中, 常遇到下面的几种情况:

1 服务端需要返回一段普通文本给客户端

2 服务端需要返回一段HTML代码给客户端

3 服务端需要返回一段XML代码给客户端

4 服务端需要返回一段javascript代码给客户端

5 服务端需要返回一段json串给客户端

================================

对于每一种返回类型 规范的做法是要在服务端指定 response的contentType 的.

(当然 不指定绝大多数情况下也没什么问题 尤其是返回”非xml”的时候)

Java代码 复制代码

1. 普通文本 : text/plain

2. HTML代码 : text/html

3. XML代码 : text/xml

以上三个可以说是毫无争议的, 也没什么值得讨论的,

但是另外两种情况 就要注意一下了.

javascript 的 contentType 按最标准的写法 应该是 application/javascript.

而常用的 text/javascript 已经被 rfc定义为废弃的.

(参见 rfc4329)

但是 在这里暂时不建议使用 application/javascript .

大家还是继续使用 text/javascript 为好.

因为很多老旧浏览器并不支持 application/javascript .

而所有浏览器都支持 text/javascript.

在标准和广泛的兼容性之间 还是暂且选择后者吧.

json 的 contentType 常见写法有 : text/json & text/javascript .

但是 这个 text/json 其实是根本不存在的,

而 text/javascript 在有些时候客户端处理起来会有歧义.

对于json的contentType , rfc里定义的标准写法是 :application/json.

(参见 rfc4627)

在这里毫无疑问 我们应该选择标准写法的 application/json.

======================

也许有人会问, 设置这些有什么用呢?

以前一些程序没有设置这些东西 运行的也很好啊.

首先必须承认的一点是, 这些信息 在目前绝大多数情况下 确实不设置也可以.

但是这种做法是不规范不标准的.

未来对于复杂的ajax应用 ,不规范的行为是会带来很大的隐患.

举个例子.

对于同样的内容 可以有下面的3种形式

html形式

Html代码 复制代码

1. <script type=”text/javascript”>

2. var user = {

3. name : “Tom”,

4. age : 12

5. };

6. </script>

对于 html 形式,客户端得到数据后,往往是对其做dom操作.

javascript形式

Javascript代码 复制代码

1. var user = {

2. name : “Tom”,

3. age : 12

4. ;

对于 javascript形式,往往是对其做eval操作:

eval(responseText);

json形式

1. {

2. name : “Tom”,

3. age : 12

对于 json形式,往往是对其做 eval操作之后 赋值给某变量:

var clientVar= eval(responseText);

客户端拿到不同形式的代码 所要做的工作是不一样的.

如果没有设置 contentType 客户端很难判断 返回的数据是什么, 该怎么处理.

==========================

另外,对于返回信息,如果不设置contentType,web服务器往往会给返回的内容添加一个”默认的contentType”,

但是这个”默认”会根据服务器的不同 以及web应用配置的不同而不同.

而浏览器对于没有足够头信息的返回值 也会做出”某些默认行为(打开 或下载 或报错”.

总之 不同浏览器 不同的浏览器设置 结果可能是不一样的 无法把控.

也就是说 当我们不指定正确的contentType时, 我们所能做的只能是祈祷 在所有环境中, 程序的表现是一致的,

但是与其”祈祷”不如我们亲自把这些信息加上来得可靠.

所以 正确设置返回信息的 contentType 还是很有必要的.

======================

总结 & 建议 :

1.

服务端 向 客户端 发送 JSON数据 时:

Content-Type = ‘application/json;charset=UTF-8’

2.

服务端 向 客户端 发送 JS 代码 时:

Content-Type = ‘text/javascript;charset=UTF-8’

3

服务端 判断 客户端 提交的是否是 JSON数据 时 :

Content-Type = ‘application/json;charset=UTF-8’

Content-Type = ‘text/json;charset=UTF-8’

Content-Type = ‘text/javascript;charset=UTF-8’

Content-Type = ‘application/javascript;charset=UTF-8’

只要 Content-Type 满足上面4个条件中的 任意一个时,就可以认为提交的数据是 JSON数据.

之所以要提供4种选择 是因为 为了提供更好的兼容性.

(我想没有人会提交真正的js代码到服务端 然后用服务端js引擎去解析执行吧?

即使真有这种需求 也可以在js代码外包一层 json格式的 wrapper ,

所以姑且都当作json处理应该没什么问题)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161594.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 360 c语言 笔试,奇虎360校招的笔试真题「建议收藏」

    360 c语言 笔试,奇虎360校招的笔试真题「建议收藏」选择题有45个?好像是,三道简答题,简答题:1、设计一个课程表(包括目标人群、核心功能、特色设计);2、说ATM的缺点,改进方法;3、如何让李开复等互联网大牌关注你的微薄?选择题记得不是很清楚,大概是这样的:1、数字推理:1,4,5,6,7,9,11,()2、安卓系统是什么语言开发的?c,c++,java,**3、HTML5不包含的技术?选项有JS、java、*、*4、12个鸡蛋,有一个重量与其他…

  • c3p0连接池的配置方式

    c3p0连接池的配置方式c3p0的配置方式分为三种,分别是1.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文件3.类路径下提供一个c3p0-config.xml文件1.setters一个个地设置各个配置项这种方式最繁琐,形式一般是这样:01Propertiesprops= new Properties();

  • 宿主机ping不通docker容器_kali虚拟机ping不通

    宿主机ping不通docker容器_kali虚拟机ping不通问题描述:  Docker网络模式分为四种,一般我们不设置时默认为bridge单桥模式,容器使用独立的networkNamespace,并连接到docker0虚拟网卡中。通过docker0网桥以及Iptablesnat表配置与宿主机通信。  此时在堡垒机上进行测试,利用busybox进行测试:#拉取镜像dockerpullbusybox#运行容器dockerrun-itd–namebusy_bridgebusybox  指令dockernetworkinspect

  • python下载及安装教程[通俗易懂]

    python下载及安装教程[通俗易懂]   Python目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,一般默认装的是Python2版本,Windows系统上没有Pyhton环境,需要我们手动安装一下,现在一般都是python,目前最新是python3.9.7,下面就让跟着我进行安装吧!下载python安装包进入python官网下载(官网https://www.python.org/)。鼠标指向Downloads(不用点击)会弹出下拉框,直接点击windows下的Python3.9.7可直接下载

  • wda7332re 评测_TP-LINK(普联)AC2100无线扩展器TL-WDA7332RE说明书下载地址!tplink TL-WDA7332RE中继器PDF说明书!-家用路由网…

    wda7332re 评测_TP-LINK(普联)AC2100无线扩展器TL-WDA7332RE说明书下载地址!tplink TL-WDA7332RE中继器PDF说明书!-家用路由网…问:TP-LINK/普联双频AC2100M无线扩展器TL-WDA7332REV2的使用说明书下载地址是多少?请问从哪里可以下载到TP-LINK无线WiFi中继器TL-WDA7332RE的电子版PDF说明书?答:TP-LINKTL-WDA7332RE无线扩展器是一款双频2100M的无线扩展器,从2100M上就可以看出重点在于5G的传输速率比较大。正如TP-LINK官网介绍的一样:采用11AC双频…

  • vs2010 sp1下载_vs2005下载

    vs2010 sp1下载_vs2005下载vs2005sp1下载地址、安装方法–更新非常慢2007年03月14日下午09:17(转)VS2005SP1发布,解决只能创建WebSite,无法创建WebApplication项目的问题

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号