【问题标题】:Handle 302 status code upon HTML/JS request to server?在向服务器发出 HTML/JS 请求时处理 302 状态代码?
【发布时间】:2016-12-11 15:41:11
【问题描述】:

我正在使用 Require JS 和 Orace JET

当会话超时时,我们如何处理 302 状态码或服务器返回的任何其他状态码。

是否可以将其配置为在这种情况下捕获它并将用户重定向到登录页面?

【问题讨论】:

  • 302 或任何其他 - 我会按照应该处理的错误代码来处理,具体取决于错误代码 - 您是否想要每个可能代码的代码?包括700的?因为那将是 720
  • 我通过状态码知道,但是我们在哪里可以处理这个问题。我厌倦了 require JS 的 onError 但这似乎不起作用。

标签: javascript requirejs http-status-code-302 oracle-jet


【解决方案1】:

RequireJS 看不到状态码 302。这就是浏览器的工作方式:浏览器将看到 302 并自动执行下一个 HTTP 请求。 RequireJS 不会知道有重定向。

任何错误的 HTTP 状态代码(500、400 等)都将导致模块加载失败,并且将调用 onError

【讨论】:

  • 我没有办法解决这个问题。主要问题是,我们有一个基于 FORM 的身份验证和登录以及注销工作正常。当会话超时并且我们请求 JavaScript/HTML 资源时会出现问题,容器返回“302”状态,登录页面位于现有页面的顶部。 1. URL 路径未更改为登录 URL 2. 再次登录时,返回之前请求的 JavaScript,但在浏览器中打印源代码,而不是重定向到欢迎页面。如何处理?
【解决方案2】:

这是我的解决方案(因为运气好)。把它当作一个灵感。当我的应用程序中的会话到期时,请求将使用 302 转发到您所期望的登录页面。有两种主要类型的请求可能发生:

  • REST API 调用(通过 XMLHttpRequest)
  • 用户在页面上进行的导航

对于#2,302 没有问题。用户只是被重定向到登录页面。

对于#1,我可以以某种方式检测到它(有一定的可能性),因为登录页面位于不支持 CORS 的不同域上。 XMLHttpRequest 请求将简单地失败,readyState 等于 0,statusText 等于“error”(因为浏览器会将 XMLHttpRequest 阻止到不同的域)。我的所有 REST API 调用都有一个“侦听器”(拦截器),每当有一些因 0 readyState 和“错误”statusText 而失败时,这意味着该会话可能已过期。

这当然不是解决方案,不能在任何地方使用。只是一个想法:)

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 2013-07-02
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2010-11-25
    相关资源
    最近更新 更多