`
zhang_yingjie
  • 浏览: 111965 次
  • 性别: 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类型汇总

    如何将图片转换成二进制存储

    存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[]. 1.参数是图片路径:返回Byte[]类型: public byte[] GetPictureData(string imagepath) { /**/////...

    用asp实现网页调用doc附Response.ContentType 详细列表

    微软有篇文章:... response.buffer=true response.contenttype=”application/x-msexcel” dim vntstream set oMyObject=server.createObject(“MyObject.BinRead”)’这个组件后面介绍 

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

    OutputStream toClient=new BufferedOuntputStream( response.getOutputStream() );//获取二进制输出流 //读取文件数据 InputStream fis=new BufferedInputStream(new FileInputStream(filePath)); byte[] buffer...

    mql连接时出现的中文问题

    2.数据库建表的过程中设置字符集,在CREATE语句最后的 CHARSET=字符集 语句中设置; 3.在驱动url中的选项中设置字符集,jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=字符集; 4.在web显示页...

    JSP的response对象的实例详解

    response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的...

    MIME类型大全(response.setContentType中MIME参数类型总结)

    MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式

    DotNetBarcode.dll 生成二维码,亲手试过支持中文

    网上有好多都说支持中文,实际都不行 这个是我试过可以支持中文的 代码例子从网上找了个... string code = Request.... Response.ContentType = "image/gif"; img.Save(Response.OutputStream, ImageFormat.Gif);

    Jquery 返回json数据在IE浏览器中提示下载的问题

    当提交完数据后返回的本来是json数据的,在火弧里测试正常,但是IE里老是提示保存,在网上搜索了下,大部分是说将ContentType设置为”text/xml“本人测试了下,返回值为undefined, 原返回值设定:context.Response....

    asp.net中导出Execl的方法

    HttpContext.Current.Response.ContentType ="application/ms-excel"; ctl.Page.EnableViewState =false; System.IO.StringWriter tw = new System.IO.StringWriter() ; System.Web.UI.HtmlTextWriter hw = new ...

    ThoughtWorks.QRCode二维码生成库已修改 支持中文

    今天刚刚编译的二维码类库,绝对支持中文! 使用方法(先引用dll) 示例: QRCodeEncoder qrCodeEncoder = new ...Response.ContentType = "image/Gif";//png , jpg都可 Response.BinaryWrite(MStream.ToArray());

    异步ajax验证用户名(防止重名)

    context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); string username= context.Request.QueryString.Get("username"); if (username.ToString() == null || username....

    java 的乱码教程

    在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="UTF-8"、 contentType="text/html;charset=UTF-8"、request.setCharacterEncoding("UTF- 8")和response.setCharacterEncoding("UTF-8"),其中前两个...

    QRCode二维码编码支持中文生成二维码的源码Asp.Net(C#)

    QRCode二维码维码支持中文Asp.Net(C#),是VS2010的项目,VS2008、VS2005也可以用,需要在你的项目里引用Thought... Response.ContentType = "image/Gif"; Response.BinaryWrite(MStream.ToArray()); 本项目100%可用。

    ASP。NET技术文档收集

    Response.ContentType 类型大全 IIS 6.0 不能处理未知的 MIME 类型 ASP.NET 2.0中将 GridView 导出到 Excel 文件中 ASP.NET2.0中Gridview中数据操作技巧 GridView经典删除操作,两种方法 揭秘ASP.NET 2.0的Eval...

    ResponseContentType_详细列表

    详细的列出了Response.ContentType的各种取值含义

    ASP.NET笔记之 Request 、Response 与Server的使用

    1、Request   下面做一个实例,通过Request的一些方法来判断浏览图片... public class image_Test : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = “ima

Global site tag (gtag.js) - Google Analytics