V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pinews
V2EX  ›  程序员

别人家的 api 不允许跨域,是不是 xmlhttprequest 没用了,要在 header 里加 Authorization,可是不是普通的 form 表单也不能用了,是不是只能用服务器脚本和 curl 才行了啊?(网页端)

  •  
  •   pinews · 2019-09-29 08:37:57 +08:00 · 4292 次点击
    这是一个创建于 1642 天前的主题,其中的信息可能已经有所发展或是发生改变。
    27 条回复    2019-09-29 18:09:30 +08:00
    IsaacYoung
        1
    IsaacYoung  
       2019-09-29 08:40:09 +08:00
    用自己的服务器代理一下
    Liang
        2
    Liang  
       2019-09-29 08:51:23 +08:00
    proxy server
    dbj1991
        3
    dbj1991  
       2019-09-29 09:20:35 +08:00
    jsonp
    wunonglin
        4
    wunonglin  
       2019-09-29 09:30:14 +08:00
    nginx 饭袋
    arrow8899
        5
    arrow8899  
       2019-09-29 09:34:06 +08:00
    前端没法搞的,加个 nginx 代理一下
    secretman
        6
    secretman  
       2019-09-29 09:55:56 +08:00
    找别人家去啊
    fumichael
        7
    fumichael  
       2019-09-29 10:05:00 +08:00   ❤️ 3
    跨域是浏览器的同源策略
    Authorization 是接口鉴权
    那个回复 jsonp 的我就不想说他了
    shintendo
        8
    shintendo  
       2019-09-29 10:37:58 +08:00
    @dbj1991 别人家的 api 你 jsonp ?
    darknoll
        9
    darknoll  
       2019-09-29 12:09:44 +08:00
    @dbj1991 你怎么不说 CORS ?
    tinytin
        10
    tinytin  
       2019-09-29 12:15:13 +08:00 via iPhone
    不允许跨域,你前端加啥都没用
    catch
        11
    catch  
       2019-09-29 12:19:24 +08:00 via iPhone
    你把大火逗乐了
    kyoukai
        12
    kyoukai  
       2019-09-29 14:12:51 +08:00
    iframe 不算跨域,试试?主页面操作子页面的 iframe。
    pinews
        13
    pinews  
    OP
       2019-09-29 14:46:52 +08:00
    @IsaacYoung
    @Liang
    @arrow8899
    @wunonglin 不太懂,我的意思是不用服务器,只用浏览器就可以实现的,当成不依赖服务端的独立客户端一样。。


    @tinytin
    @kyoukai 不加 header 的话 form 表单就可以了,上传的 token 是放在字段里的,但是其他操作验证是 header 里的。
    shintendo
        14
    shintendo  
       2019-09-29 14:52:12 +08:00
    @pinews 意思是你没有后端,你的网页直接调别人 api ?那你这个网页谁来 serve 呢?
    Trim21
        15
    Trim21  
       2019-09-29 14:53:38 +08:00 via Android
    littlespider89
        16
    littlespider89  
       2019-09-29 14:58:44 +08:00
    @pinews 不允许跨域浏览器是根本不能用 xhr 访问其他域的,不管怎么操作都不行,这是最基本的安全保证

    form 表单提交和 xhr 是不一样的,form 表单提交你已经跳转到别人的页面上了,你还是没办法获取并操作数据
    arrow8899
        17
    arrow8899  
       2019-09-29 15:00:01 +08:00
    @pinews 如果浏览器能直接跨域,那么浏览器的同源策略有什么意义呢
    speedofstephen
        18
    speedofstephen  
       2019-09-29 15:03:25 +08:00
    隐约记得 chrome 关闭一个安全选项,就可以进行跨域访问了。
    npe
        19
    npe  
       2019-09-29 15:06:51 +08:00 via iPhone
    是的,浏览器不允许 XHR 跨域访问。
    wunonglin
        20
    wunonglin  
       2019-09-29 15:08:56 +08:00
    @pinews 没用,必须要后台或者 nginx 饭袋
    cyrbuzz
        21
    cyrbuzz  
       2019-09-29 15:10:41 +08:00
    巧了...
    刚写了一个前端的学习项目,调用的实验楼 API 也是不允许跨域的。
    解决方法也是常规的在自己写一个后端代理做转发。
    这里是前端地址( Vue + axios ):
    https://github.com/HuberTRoy/vue-shiyanlou

    这里是写的代理转发地址( Django + requests ):

    https://github.com/HuberTRoy/vue-shiyanlou-backend

    还总结了一下最后有写跨域部分:
    https://juejin.im/post/5d8ec6f0e51d4577ef53de1e
    Curtion
        22
    Curtion  
       2019-09-29 15:14:32 +08:00
    只能用服务器代理一下,或者修改 chrome 配置,例如使用 electron 开发软件就可以关闭同源策略来跨域访问。
    pinews
        23
    pinews  
    OP
       2019-09-29 15:31:09 +08:00
    @littlespider89 原来的想法是演示性质的,只要结果预期就可以了。
    @Trim21 你太了解我了

    @arrow8899 有些 api 是可以跨域的,如 github,如果采用非网页开发,就不考虑跨域问题了。
    @wunonglin 明白了。
    pinews
        24
    pinews  
    OP
       2019-09-29 15:32:17 +08:00
    @Curtion 好的,我去了解一下 electron。
    Curtion
        25
    Curtion  
       2019-09-29 15:44:20 +08:00
    @pinews #24 electron 可以跨域是因为可以设置 webPreferences.webSecurity = false 来关闭 web 安全检测达到跨域。如果是网站的话你只能要求有效访问者关闭浏览器中的安全策略,如果你不能这么做,那么就只能使用服务器代理者一种方式
    340244120w
        26
    340244120w  
       2019-09-29 15:50:14 +08:00
    yexiaoxing
        27
    yexiaoxing  
       2019-09-29 18:09:30 +08:00 via iPhone
    now.sh 搞个 serverless 的代理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3389 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:16 · PVG 19:16 · LAX 04:16 · JFK 07:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.