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

一个奇怪的跨域问题

  •  
  •   molvqingtai ·
    molvqingtai · 2019-04-01 00:36:56 +08:00 · 3370 次点击
    这是一个创建于 2062 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前端跨域请求后台接口遇到这么一个奇怪的问题

    当我从代码里面发出跨域请求时 Status Code: 200,但是没有返回值

    Response Headers



    返回值为空



    但是我新建一个 html 文件或是直接在控制台发送跨域请求,可以收到返回值
    然后自己起一个 node 服务测试也可以收到返回值

    Response Headers



    有返回值


    通过比较我发现后端给我的接口 Response Headers 里面只有两个字段
    但是令我疑惑的是,既然后端的配置有问题,为什么我直接在当前应用的控制台或新建 html 发送的发跨域请求却可以收到返回值,而我写在逻辑代码里面的请求却没有返回值?
    13 条回复    2019-04-01 19:55:11 +08:00
    hlwjia
        1
    hlwjia  
       2019-04-01 01:58:33 +08:00 via iPhone
    首先代码发请求是什么意思?新建 html 发请求又是什么意思?区别是什么?

    然后出不一样的返回不是应该看看你请求发出去的是什么内容吗?

    你光比人家返回来的内容干嘛?
    zhoufenfens
        2
    zhoufenfens  
       2019-04-01 02:34:36 +08:00 via Android
    后端设置判断的条件不同。一个是具体域名,一个是星号
    gbin
        3
    gbin  
       2019-04-01 07:29:49 +08:00 via Android   ❤️ 2
    因为你的逻辑请求属于复杂请求,复杂请求跨域时会先发送 OPTIONS 预检请求,该请求没有内容返回,之前写过一篇类似博客,可以参考一下,https://0x400.com/2017-08-02-frontend-learn-about-cros.html

    写作水平有限,文中有参考,可以直接看参考。
    deepdark
        4
    deepdark  
       2019-04-01 07:49:09 +08:00 via Android
    这个 200 但是没有返回值的请求是 OPTIONS,相当于探路的
    TomVista
        5
    TomVista  
       2019-04-01 08:10:55 +08:00
    post + json 的请求 是一个复杂请求,包含一个 options 一个 post,复杂请求的 allow-origin 必需指定域名,不能用*号.
    xingwing
        6
    xingwing  
       2019-04-01 08:47:54 +08:00
    加这个试试:dataType:'json',
    molvqingtai
        7
    molvqingtai  
    OP
       2019-04-01 09:06:27 +08:00
    @hlwjia 可能是我描述不清楚,就是我同一段请求代码我写在逻辑里面的时候,收不到返回值,粘贴再控制台却可以发送,发送的字段当然相同
    50infivedays
        8
    50infivedays  
       2019-04-01 09:19:02 +08:00
    你没有理解跨域的原理
    跨域是浏览器行为 ,你直接去请求根本不会触发跨域
    当你在代码中的时候 浏览器才会真正的触发跨域,跨域的流程是先发 preflight 的 options 请求,这个请求没有业务意义,只是询问服务端是否允许跨域
    之后如果浏览器觉得满足条件,才会发起真正的请求
    molvqingtai
        9
    molvqingtai  
    OP
       2019-04-01 09:48:51 +08:00
    谢谢大家,我把自己 node 的响应头配置复制给菜鸡后端问题解决了
    molvqingtai
        10
    molvqingtai  
    OP
       2019-04-01 09:51:05 +08:00
    @50infivedays 我遇到的是 options 预检请求已通过,第二发出的请求没有返回值
    xiaoxiuaoliang
        11
    xiaoxiuaoliang  
       2019-04-01 10:12:38 +08:00 via Android
    @molvqingtai 所以根本原因是?
    no1xsyzy
        12
    no1xsyzy  
       2019-04-01 12:20:01 +08:00
    @xiaoxiuaoliang 无 CORS 头,应该是遭遇了不符合跨域导致的 downgrade,请求头被阉了。
    50infivedays
        13
    50infivedays  
       2019-04-01 19:55:11 +08:00
    @molvqingtai 这确实很奇怪。。。找到原因了吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3065 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 10:47 · PVG 18:47 · LAX 02:47 · JFK 05:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.