use*_*038 6 https jquery jboss download http-post
我正在使用jQuery fileDownload(由John Culviner创建)来加载由JBoss服务器使用RESTEasy动态生成的DOCX文件.应用程序和文件位于同一个域中.
这适用于HTTP GET提取的文档.
但是,在一种情况下,我必须使用HTTP POST请求,因此我可以将额外的有效负载附加到请求.这也适用于我使用HTTP的本地开发环境.但是,在生产中,服务器由HTTPS保护.那里的文件下载不起作用.在浏览器控制台中,我收到文档URL 的错误403(禁止).
这是什么问题,我该如何解决?看起来浏览器无法访问资源,但我不确定这是客户端还是服务器问题.我是否必须在任何一方设置其他HTTP标头?或者这是JBoss配置问题?
由于我无法在本地重现问题,因此很难调试.
客户代码:
var downloadUrl = '/MyApp/foobar/download';
var downloadConfiguration = {
httpMethod: "POST",
data: JSON.stringify($scope.payload),
successCallback: onSuccess,
failCallback: onError
};
$.fileDownload(downloadUrl, downloadConfiguration);
Run Code Online (Sandbox Code Playgroud)
服务器代码:
@POST
@Path("/download")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces("text/word")
public Response generateDocument(final InputStream request) throws Exception {
// ...
Response.ResponseBuilder builder = null;
File file = createMyDocument();
builder = Response.ok((Object)file);
builder.header("Content-Disposition", String.format("attachment; filename=\"%s.%s\"", FILENAME, EXTENSION));
builder.header("Set-Cookie", "fileDownload=true; path=/");
return builder.build();
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我也尝试过设置其他HTTP标头,但它没有帮助:
builder.header("X-Frame-Options", "SAMEORIGIN");
builder.header("Access-Control-Allow-Origin", "*");
Run Code Online (Sandbox Code Playgroud)
编辑2:
我添加了一个安全约束,以web.xml供下载网址,但它并没有帮助:
<security-constraint>
<web-resource-collection>
<web-resource-name>Foobar-Download</web-resource-name>
<url-pattern>/foobar/download</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>SOMEROLE</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)
编辑3: jQuery fileDownload插件使用iframe隐藏表单进行下载.也许这会干扰HTTPS连接?某种CORS问题?
小智 1
您检查过服务器上的防火墙配置吗?如果我说的是显而易见的事情,我很抱歉,但是,当您第一次向服务器提出申请并且它不是来自同一目录并且它没有设置为允许任何来源(允许*)时,您会收到错误。第一次使用allow origin *后,您可以例如从您的计算机发出本地请求,然后服务器应该接受它。如果你得到什么东西请告诉我。