js 跨域该如何解决 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
misaka14
V2EX    Javascript

js 跨域该如何解决

  •  2
     
  •   misaka14 2015-06-11 11:34:48 +08:00 4328 次点击
    这是一个创建于 3775 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    你要post的,那就是方案2了
    misaka14
        5
    misaka14  
    OP
       2015-06-11 11:41:44 +08:00
    是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
    misaka14
        6
    misaka14  
    OP
       2015-06-11 11:41:53 +08:00
    @rekey 是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
    rekey
        7
    rekey  
       2015-06-11 11:46:18 +08:00
    看情况定,如果IE9以上啥的,cors 吧。很好的。
    zomco
        8
    zomco  
       2015-06-11 11:46:30 +08:00 via iPhone
    有一种东西,叫cors
    misaka14
        9
    misaka14  
    OP
       2015-06-11 11:52:22 +08:00
    @rekey 我测试过一个,貌似有时是不管用的。cors是不是只能用 外网IP 的接口吧。如果我自己本地测试,是内网的IP,貌似测试不了的。
    只能用IE9以上?那完了,我们公司最低IE8
    tajpure
        10
    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
        11
    yeyeye  
       2015-06-12 08:31:48 +08:00
    我说说理论上可行的方案,啥浏览器都兼容。只要支持iframe和script

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

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

    完 简单有效
    misaka14
        12
    misaka14  
    OP
       2015-06-12 09:04:49 +08:00
    @tajpure 兄弟感谢,这个方法我火狐、谷歌和IE高版本都测试成功了
    misaka14
        13
    misaka14  
    OP
       2015-06-12 09:05:02 +08:00
    @kingwrcy 方案2测试成功,感谢
    mingyun
        14
    mingyun  
       2015-07-12 20:44:23 +08:00
    cors只能在高级浏览器了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5469 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 08:37 PVG 16:37 LAX 01:37 JFK 04:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86