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

一个奇怪的跨域问题

  •  
  •   molvqingtai ·
    molvqingtai · Apr 1, 2019 · 3960 views
    This topic created in 2623 days ago, the information mentioned may be changed or developed.
    前端跨域请求后台接口遇到这么一个奇怪的问题

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

    Response Headers



    返回值为空



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

    Response Headers



    有返回值


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

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

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

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