ukipoi
V2EX  ›  问与答

关于 ajax http 请求的问题

  •  
  •   ukipoi · Jun 21, 2019 · 1749 views
    This topic created in 2543 days ago, the information mentioned may be changed or developed.

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

    Supplement 1  ·  Jun 21, 2019
    打印信息
    ```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 replies    2019-06-22 08:33:56 +08:00
    qq292382270
        1
    qq292382270  
       Jun 21, 2019
    302 有没有可能是因为本来是 https,前端请求 http
    ukipoi
        2
    ukipoi  
    OP
       Jun 21, 2019
    @qq292382270
    重定向是在 preHandle 里被拦截了,原因是 session 里获取不到登录信息。
    这个和 https 有关系吗?
    ukipoi
        3
    ukipoi  
    OP
       Jun 21, 2019
    难道是 Method 是 OPTIONS 的请求本来就不会带 session 和 cookie 的信息吗?
    我看到第一次请求 Method 是 OPTIONS,第二次是 POST
    momocraft
        4
    momocraft  
       Jun 21, 2019
    请阅读跨域请求规范( CORS )和 ajax API (withCredentials)
    ukipoi
        5
    ukipoi  
    OP
       Jun 21, 2019
    @momocraft
    那前端进行 preflight request 的时候被我后台拦截了,是属于正常的行为么?
    而且那次拦截里,request 不包含任何的 session 和 cookie,请问这是正常情况么?
    enjoyCoding
        6
    enjoyCoding  
       Jun 21, 2019
    是正常的 option 请求只是浏览器先发个请求看看能不能跨域
    http://www.ruanyifeng.com/blog/2016/04/cors.html
    四、非简单请求 说的比较详细
    ukipoi
        7
    ukipoi  
    OP
       Jun 21, 2019
    @enjoyCoding
    那也就是说我在拦截的时候应该判断 request 的请求方法是不是“ OPTIONS ”,如果是这个请求就跳过拦截?
    enjoyCoding
        8
    enjoyCoding  
       Jun 21, 2019   ❤️ 1
    @ukipoi 实际上后端不仅要判断 options 还有 get post 这种前端给你发的正常请求
    w292614191
        9
    w292614191  
       Jun 22, 2019
    应该没登陆,session 无认证信息,然后你 ajax 请求,就被重定向了。
    你在 preHandle 判断 session 无认证信息时,同时判断是否为 ajax 请求,如果是 ajax 就返回你定义的 xxx 状态码,前端在 complete 里面判断状态码为 xxx 时直接跳转到登录页。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2908 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:22 · PVG 14:22 · LAX 23:22 · JFK 02:22
    ♥ Do have faith in what you're doing.