首页 > 解决方案 > Django 开发服务器不一致地处理相同的 Ajax 请求

问题描述

我正在使用 ajax 客户端提交 POST。只要所有请求都有效,它就可以正常工作。但是,当我向无效的 URL 发送 POST 请求,然后用另一个 POST 请求跟进它时,无论它是否有效,Django 都会以完全不同的方式处理请求。在更改某些代码之前,它实际上导致服务器崩溃。

当我连续发送两个无效请求时,Django 服务器标准输出会发生以下情况:

Not Found: /profile/add_favorite
[01/Aug/2019 15:42:25] "POST /profile/add_favorite HTTP/1.1" 404 4132
Not Found: /profile/add_favorite
[01/Aug/2019 15:42:30] "title=Video+TitlePOST /profile/add_favorite HTTP/1.1" 404 4178

第二个请求看起来格式不正确,并且与前一个请求的格式不同。

请求是使用基本 Ajax 发送的:


var conf = {
        type: 'POST',
        url: url,
        data: {title: "Video Title"},
         headers: {'X-CSRFToken': csrftoken},
        } 
$.ajax(conf)

在开发工具中,我检查了请求是否相同:

] ]

这只是标题,但数据也是相同的。无论如何,两个请求都使用了完全相同的代码。这只发生在我向无效 URL 发送请求,然后在其后发送另一个请求时,如果我在发送无效请求后重新加载页面并发送另一个请求,该请求将正常工作,但不会返回一个混乱首先回应。

看哪:如果我向一个无效的 URL 发送一个 post 请求,然后在 Chrome chrome 中重新加载页面将不会发送一个有效的 GET 请求,而是发送一个带有相同前置标题、相同无效格式的请求!

[01/Aug/2019 16:04:03] "title=Video TitleGET / HTTP/1.1" 403 2513

那么问题就来了:每当我从浏览器发送一个无效的 url Ajax 请求时,对我的服务器的下一个请求将以同样的方式变为无效。我确信这不是浏览器端的问题,因为我可以从一个窗口发送不正确的请求,然后来自不同窗口的下一个请求将不正确!这是下一个请求的屏幕:

在此处输入图像描述

CSRF 令牌甚至在第一次加载站点时都无关紧要,这使得该消息毫无意义。

对于我的服务器来说,这显然是一个令人难以置信的严重问题,因为任何时候有人向我服务器上的无效 URL 发送请求,下一个请求将无法正确处理。

这一定是 Django 开发服务器的错误?什么可能导致这种情况?

标签: djangoajaxpostrequest

解决方案


推荐阅读