0

再次回到与 ics 格式及其浏览器特定管理相关的另一个问题。
我写了一个服务器,如果你关心使用 Spring 3.2 生成的 RestFUL 服务器,它直接返回一个字符串给调用客户端(这里,对于客户端,我的意思是浏览器)。我的方法的签名就像
@RequestMapping(value="/path_and_params", method = RequestMethod.GET)
public ResponseEntity<String> myMethod (@PathVariable("first") long first, @PathVariable("second") String second)

在某处myMethod我调整了响应

HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/calendar; charset=utf-8");
headers.add("Content-Disposition", "inline;filename=calendar.ics");

所以最后我返回的是

return new ResponseEntity<String> ( icsAsString, headers, HttpStatus.CREATED );

我的愿望是让浏览器自动创建一个名为calendar.icsfrom的文件String icsAsString(请注意,icsAsString使用iCal4J创建的因此在语法上是正确的)并选择正确的应用程序来处理这个文件。这种愿望来自我对Content-Disposition标题的理解(https://www.rfc-editor.org/rfc/rfc2183)。这适用于 Firefox(至少适用于 Firefox 22)。但是,这不适用于 Chrome,其中文件只是在调用选项卡中显示为内容。此外,我找不到任何证据证明automatically create a file这让我认为这是 Firefox 的一个功能,并且 IE 或其他浏览器也可能出现问题。
所以,总而言之,我的问题是:

  1. 我是否正确理解了Content-Disposition标题?它应该服务于告诉浏览器根据传入的响应正文内容创建文件的目的,还是这是 Firefox 特有的功能?
  2. 如果我在服务器上创建一个文件然后传输该文件会更好吗?
4

1 回答 1

0

显然我忘记/误解了http 状态代码的行为。在我的代码中的某处,我将响应代码设置为201而不是200. 与其他浏览器相比,FF 可能不太关心状态代码。事实上,关于代码201状态的定义

响应应该包含一个包含资源特征和位置列表的实体,用户或用户代理可以从中选择最合适的一个

源服务器必须在返回 201 状态码之前创建资源

虽然我没有在服务器上创建文件。现在一切都按我的预期工作!

于 2013-07-17T13:51:37.430 回答