V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ukipoi
V2EX  ›  问与答

关于 ajax http 请求的问题

  •  
  •   ukipoi · 2019-06-21 14:01:14 +08:00 · 1372 次点击
    这是一个创建于 2012 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端用 content-type application/json 类型请求报了 302 的错误.
    看了下是被拦截然后重定向了。
    拦截的原因是 session 里没有值,需要让他重新登录。
    我跳过这次重定向发现前端请求了两次。
    第一次 session 和 cookie 里什么值都没有,第二次就有 session 和 cookie。
    请问这是拦截设置的有问题吗?

    第 1 条附言  ·  2019-06-21 14:37:26 +08:00
    打印信息
    ```log
    #第一次请求
    --------------request---------------
    Method: OPTIONS
    ServletPath: /xxxxxxxxxxxxx
    --------------session--------------
    --------------cookie---------------
    -----------------------------------
    ## 跳过重定向 ##

    #第二次请求
    --------------request---------------
    Method: POST
    ServletPath: /xxxxxxxxxxxxx
    --------------session--------------
    name: login
    value: XXXXXXXXX
    --------------cookie---------------
    name: XXXXXXXXX
    value: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    name: XXXXXXXXX
    value: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    -----------------------------------
    ```
    9 条回复    2019-06-22 08:33:56 +08:00
    qq292382270
        1
    qq292382270  
       2019-06-21 14:05:43 +08:00
    302 有没有可能是因为本来是 https,前端请求 http
    ukipoi
        2
    ukipoi  
    OP
       2019-06-21 14:22:27 +08:00
    @qq292382270
    重定向是在 preHandle 里被拦截了,原因是 session 里获取不到登录信息。
    这个和 https 有关系吗?
    ukipoi
        3
    ukipoi  
    OP
       2019-06-21 14:32:31 +08:00
    难道是 Method 是 OPTIONS 的请求本来就不会带 session 和 cookie 的信息吗?
    我看到第一次请求 Method 是 OPTIONS,第二次是 POST
    momocraft
        4
    momocraft  
       2019-06-21 14:41:50 +08:00
    请阅读跨域请求规范( CORS )和 ajax API (withCredentials)
    ukipoi
        5
    ukipoi  
    OP
       2019-06-21 16:26:20 +08:00
    @momocraft
    那前端进行 preflight request 的时候被我后台拦截了,是属于正常的行为么?
    而且那次拦截里,request 不包含任何的 session 和 cookie,请问这是正常情况么?
    enjoyCoding
        6
    enjoyCoding  
       2019-06-21 16:41:16 +08:00
    是正常的 option 请求只是浏览器先发个请求看看能不能跨域
    http://www.ruanyifeng.com/blog/2016/04/cors.html
    四、非简单请求 说的比较详细
    ukipoi
        7
    ukipoi  
    OP
       2019-06-21 16:50:30 +08:00
    @enjoyCoding
    那也就是说我在拦截的时候应该判断 request 的请求方法是不是“ OPTIONS ”,如果是这个请求就跳过拦截?
    enjoyCoding
        8
    enjoyCoding  
       2019-06-21 17:11:59 +08:00   ❤️ 1
    @ukipoi 实际上后端不仅要判断 options 还有 get post 这种前端给你发的正常请求
    w292614191
        9
    w292614191  
       2019-06-22 08:33:56 +08:00
    应该没登陆,session 无认证信息,然后你 ajax 请求,就被重定向了。
    你在 preHandle 判断 session 无认证信息时,同时判断是否为 ajax 请求,如果是 ajax 就返回你定义的 xxx 状态码,前端在 complete 里面判断状态码为 xxx 时直接跳转到登录页。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1163 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:18 · PVG 02:18 · LAX 10:18 · JFK 13:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.