• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pinews
V2EX  ›  程序员

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

  •  
  •   pinews · Sep 29, 2019 · 5316 views
    This topic created in 2425 days ago, the information mentioned may be changed or developed.
    27 replies    2019-09-29 18:09:30 +08:00
    IsaacYoung
        1
    IsaacYoung  
       Sep 29, 2019
    用自己的服务器代理一下
    Liang
        2
    Liang  
       Sep 29, 2019
    proxy server
    dbj1991
        3
    dbj1991  
       Sep 29, 2019
    jsonp
    shakaraka
        4
    shakaraka  
    PRO
       Sep 29, 2019
    nginx 饭袋
    arrow8899
        5
    arrow8899  
       Sep 29, 2019
    前端没法搞的,加个 nginx 代理一下
    secretman
        6
    secretman  
       Sep 29, 2019
    找别人家去啊
    fumichael
        7
    fumichael  
       Sep 29, 2019   ❤️ 3
    跨域是浏览器的同源策略
    Authorization 是接口鉴权
    那个回复 jsonp 的我就不想说他了
    shintendo
        8
    shintendo  
       Sep 29, 2019
    @dbj1991 别人家的 api 你 jsonp ?
    darknoll
        9
    darknoll  
       Sep 29, 2019
    @dbj1991 你怎么不说 CORS ?
    tinytin
        10
    tinytin  
       Sep 29, 2019 via iPhone
    不允许跨域,你前端加啥都没用
    catch
        11
    catch  
       Sep 29, 2019 via iPhone
    你把大火逗乐了
    kyoukai
        12
    kyoukai  
       Sep 29, 2019
    iframe 不算跨域,试试?主页面操作子页面的 iframe。
    pinews
        13
    pinews  
    OP
       Sep 29, 2019
    @IsaacYoung
    @Liang
    @arrow8899
    @wunonglin 不太懂,我的意思是不用服务器,只用浏览器就可以实现的,当成不依赖服务端的独立客户端一样。。


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

    form 表单提交和 xhr 是不一样的,form 表单提交你已经跳转到别人的页面上了,你还是没办法获取并操作数据
    arrow8899
        17
    arrow8899  
       Sep 29, 2019
    @pinews 如果浏览器能直接跨域,那么浏览器的同源策略有什么意义呢
    speedofstephen
        18
    speedofstephen  
       Sep 29, 2019
    隐约记得 chrome 关闭一个安全选项,就可以进行跨域访问了。
    npe
        19
    npe  
       Sep 29, 2019 via iPhone
    是的,浏览器不允许 XHR 跨域访问。
    shakaraka
        20
    shakaraka  
    PRO
       Sep 29, 2019
    @pinews 没用,必须要后台或者 nginx 饭袋
    cyrbuzz
        21
    cyrbuzz  
       Sep 29, 2019
    巧了...
    刚写了一个前端的学习项目,调用的实验楼 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  
       Sep 29, 2019
    只能用服务器代理一下,或者修改 chrome 配置,例如使用 electron 开发软件就可以关闭同源策略来跨域访问。
    pinews
        23
    pinews  
    OP
       Sep 29, 2019
    @littlespider89 原来的想法是演示性质的,只要结果预期就可以了。
    @Trim21 你太了解我了

    @arrow8899 有些 api 是可以跨域的,如 github,如果采用非网页开发,就不考虑跨域问题了。
    @wunonglin 明白了。
    pinews
        24
    pinews  
    OP
       Sep 29, 2019
    @Curtion 好的,我去了解一下 electron。
    Curtion
        25
    Curtion  
       Sep 29, 2019
    @pinews #24 electron 可以跨域是因为可以设置 webPreferences.webSecurity = false 来关闭 web 安全检测达到跨域。如果是网站的话你只能要求有效访问者关闭浏览器中的安全策略,如果你不能这么做,那么就只能使用服务器代理者一种方式
    340244120w
        26
    340244120w  
       Sep 29, 2019
    yexiaoxing
        27
    yexiaoxing  
       Sep 29, 2019 via iPhone
    now.sh 搞个 serverless 的代理
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2447 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 16:04 · PVG 00:04 · LAX 09:04 · JFK 12:04
    ♥ Do have faith in what you're doing.