我正在运行Django 1.2开发服务器,每当我使用Chrome或Safari加载页面时,我都会收到这些Broken Pipe错误消息。我的同事在从他的开发服务器加载页面时也会收到错误。使用Opera或Firefox时,我们没有这些错误。
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 281, in run self.finish_response()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 321, in finish_response self.write(data)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 417, in write self._write(data)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 300, in write self.flush()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 286, in flush self._sock.sendall(buffer)
error: [Errno 32] Broken pipe
任何人都可以帮助我吗?我为此疯狂了!
答案 0 :(得分:22)
答案 1 :(得分:13)
我刚刚使用django v1.1.1 dev服务器和Chrome 7.0.517.44遇到了这个问题。
我发现的“修复”在初始加载后总是在页面上进行硬刷新(按住Shift键并点击Chrome中的重新加载按钮),这会导致Chrome忽略它的缓存以查找所请求的任何资源。刷新。
因此,这让我相信这是Chrome的臭名昭着的一个问题,它可以缓存所有可能的东西;即使它不应该。我的猜测是Chrome正在发出资源请求,然后一旦意识到资源被缓存就会立即删除该资源的连接。
这几乎是一种可以忍受的解决方法,除了任何AJAX请求仍会导致问题。
答案 2 :(得分:7)
这可能是因为调度ajax调用的javascript函数出错了。
例如,该功能可能由链接上的单击事件触发,如果未阻止链接的默认操作,您将立即获得辅助请求,浏览器将关闭先前的连接而无需等待回应完成。
当我忘记将return false
添加到事件处理程序时,我遇到了同样的问题。
如果触发ajax的事件处理程序抛出异常,则会出现相同的症状。
仔细调试发出ajax请求的函数和该函数的返回值。
答案 3 :(得分:3)
当浏览器关闭与服务器的连接时,会发生损坏的管道。在与<a href="...
关联的ajax post请求之前,我遇到此问题,因为我忘记在点击处理函数中添加e.preventDefault()
。所以发生的事情是浏览器发送post请求并关闭连接并发送另一个get请求。所以你会看到浏览器取消了帖子请求。
答案 4 :(得分:2)
答案 5 :(得分:0)
如果JavaScript
客户端发生这种情况,可以采用以下解决方案。
您必须在事件处理程序的开头和结尾添加preventDefault
和return false
,如:
$('#btn_analyze').click(function(e) {
e.preventDefault()
$.post('/api/v1/analyzer/',
data,
"json").done(function(response) {
//...
}).fail(function() {
Logger.error(" Error ")
})
return false
}) // analyze click