jquery - 通过 HTTPS 的 POST 请求导致错误 403(禁止)

标签 jquery https jboss download http-post

我正在使用jQuery fileDownload (由 John Culviner 创建)加载由 JBoss 服务器使用 RESTEasy 动态生成的 DOCX 文件。应用程序和文件位于同一域中。

这适用于通过 HTTP GET 获取的文档。

但是,在一种情况下,我必须使用 HTTP POST 请求,因此我可以将额外的负载附加到请求中。这也适用于我使用 HTTP 的本地开发环境。然而,在生产中,服务器通过 HTTPS 进行保护。那里的文件下载不起作用。在浏览器控制台中,我收到文档 URL 的错误 403(禁止)

这里有什么问题以及如何解决它?浏览器似乎无法访问该资源,但我不确定这是客户端问题还是服务器问题。我是否必须在任一侧设置额外的 HTTP header ?或者这是 JBoss 配置问题?

由于我无法在本地重现该问题,因此很难调试。

<小时/>

客户端代码:

var downloadUrl = '/MyApp/foobar/download';

var downloadConfiguration = {
    httpMethod: "POST",
    data: JSON.stringify($scope.payload),
    successCallback: onSuccess,
    failCallback: onError
};

$.fileDownload(downloadUrl, downloadConfiguration);

服务器代码:

@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();
}
<小时/>

编辑:

我也尝试过设置额外的 HTTP header ,但没有帮助:

builder.header("X-Frame-Options", "SAMEORIGIN");
builder.header("Access-Control-Allow-Origin", "*");
<小时/>

编辑2:

我添加了Security Constraintweb.xml 作为下载 URL,但没有帮助:

<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>
<小时/>

编辑 3: jQuery fileDownload 插件使用带有隐藏表单的 iframe 进行下载。也许这会干扰 HTTPS 连接?某种 CORS 问题?

最佳答案

您检查过服务器上的防火墙配置吗?如果我说的是显而易见的事情,我很抱歉,但是,当您第一次向服务器提出申请并且它不是来自同一目录并且它没有设置为允许任何来源(允许*)时,您会收到错误。第一次使用allow origin *后,您可以例如从您的计算机发出本地请求,然后服务器应该接受它。如果你有什么收获请告诉我。

关于jquery - 通过 HTTPS 的 POST 请求导致错误 403(禁止),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47833106/

相关文章:

java - 在应用程序服务器中的何处添加 JDBC 驱动程序?

jquery - Jquery中的数据属性是否需要html5的DOCTYPE声明

php - 如何通过ajax向php发送第二个值

python - 如何通过fiddler2捕获python SSL(HTTPS)连接

java - 即使安装 Hibernate Eclipse 插件后,Hibernate Perspective 也不会出现在 Luna 中

linux - 无法以非 root 用户启动 jboss 服务

javascript - 如何在 HTML 中制作 anchor 标记下拉列表

javascript - jquery背景颜色在滚动时淡入

amazon-web-services - 使用 AWS/EC2 应用 SSL 证书

Python Mechanize 模块加密