Django:如何追踪虚假的HTTP请求?

时间:2010-02-15 01:54:23

标签: ajax django http debugging request

我有3个AJAX函数在我的网站上的Django应用程序和使用浏览器中的YUI的一些JavaScript之间移动数据。它们的结构,概念,代码等方面没有太大的区别。其中2个工作正常,但在第3个中,我在预期的请求后立即得到一个虚假的HTTP请求。其POST数据包含预期请求的POST数据的子集。请求元数据是相同的,除了CONTENT_LENGTH(显然)和CONTENT_TYPE是'text / plain; charset = UTF-8'用于预期和'application / x-www-form-urlencoded'用于不需要的请求。我根本没有明确地设置内容类型,这似乎表明这两个请求不具有相同的来源,而第二个请求只是凭空而来。

预期的请求设置HTTP_CACHE_CONTROL':'no-cache'和'HTTP_PRAGMA':'no-cache',虚假的请求不会。两个请求的开发服务器日志输出是

[15/Feb/2010 15:00:12] "POST /settings/ HTTP/1.1" 200 0

最后的0是什么意思?找不到任何相关文档。这个值通常是非零的...在Apache中,它是服务器响应的总大小(以字节为单位),有人可以确认它对Django来说是一样的吗?

我的问题显然是找出这个额外请求的来源。

我对使用Firebug进行JS调试非常熟悉,我认为我擅长Python和Django,但我对HTTP请求和响应的内部结构并不了解。我可以断点并逐步执行发送预期XMLHTTP请求的JS代码,但该断点不会再被命中。

FF3和Safari都出现问题,我使用的是Snow Leopard,因此我无法使用IE或Chrome进行测试。 我看过Django调试技术和工具,如http://robhudson.github.com/django-debug-toolbar/,但我想我已经掌握了他们可以提供给我的信息。

有人可以就策略或工具提出建议来缩小问题范围吗?

1 个答案:

答案 0 :(得分:1)

有问题的AJAX函数提交表单数据,而工作两者则没有。表单具有默认操作,该操作在提交表单时发生:使用表单数据发布请求。我未能阻止此默认操作。

所以虚假的请求确实来自浏览器的黑暗丛林,我的js文件中没有代码发送它。

解决方案:

YAHOO.util.Event.preventDefault(event);

在表单提交事件处理程序的开头。

另见http://developer.yahoo.com/yui/examples/event/eventsimple.html