js 跨域该如何解决

2015-06-11 11:34:48 +08:00
 misaka14

之前用node.js和websocket 做了一个聊天服务器,客户端是运行在 jsp 中的。

重点来了:产品经理要求我聊天功能加入发送图片的功能,这时候问题来了,$.getJSON只是get请求,上传图片get请求满足不了。

请各位支个招,第一次发贴,谢谢大家。

3914 次点击
所在节点    JavaScript
14 条回复
rekey
2015-06-11 11:37:57 +08:00
呃,你确定一下是跨域问题还是 get or post 问题。
zkd8907
2015-06-11 11:37:58 +08:00
上传图片构造iframe表单,后台返回的结果加callback参数进行回调 =。=
wy315700
2015-06-11 11:38:35 +08:00
你应该弄一个跨域认证
kingwrcy
2015-06-11 11:41:02 +08:00
1.jsonp
2.Access-Control-Allow-Origin:*

你要post的,那就是方案2了
misaka14
2015-06-11 11:41:44 +08:00
是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
misaka14
2015-06-11 11:41:53 +08:00
@rekey 是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
rekey
2015-06-11 11:46:18 +08:00
看情况定,如果IE9以上啥的,cors 吧。很好的。
zomco
2015-06-11 11:46:30 +08:00
有一种东西,叫cors
misaka14
2015-06-11 11:52:22 +08:00
@rekey 我测试过一个,貌似有时是不管用的。cors是不是只能用 外网IP 的接口吧。如果我自己本地测试,是内网的IP,貌似测试不了的。
只能用IE9以上?那完了,我们公司最低IE8
tajpure
2015-06-11 11:57:10 +08:00
最近刚解决ajax图片传输跨域的问题,http://www.slideshare.net/SlexAxton/breaking-the-cross-domain-barrier,这里面讲了几种跨域的解决方案。我采用的是CORS,在服务端的response里加入如下包头:
'''
response.setHeader("Access-Control-Allow-Origin", "你的域名(在测试的时候你可以使用 * )");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
'''
yeyeye
2015-06-12 08:31:48 +08:00
我说说理论上可行的方案,啥浏览器都兼容。只要支持iframe和script

首先构建一个表单,上传文件的表单,加入一个字段为随机字符,把这个表单post到iframe里,服务器收到文件,在数据库中记录随机字符和图片的地址。

然后每几秒向图片服务器用jsonp的方式带着那个随机字符查看服务器里是否有这个相关的图片 有的话得到http地址 如果iframe的onload属性可以的话 也可以onload之后再请求

完 简单有效
misaka14
2015-06-12 09:04:49 +08:00
@tajpure 兄弟感谢,这个方法我火狐、谷歌和IE高版本都测试成功了
misaka14
2015-06-12 09:05:02 +08:00
@kingwrcy 方案2测试成功,感谢
mingyun
2015-07-12 20:44:23 +08:00
cors只能在高级浏览器了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/197720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX