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

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

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


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

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

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

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

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

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