`
zhang_yingjie
  • 浏览: 114587 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

response中如何设置contentType

阅读更多
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处理应该没什么问题)

分享到:
评论

相关推荐

    http请求contentType和response.md

    http中的contentType和responseType: contentType的主要类型和responseType的类型

    asp.net下Response.ContentType类型汇总

    ASP.NET 中 Response.ContentType 类型汇总 ASP.NET 中的 Response.ContentType 属性用于确定输出的文件类型,告诉浏览器如何处理服务器返回的数据。不同的文件类型对应不同的 ContentType,今天我们来总结 ASP...

    关于asp.net的ContentType输出格式

    在ASP.NET中,可以通过`Response.ContentType`属性来设置HTTP响应的MIME类型。MIME类型是一种标准,用于标识数据的格式。例如: ```csharp &lt;% Response.ContentType = "text/html"; %&gt; ``` 这段代码将告诉浏览器...

    ContentType大全

    在ASP.NET中,可以通过`Response.ContentType`属性来设置页面的`ContentType`,就像示例代码所示: ```asp &lt;% Response.ContentType = "text/html" %&gt; ``` 在PHP中,可以使用`header()`函数: ```php header('...

    C#利用Response流将数据库数据导出成Excel

    在上面的代码中,我们设置了Response.ContentType为application/ms-excel,以便将数据作为Excel文件发送到客户端。 Excel文件 Excel文件是一种常用的电子表格文件格式,广泛应用于数据分析和处理。Excel文件可以...

    Java Web应用开发 22 课堂案例-使用response设置响应头属性.docx

    在这个例子中,我们看到在`responsedemo1.jsp`文件的第1行,设置了`contentType="text/html;charset=GB2312"`,这表示返回的内容类型是HTML,使用的字符集是GBK,确保中文字符能够正确显示。 在JSP文件的第13行,...

    ContentType类型大全彩信[参考].pdf

    在ASP代码中,你可以通过以下方式设置`ContentType`: ```vb Response.ContentType = "text/plain" ``` 这里,`Response`对象是ASP内置的对象,用于向客户端发送HTTP响应。`ContentType`属性就是在这个对象上设置...

    asp中的request response语句语法解析

    例如,`Response.Write`方法用于将字符串写入HTTP响应体,`Response.ContentType`属性用于设置响应的MIME类型,`Response.Redirect`方法用于重定向用户到另一个URL。 在实际应用中,常常会结合Request和Response...

    2022年实习十七使用ASP对象Request对象和Response对象.ppt

    在身份验证过程中,我们使用了Response对象的_WRITE_方法来输出欢迎信息,并使用Response对象的ContentType属性来指定响应的内容类型。在本篇文章中,我们还使用了Response对象的Expires属性来设置页面的缓存时间。 ...

    ASp教程第四章-Response和Request

    例如,`Response.Write`方法可以直接在页面上输出文本,`Response.ContentType`可以设置响应的MIME类型,`Response.StatusCode`用于指定HTTP状态码。`Response.Buffer`属性控制是否先缓存整个页面再发送,而`...

    文件下载及web文件的contentType类型大全

    #### 二、常见文件类型的ContentType设置 `Content-Type`字段用于指定MIME类型,它定义了数据格式,以便浏览器或其他接收端知道如何正确解析接收到的数据。下面是部分常见文件类型的MIME类型设置: 1. **图像文件*...

    Aspdotnet2_0中自定义过滤器对Response内容进行处理

    response.ContentType = "application/json"; // 设置内容类型 // 如果需要修改响应正文,可以读取原始内容,处理后再写回 string originalBody = response.Filter.ReadToEnd(); string modifiedBody = ...

    ASP第4章 Request和Response对象

    例如,可以使用`Response.Write`打印字符串到页面,`Response.Redirect`将用户重定向到另一个URL,或者设置HTTP头信息,如`Response.ContentType`定义响应内容的类型。 在上面的1.asp示例中,它接收表单提交的...

    jsp response.sendRedirect不跳转的原因分析及解决.docx

    在Java Server Pages (JSP) 技术中,`response.sendRedirect()` 是一种常用的实现服务器端重定向的方法。然而,在实际项目开发过程中,有时会遇到虽然调用了 `response.sendRedirect()` 方法,但页面并没有按预期...

    jsp Response对象页面重定向、时间的动态显示.docx

    在Java Server Pages (JSP) 技术中,`Response` 对象是处理客户端请求并返回响应的核心组件之一。它允许开发者向客户端(通常是Web浏览器)发送响应数据。`Response` 对象主要通过`javax.servlet....

    金鹰asp超速入门视频教程-063.使用Response...总结.rar

    2. **设置HTTP头信息**:`Response.ContentType`用于设置发送到客户端的HTTP响应头中的Content-Type字段,指定数据类型。例如,如果我们要发送JSON数据: ```vbscript Response.ContentType = "application/json" ...

    WEB开发 之 ASP Response 对象.docx

    6. **Expires**: `Response.Expires`设置页面在浏览器缓存中的有效时间(以分钟计),过期后浏览器会重新请求页面。 7. **ExpiresAbsolute**: `Response.ExpiresAbsolute`设置一个具体的日期和时间,超过这个时间,...

Global site tag (gtag.js) - Google Analytics