Flash 禁用每个请求的分块
我有一个由Javaservlet支持的web服务。该服务由较旧版本的Flash使用。我们痛苦地发现,在这个版本的Flash中,Flash 禁用每个请求的分块,flash,web-services,servlets,glassfish,chunked-encoding,Flash,Web Services,Servlets,Glassfish,Chunked Encoding,我有一个由Javaservlet支持的web服务。该服务由较旧版本的Flash使用。我们痛苦地发现,在这个版本的Flash中,URLLoader无法处理分块响应。从未从服务器接收到任何分块响应 我正在使用Glassfish来托管Servlet。我知道如何禁用整个服务器的分块,但这似乎是个坏主意(是吗?) 是否有标准的方法来禁用每个请求的分块?我尝试调用ServletResponse.setBufferSize(一些较大的值),但令人惊讶的是,这并没有影响服务器使用分块的决定。来自HttpServ
URLLoader
无法处理分块响应。从未从服务器接收到任何分块响应
我正在使用Glassfish来托管Servlet。我知道如何禁用整个服务器的分块,但这似乎是个坏主意(是吗?)
是否有标准的方法来禁用每个请求的分块?我尝试调用ServletResponse.setBufferSize(一些较大的值)
,但令人惊讶的是,这并没有影响服务器使用分块的决定。来自HttpServlet的
:
如果可能,设置Content-Length
标题(使用ServletResponse.setContentLength(int)
方法),以允许servlet容器使用持久连接将其响应返回给客户端,从而提高性能。如果整个响应适合响应缓冲区,则会自动设置内容长度
使用HTTP 1.1分块编码(这意味着响应具有传输编码
头)时,不要设置内容长度
头
因此,如果您事先设置了响应内容长度,那么它就不会以分块编码的方式发送
response.setContentLength(contentLength);
// ...
更新:您还需要确保servlet没有依次被
或RequestDispatcher\include()
调用。另见:
ServletResponse
对象的path元素和参数与调用方的保持不变。包含的servlet无法更改响应状态代码或设置标题;任何更改的尝试都将被忽略
这是有道理的,但对玻璃鱼不起作用。即使设置了内容长度,服务器仍然会分块。Glassfish版本是什么?您确定在写入任何内容之前设置了标题吗?你看到客户端的标题了吗?您确定没有在资源中设置由
或RequestDispatcher\include()
调用的标头(即完全忽略该标头,另请参见)。GF 3.1;标题没有显示,我仍然看到“chunked”;不,在设置标题之前,我没有写任何内容。我敢打赌,在请求-响应链中有一个虚假的HttpServletResponseWrapper
实现阻止了这一点。在setContentLength()
上放置一个断点,并从该断点开始跟踪。该断点可能重复