【问题标题】:jQuery returns status code 404 instead of 403jQuery 返回状态码 404 而不是 403
【发布时间】:2013-07-09 01:28:04
【问题描述】:

我在使用 jquery 2.0.2 时遇到问题,并在调用我的 API 时让它识别 HTTP 403 状态代码(托管在同一台机器上,就像调用来自的静态网页一样)。从网页的 javascript 中,我正在针对 /sessions 路由执行 $.ajax GET 以检查当前是否设置了用户的 cookie,如果不存在此类 cookie 或者它无效,则期望 403。

通过以下调用提前设置 Ajax:

  setupAjax: ->
    $.ajaxSetup(
      dataType: 'json'
      xhrFields:
        withCredentials: true)

API(下面的 nginx 反向代理日志)为未经身份验证的用户正确返回 403:

127.0.0.1 - - [06/Jul/2013:22:48:25 -0700] "GET /1/sessions HTTP/1.1" 403 33 "https://foo.localhost.com/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0"

Firefox 同意:

但是,当调用 jQuery 的 xhr 错误处理程序时,xhr.status 代码由于某种原因始终为 404,这会完全关闭逻辑。例如,假设我使用下面的 CoffeeScript 调用,只有 404 处理程序被调用,如果我给它一个正确的路由甚至是一个不存在的路由(在服务器日志和 Firefox 中都正确返回 404)

  checkSessionCookie: ->
    $.ajax(
      url: "#{@baseUrl}/sessions"
      type: 'GET'
      statusCode:
        403: -> console.log "I'm a 403"
        404: -> console.log "I'm a 404")

(控制台中的 xhr 对象转储):

Object { readyState=4, status=404, statusText="error"}

这里发生了什么?我错误地配置了 jQuery 还是我以某种方式滥用了它?这里有什么技巧吗?

【问题讨论】:

  • 这到底是什么脚本?对我来说,它看起来不像 javascript;您应该为您的问题添加正确的标签。
  • 他确实提到了咖啡脚本?
  • 检查权限?正确权限的经验法则:文件夹:755 静态内容:644 动态内容:700

标签: ajax jquery coffeescript xmlhttprequest


【解决方案1】:

根据一些实验,似乎 Firefox 可能已经吞噬了导致错误状态的 CORS 异常。 Chrome 总是报告 CORS 调用,这就是我使用 Firefox 进行测试的原因。

在服务器上设置 CORS 标头使 Firefox 正确返回 403。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多