브라우저의 "F5"및 "Ctrl + F5"새로 고침은 어떤 요청을 생성합니까?


394

웹 브라우저에서 어떤 동작 F5Ctrl + F5트리거에 대한 표준이 있습니까?

한 번 IE6와 Firefox 2.x에서 실험했습니다. F5 새로 고침은 함께 서버로 전송 된 HTTP 요청을 트리거 할 If-Modified-Since때, 헤더 Ctrl + F5와 같은 헤더가없는 것입니다. 필자는 이해할 수있는 한 F5 캐시 된 내용을 최대한 활용하려고 노력하면서 Ctrl + F5 모든 캐시 된 내용을 버리고 서버에서 모든 내용을 다시 검색하려고합니다.

그러나 오늘, 나는 최신 브라우저 중 일부 (Chrome, IE8)에서 더 이상이 방식으로 작동하지 않는 것으로 나타났습니다. 모두 F5Ctrl + F5전송 If-Modified-Since헤더를.

그렇다면 이것이 어떻게 작동합니까 (또는 표준이없는 경우) 주요 브라우저는 이러한 새로 고침 기능을 구현하는 방법이 어떻게 다른가요?


10
FWIW : 이것은 확실히 수퍼 유저 주제 일 있지만, 원래 질문했을 때 다소 최종 사용자 중심으로 의도 된 것일 수도 있지만,이 시점에서 프로그래머와 웹 개발자가 응답하고 참조한 것으로 여기에 남겨 두어야합니다. . SU는 ...이 이미 여러 다른 더 많은 최종 사용자 중심의 버전을 가지고 있으며, 그것을 필요로하지 않는다
Shog9

답변:


313

일반적으로 말하면:

F5캐시에서 페이지를로드 할 수 있기 때문에 내용이 변경 되더라도 동일한 페이지를 제공 할 수 있습니다. 그러나 Ctrl- F5캐시를 강제로 새로 고치면 내용이 변경되면 새 내용을 얻을 수 있습니다.


86
Thi는 정확하지만 Ctrl + F5를 사용하면 브라우저가 캐시를 버리고 서버에서 새를 요청하지만 서버는 캐시 없음 헤더를 무시하고 서버 측 캐시 된 페이지를 제공 할 수 있습니다. 따라서 서버가 캐시 없음 헤더를 무시하면 Ctrl + F5조차도 이전 버전의 페이지를 반환 할 수 있습니다.
AaronLS

F5는 페이지를 새로 고칩니다-CTRL + F5는 '하드'새로 고침을 수행합니다.
Dimitri Dewaele

또한 주어진 경우 Ctrl-F5는 양식을 제출합니다.
jawo

ctrl + f5를 누르면 브라우저에서 캐시를 사용하지 말라고하지만 동일한 페이지에 대한 후속 요청에서는 어떻게됩니까? 가장 오래된 페이지를 본 후 이전 버전의 페이지를 볼 수 있습니까? 캐시되었지만 페이지 2가 이미 있기 때문에 페이지의 버전 1이 표시되는 경우 ctrl + f5를 누르면 버전 2가 표시됩니다. 그런 다음 브라우저를 닫고 해당 페이지를 다시 엽니 다. ¿ 버전 1 또는 버전 2가 계속 표시됩니까? 감사.
molerus

525

브라우저에 달려 있지만 비슷한 방식으로 동작합니다.

FF, IE7, Opera 및 Chrome을 테스트했습니다.

F5일반적으로 페이지가 수정 된 경우에만 업데이트합니다. 브라우저는 일반적으로 가능한 한 모든 유형의 캐시를 사용하려고 시도하고 요청에 "If-modified-since"헤더를 추가합니다. Opera는 "Cache-Control : no-cache"를 전송하여 다릅니다.

CTRL- F5캐시를 무시하고 강제로 업데이트하는 데 사용됩니다. IE7은 FF와 마찬가지로 "Cache-Control : no-cache"를 추가하고 "Pragma : no-cache"도 추가합니다. Chrome은 정상적인 "If-modified-since"를 수행하고 Opera는 키를 무시합니다.

내가 올바르게 기억한다면 Netscape는 CTRL- 를 눌렀을 때 "Pragma : No-cache"를 추가하여 캐시 제어에 대한 지원을 추가 한 최초의 브라우저였습니다 F5.

편집 : 업데이트 된 테이블

아래 표는 브라우저의 새로 고침 버튼을 클릭했을 때 ( Joel Coehoorn 의 요청 후 ) "max-age = 0"Cache-control-header에 대한 정보로 업데이트됩니다.

업데이트 된 테이블, 2010 년 9 월 27 일

┌────────────┬───────────────────────────────────────────────┐
│  UPDATED   │                Firefox 3.x                    │
│27 SEP 2010 │  ┌────────────────────────────────────────────┤
│            │  │             MSIE 8, 7                      │
│ Version 3  │  │  ┌─────────────────────────────────────────┤
│            │  │  │          Chrome 6.0                     │
│            │  │  │  ┌──────────────────────────────────────┤
│            │  │  │  │       Chrome 1.0                     │
│            │  │  │  │  ┌───────────────────────────────────┤
│            │  │  │  │  │    Opera 10, 9                    │
│            │  │  │  │  │  ┌────────────────────────────────┤
│            │  │  │  │  │  │                                │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│          F5│IM│I │IM│IM│C │                                │
│    SHIFT-F5│- │- │CP│IM│- │ Legend:                        │
│     CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since"        │
│      ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache"         │
│    ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache"  │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│      CTRL-R│IM│I │IM│IM│C │ - = ignored                    │
│CTRL-SHIFT-R│CP│- │CP│- │- │                                │
├────────────┼──┼──┼──┼──┼──┤                                │
│       Click│IM│I │IM│IM│C │ With 'click' I refer to a      │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers    │
│  Ctrl-Click│*1│C │CP│IM│C │ refresh-icon.                  │
│   Alt-Click│IM│I │IM│IM│C │                                │
│ AltGr-Click│IM│I │- │IM│- │                                │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘

테스트 된 버전 :

  • Firefox 3.1.6 및 3.0.6 (WINXP)
  • MSIE 8.0.6001 및 7.0.5730.11 (WINXP)
  • Chrome 6.0.472.63 및 1.0.151.48 (WINXP)
  • 오페라 10.62 및 9.61 (WINXP)

노트:

  1. 버전 3.0.6은 I와 C를 전송하지만 3.1.6은 새 탭에서 페이지를 열고 "I"만있는 일반 요청을합니다.

  2. 버전 10.62는 아무것도하지 않습니다. 9.61 이전 테이블의 오타가 아닌 한 C를 수행 할 수 있습니다.

크롬 6.0.472에 대한 참고 : 당신이 (같은 강제 장전을 할 경우 CTRL- F5)는 URL이 내부에 표시되어처럼 항상 강제로 다시로드 할 동작합니다. 주소 표시 줄로 이동하여 Enter 키를 누르면 플래그가 지워집니다.


5
@Joel Coehoorn : 새로 고침 버튼을 클릭하여 테이블을 업데이트했습니다. ASCII 그래픽 테이블을 좋아합니까? 색상 코딩은 코드 색상 코딩의 부작용 일뿐입니다.

11
적절한 HTML 테이블로 할 수 없습니까?
John Topley

13
참고로이 답변은 실제로 크롬 개발 / 버그 추적 보드에서 참조되었습니다 : code.google.com/p/chromium/issues/detail?id=1906
Kip

18
@ John Topley : 테이블은 허용되지 않으므로 대답은 아니오입니다.

1
이 테이블에서 훌륭한 작업-이것은 quirksmode에 속합니다. +1. 이미지, 스타일 시트 등과 같이 새로 고쳐진 페이지 내에서 리소스를 요청하는 데 사용되는 헤더의 변형이 있는지 궁금합니다.
James Hart

68

브라우저의 새로 고침 동작 (여기 소스 코드 ) 을 테스트 하고 @some과 비슷한 결과를 얻지 만 최신 브라우저의 경우 브라우저 간 호환 가능한 페이지를 구현했습니다 .

여기에 이미지 설명을 입력하십시오


귀하의 페이지에있는 링크가 끊어졌고 답변에 링크가 고정되었지만 해당 페이지의 많은 링크가 끊어졌습니다. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
Juan Mendes

죄송합니다. 블로그 마이그레이션 중입니다. 링크는 최대한 빨리 수정 될 것입니다-github 저장소로 이동하여 예제를 다운로드하십시오.
Pavel Podlipensky 2016 년

링크가 여전히 끊어졌습니다. 마이그레이션이 완료되지 않았습니까?
bernardn

최신 버전의 브라우저, 특히 모바일 및 데스크탑 Safari (@PavelPodlipensky)로 답변을 업데이트 할 수 있습니까?
Greg Dubicki

9

최소한 Firefox (v3.5)에서는 캐시 가 단순히 지워지지 않고 비활성화 된 것으로 보입니다 . 한 페이지에 동일한 이미지의 인스턴스가 여러 개있는 경우 여러 번 전송됩니다. 그것은 또한imgAjax / JavaScript를 통해 이후에 추가 태그 .

따라서 자동 새로 고침 Ajax 사이트에서 브라우저가 동일한 작은 아이콘을 몇 백 번 계속 다운로드하는 이유가 궁금한 경우 처음에 CTRL-를 사용하여 페이지를로드했기 때문 F5입니다.


3

IE7 / 8 / 9는 페이지에 포커스가 있는지 여부에 따라 다르게 동작하는 것 같습니다.

페이지를 클릭하고 CTRL+ F5를 클릭하면 "Cache-Control : no-cache"가 요청 헤더에 포함됩니다. 위치 / 주소 표시 줄을 클릭 한 경우 CTRL+ 를 누르 F5십시오.


1

F5새 요청이 웹 서버로 이동하지만 사용자 가 요청에 대한 응답을받을 때 사용자가 누를 때 . 그러나 응답 헤더가 구문 분석되면 브라우저 캐시에서 필요한 정보를 확인합니다. 캐시의 필수 정보가 만료되지 않은 경우 해당 정보가 캐시 자체에서 복원됩니다.

에 사용자가 클릭하면 CTRL- F5그렇다하더라도 새 요청은 웹 서버로 이동하고 responce를 얻을. 그러나 이번에는 응답 헤더가 구문 분석 될 때 캐시에서 필요한 정보를 확인하지 않고 업데이트 된 모든 정보를 서버로 가져옵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.