¬引发的问题
在本座某个项目的一个API中,返回的JSON里的某个字符串属性中会包含这样一砣东西:“ ¬ ify_url=abc.do”。如果用浏览器来访问这个API,则可能会看到返回的字符串中这个部分是这样的:“ ¬ ify_url=abc.do ”。其中的 ¬ 部分被解释成了 ¬ 。 在火狐和SBrowser(一个以Webkit为内核的浏览器) 中都是这样显示的。 如果 妳打开浏览器的调试窗口, 看服务器回复的原始数据,妳会发现这里实际上确实是 ¬ 。
为什么 浏览器会做这样的解释,这是因为本座这个项目中 的这个API 在返回JSON结果时没有设置 HTTP协议头的Content-Type属性,于是网页开发框架 将Content-Type 设置 成 了默认的”text/html”, 这导致浏览器将返回的内容当成 “text/html”来解释了。于是 以&开头的“转义”序列被反转义了,尽管这里的 ¬ 实际上缺少末尾的分号(;) ,但还是被当成一个转义序列进行反转义了。
以 下是这种情况下的HTTP协议头信息:
抄下来看,就是:
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html
Date:Thu, 04 Sep 2014 05:36:09 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:nginx/1.4.4
Transfer-Encoding:chunked
Via:10.67.15.66
X-Powered-By:PHP/5.3.27
本座就是看到浏览器中显示的内容与服务器回复的内容对不上,狠是困惑了一段时间。为了避免日后再在这个问题上困惑,需要解决这个问题。
解决办法 就是 让浏览器将这个回复内容当成 JSON来解释,实际 上就是相当于以纯文本形式来显示了 (SBrowser日后可能会以更友好的方式来显示JSON内容 ,敬请期待 ) 。具体 做法就是设置HTTP协议 头的 Content-Type属性,设置成 :
application/json; charset=utf-8
这样,浏览器就会原样显示由服务器返回的内容了。
以 下是做了这种处理之后的HTTP协议头信息:
抄下来 看,就是:
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:keep-alive
Content-Type:application/json; charset=utf-8
Date:Thu, 04 Sep 2014 05:00:29 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:nginx/1.4.4
Transfer-Encoding:chunked
Via:10.67.15.24
X-Powered-By:PHP/5.3.27
好像 Internet Explorer遇到这种Content-Type 时会直接提示下载, 这个目前不在考虑范围内,不认为是问题 。
鲍蕾
Your opinionsHxLauncher: Launch Android applications by voice commands