Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Zope生成的Ajax响应文本不';在某些情况下,我们无法联系到客户_Jquery_Ajax_Plone_Httpresponse_Zope - Fatal编程技术网

Jquery Zope生成的Ajax响应文本不';在某些情况下,我们无法联系到客户

Jquery Zope生成的Ajax响应文本不';在某些情况下,我们无法联系到客户,jquery,ajax,plone,httpresponse,zope,Jquery,Ajax,Plone,Httpresponse,Zope,我有一个Zope/Plone服务器,它有一个浏览器(我们称之为thebrowser),它向ReSTful web服务发送经过签名的请求,接收XML,将其转换为HTML,并通过AJAX将其交付给客户机(因此,从客户机的角度来看,一切都发生在我的服务器上)。大多数情况下,这是可行的,但对于某些请求,它不会,我也不知道为什么。失败的请求需要几秒钟的时间,数据长度约为100KB,但我们这里不讨论分钟或兆字节 奇怪的是,ZServerHTTPResponse对象看起来很正常,但它以空字符串的形式到达web

我有一个Zope/Plone服务器,它有一个浏览器(我们称之为
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