问题: Content-Encoding设置为utf-8和application/json的区别
描述:

http


StringEntity s = new StringEntity(body, "utf-8");
s.setContentType(application/json);
s.setContentEncoding("utf-8");   //方法1
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));      //方法2

上面将Content-Encoding设置为utf-8和application/json有什么区别?
我遇到一个很奇怪的问题就是,我一个项目按方法2设置的,Post请求可以正常发送和接收response。
但是另一个项目里 按照方法2设置就会报415错误...改成方法1就可行。不知道为什么。
头部设置是一样的,

HttpPost httppost = new HttpPost(uri);
httppost.setHeader("Content-Type", "application/json"); 
if (null != acceptType) {
        httppost.addHeader(HttpConstant.ACCEPT.getName(), acceptType);
}


解决方案1:

不是同一个东西, mime-type,encoding是content-type两个组成部分
前者代表请求的资源是什么类型的资源:文本,还是图片,还是应用程序等等
application/json代表请求的资源是:应用程序类型下的,json类型(某类型/子类型)
类似的,也会遇到 img/bmp , text/plain
服务器和浏览器会根据不同的mime类型来解析请求,并做出相应回应:比如服务器收到.php的请求,如果设置正确,一般对应是 application类型,服务器就会用相应的用处理程序映射去执行这个php,比如客户端收到application/json的响应,就知道返回来的是一个json字符串,比如收到img/jpg,就知道是个jpg图片。有的时候打开一个网页,会发现它显示的是网页源代码,而不是一个正常的页面,这种情况多半就是服务器上mime的问题,可能是设置错了,也可能是没有添加相应的处理程序映射。
encoding代表编码,客户端和服务器通信的时候,所有数据都会变成二进制来传输,碰到英文字符数字这些还好,如果是汉字,不同编码下它的二进制内容是完全不一样的,所以必须两边统一编码才可以正常通信。碰到100次网页乱码,其中至少有95次是因为编码不一致造成的,所以试着切换一下不同的编码,多半会发现乱码变正常

上一篇使用ngrok进行内网穿透,client端能够成功连接server端,请问输入网址后为什么不能运行?
下一篇ssh 远程登录云主机 出现permission denied
明星图片
相关文章
《 Content-Encoding设置为utf-8和application/json的区别》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)