当jsonp无法解决跨域问题时,后台(C#)模拟提交http请求
1.尝试用jsonp解决跨域的问题
今天用ajax去请求了某网站的接口,很现实,需要解决跨域问题!
我知道jsonp可以解决跨域问题,但是偏偏这个接口不行,请求是成功的,但返回结果时不进success!
因为进了error了,alert了一下,结果是readyState:4,status:200,statusText:"success"
原因:jsonp返回的结果的格式应是:success_jsonpCallback({"id":"123a","age":23,"name":"amy"});
而接口返回的就是一个json,但某网站的接口我是没办法拼装服务器返回结果的。
2.ajax调用服务器方法,后台模拟http请求
上面的问题,我表示无奈,我想到了一个办法,曲线救国,在服务器端用http模拟请求这个接口,就没有跨域问题。
但是产生了一个新的问题,返回的结果是乱码,不管怎么测试,更改编码格式,结果还是乱码。我用在线http模拟请求和工具去模拟,都是正常的。这让我意识到,还是编码那里出问题了。
后来找资料,终于在博客园找到了答案。
原因是:服务器在响应的时候用了压缩算法,而我在读取的时候还没解压,所以不管用什么编码,最后还是乱码的,解压后,终于得到了正确的json数据。以下是解压的代码
Stream myResponseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(),System.IO.Compression.CompressionMode.Decompress);press);
3.什么是跨域?
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制
浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。
?
作者:chenkj
简介:暂无
原文链接: