Jquery Zope生成的Ajax响应文本不';在某些情况下,我们无法联系到客户
我有一个Zope/Plone服务器,它有一个浏览器(我们称之为Jquery Zope生成的Ajax响应文本不';在某些情况下,我们无法联系到客户,jquery,ajax,plone,httpresponse,zope,Jquery,Ajax,Plone,Httpresponse,Zope,我有一个Zope/Plone服务器,它有一个浏览器(我们称之为thebrowser),它向ReSTful web服务发送经过签名的请求,接收XML,将其转换为HTML,并通过AJAX将其交付给客户机(因此,从客户机的角度来看,一切都发生在我的服务器上)。大多数情况下,这是可行的,但对于某些请求,它不会,我也不知道为什么。失败的请求需要几秒钟的时间,数据长度约为100KB,但我们这里不讨论分钟或兆字节 奇怪的是,ZServerHTTPResponse对象看起来很正常,但它以空字符串的形式到达web
thebrowser
),它向ReSTful web服务发送经过签名的请求,接收XML,将其转换为HTML,并通过AJAX将其交付给客户机(因此,从客户机的角度来看,一切都发生在我的服务器上)。大多数情况下,这是可行的,但对于某些请求,它不会,我也不知道为什么。失败的请求需要几秒钟的时间,数据长度约为100KB,但我们这里不讨论分钟或兆字节
奇怪的是,ZServerHTTPResponse
对象看起来很正常,但它以空字符串的形式到达web客户端(Firefox、Firebug)
工具链如下所示:
在皮肤中,我有一个脚本(Python)
:
这使得请求/theservice/some/sub/path
工作some/sub/path
放在path
键中
浏览器的get
方法采用path
参数,进行一般处理(向发送签名请求),根据path
将XML响应提供给正确的转换方法,并返回响应,例如由jquery手风琴使用
浏览器浏览器如下所示(为清晰起见,将错误处理等剥离):
。。。这在我看来很合理。无论如何,对于某些请求(可能是响应量大或处理时间最长的请求),客户端浏览器会看到一个空字符串
版本:Zope2.10.13、Python2.4.6(64位)、Plone 3.3(是的,我们将切换到Plone 4,但这需要一些时间…)
更新:
当我修复ElementTree
imports以使用编译版本时,我认为我的问题已经解决了:
try:
from celementtree import fromstring # modern Python versions
except ImportError:
try:
from cElementTree import fromstring # Python 2.4
except ImportError:
from elementtree import fromstring # emergency fallback
不幸的是,这对我有效,但对客户无效
Zope站点由Apache VirtualHost提供,其中通常的重写规则处于活动状态:
RewriteRule ^/(.*) http://localhost:8082/VirtualHostBase/http/%{HTTP_HOST}:80/theportalroot/VirtualHostRoot/$1 [L,P]
根据Firebug的说法,不存在内容长度头(Apache是否可以删除此标题?!)。以下是完整的响应标题:
Connection Keep-Alive
Content-Encoding gzip
Content-Type text/html; charset=utf-8
Date Thu, 18 Apr 2013 12:31:41 GMT
Keep-Alive timeout=15, max=99
Server Zope/(Zope 2.10.7-final, python 2.4.6, linux2) ZServer/1.1 Plone/3.2.2 ShellEx Server/4.0.0
Set-Cookie JSESSIONID=308B09957635CA02829AF5C362FB60E3; Path=/; Secure
Transfer-Encoding chunked
Vary Accept-Encoding
我试图通过Zope直接获得响应,但要做到这一点,我显然必须访问Zope根目录,我在那里遇到了权限问题。你能看看wireshark转储吗?Firebug报告的内容长度标题是什么?在zope/zserver和浏览器之间是否有中间代理,或者在裸连接上是否也看到这种行为?你能在开发环境中复制吗?我更新了我的问题以添加更多信息。Wireshark部分将花费我一段时间…当使用分块传输编码来传递响应时,将不会有内容长度头(在您的情况下,zserver或Apache)。这是GET请求还是POST?我认为查看您的Z2.log以验证请求是否为200响应可能会确认此问题与Apache有关(可能是mod_gzip返回零长度响应,或者客户端被分块的gzip内容阻塞?)。Wireshark可能会有所帮助,因为我认为这个问题要么在客户端上,要么在您的反向代理设置上。到目前为止,所有请求都是GET请求,所有有问题的请求都会产生状态200。大多数成功的请求都有Content-Length头,但有些请求也有分块传输编码……我试图替换GET-by-POST请求。不幸的是,这没有帮助。
try:
from celementtree import fromstring # modern Python versions
except ImportError:
try:
from cElementTree import fromstring # Python 2.4
except ImportError:
from elementtree import fromstring # emergency fallback
RewriteRule ^/(.*) http://localhost:8082/VirtualHostBase/http/%{HTTP_HOST}:80/theportalroot/VirtualHostRoot/$1 [L,P]
Connection Keep-Alive
Content-Encoding gzip
Content-Type text/html; charset=utf-8
Date Thu, 18 Apr 2013 12:31:41 GMT
Keep-Alive timeout=15, max=99
Server Zope/(Zope 2.10.7-final, python 2.4.6, linux2) ZServer/1.1 Plone/3.2.2 ShellEx Server/4.0.0
Set-Cookie JSESSIONID=308B09957635CA02829AF5C362FB60E3; Path=/; Secure
Transfer-Encoding chunked
Vary Accept-Encoding