2013-07-16 1 views
0


과 함께 ics 형식 및 브라우저 특정 관리와 관련된 다른 질문으로 다시 전송되었습니다.
Spring 3.2에서 생성 된 RestFUL 서버를 신경 쓰면 서버를 작성했습니다.이 서버는 호출 클라이언트 (여기서는 클라이언트의 경우 브라우저라고 함)에 문자열을 직접 반환합니다. 내 메소드의 서명은 myMethod에서ICalendar는 text/calendar mime 유형

@RequestMapping(value="/path_and_params", method = RequestMethod.GET) 
public ResponseEntity<String> myMethod (@PathVariable("first") long first, @PathVariable("second") String second) 

어딘가에처럼 나는 내가 무엇을 반환하는 내 욕망하는 것입니다

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

입니다 그래서 결국 그

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

와 응답을 조정할 수있다 브라우저는 이라는 파일을 String icsAsString에서 자동으로 생성합니다 (을 사용하여 icsAsString을 생성합니다). 210은 문법적으로 옳다.)이 파일을 다룰 올바른 애플리케이션을 선택하라. 이 희망은 Content-Disposition 헤더 (http://tools.ietf.org/html/rfc2183)에 대한 이해에서 비롯된 것입니다. 이것은 파이어 폭스 (적어도 파이어 폭스 22)와는 잘 동작한다. 그러나이 기능은 Chrome에서 작동하지 않으며 파일은 단순히 호출 탭 안에 내용으로 표시됩니다. 더구나 나는 automatically create a file에 대한 어떤 증거도 찾을 수 없기 때문에 Firefox의 기능이라고 생각되며 IE 나 다른 브라우저에서도 문제가 발생할 수 있습니다.
그래서, 결론, 내 질문은 :

  1. 내가 제대로 Content-Disposition 헤더 이해 했는가? 들어오는 응답 본문 내용을 기반으로 파일을 만들도록 브라우저에 지시하는 목적을 제공해야합니까, 아니면 Firefox 특정 기능입니까?
  2. 서버에서 파일을 만든 다음 파일을 전송하는 것이 더 좋을까요?

답변

0

분명히 나는 ​​http status codes의 동작을 잊어 버렸습니다. 내 코드의 어딘가에서 대신 응답 코드를 201으로 설정했습니다. 아마 FF는 다른 브라우저보다 상태 코드에 대해 신경 쓰지 않습니다. 사실, 코드 201의 정의는 명시

사용자 또는 사용자 에이전트는 하나의 최적

를 선택할 수있는 자원의 특성 및 위치 (들)의리스트를 포함하는 엔티티를 포함한다 응답

원 서버는 201 상태 코드

,174 반환하기 전에 자원을 만들어야

동안 서버에 파일을 만들지 않았습니다. 이제 모든 것이 기대했던대로 작동합니다!