2012-08-30 3 views
10

ExpressJS의 일부 비정상적인 동작이 발생합니다. 내 node.js/express 기반 API URL에 대한 두 번째 요청에서 항상 IE에 304 Not Modified 응답 코드를 반환합니다. 다른 브라우저는 200 (Chrome/FF)을 얻습니다. 문제는 콘텐츠가 실제로 변경된 경우에도 304를 반환한다는 것입니다. 나는 검색을 시도했으나 주제에 대해 아무 것도 찾을 수 없었다. 또한 IE와 Chrome의 요청 헤더에서 차이점을 찾아 내려고 시도 할 수있는 헤더를 볼 수있었습니다. 어떤 도움을 주시면 감사하겠습니다.express는 IE 반복 요청에 대해 304를 반환합니다.

내가 연결을 추가 할 필요가 경우에 그것은

+0

IE의 응답 코드는 어떻게 결정됩니까? – josh3736

+0

+1 나는 똑같은 문제가있다! – Erik

+0

josh3736, 내가 해결의 더 IE 개발자 도구 – bbbonthemoon

답변

2

음을 중요한, SSL을 통해 간다, 나는 캐시-Control 헤더 해결 방법입니다 캐시-Control 헤더를

+0

에서 네트워크 로그를 확인하고 있습니다. 바라건대 누군가가 해결책을 게시 할 수 있기를 바랍니다. – Brad

3

을 추가하여 문제를 해결할 수 있었다. 이 버그는 인터넷 익스플로러가 헤더에 대한 HTTP 1.1 스펙을 해석 할 때 발생합니다.

이 문제를 해결 한 경로 처리기에 추가했습니다. Last-Modified 또는 ETag 헤더가 필요하지만 Express가 이미이를 전송하고 있습니다.

res.setHeader("Expires", "-1"); 
res.setHeader("Cache-Control", "must-revalidate, private"); 

참조 : Make IE to cache resources but always revalidate

4

내가 주변에 많이 보이는 같은 문제가 그것은 사실 문제가 IE의 요청을받을 아약스의 바보 같은 공격적인 캐싱에서 오는집니다. 실제로이 값이 304로 표시되면 실제 요청은 서버에 도달하지 않지만 IE는 캐시의 최신 데이터로 응답합니다. 이는 MS가 의도 한 동작이므로 해결 방법 만 있습니다. 내 선호

각 아약스 GET 요청에 현재 시간을 포함하는 쓸모없는 쿼리 매개 변수를 연결하는 것입니다. IE가 항상 서버에서 검색하도록합니다. 좋은 부분은 당신이 jQuery를 사용하는 경우, 당신은

$.ajaxSetup({cache:false}) 

또 다른 작품은 약 GET 대신 POST 요청을 사용하는 것입니다 함께이 자동으로 구성 할 수 있습니다, 그러나 이것은 항상 옵션을 선택하지 않습니다.

관련 문제