再回来一个与ics格式及其浏览器特定管理相关的问题
我写了一个服务器,如果你关心用Spring 3.2生成的RestFUL服务器,它会直接将一个String返回给调用客户端(这里,对于客户端,我指的是一个浏览器)。我方法的签名就像
@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.ics
自动创建名为String icsAsString
的文件(请注意icsAsString
是使用iCal4J创建的,因此在语法上是正确的)并选择正确的应用程序来处理这个文件。这种愿望源于我对Content-Disposition
标题(http://tools.ietf.org/html/rfc2183)的理解。这适用于Firefox(至少使用Firefox 22)。但是,这不适用于Chrome,其中文件只是显示为调用标签内的内容。此外,我无法找到任何关于automatically create a file
的证据,这使我认为这是Firefox的一个功能,并且IE或其他浏览器也可能出现问题。
总而言之,我的问题是:
Content-Disposition
标题?它是否应该用于告诉浏览器根据传入的响应主体内容创建文件,还是这个特定于Firefox的功能?答案 0 :(得分:0)
显然我忘了/误解了http status codes的行为。在我的代码中,我将响应代码设置为201
而不是200
。可能FF比其他浏览器更少关注状态代码。事实上,代码201
上的定义陈述了
响应应该包含一个实体,其中包含资源特征和位置列表,用户或用户代理可以从中选择最合适的一个
和
原始服务器必须在返回201状态代码之前创建资源
虽然我没有在服务器上创建文件。现在一切都像我期待的那样有效!