เบราว์เซอร์“ F5” และ“ Ctrl + F5” รีเฟรชสร้างอะไรได้บ้าง


394

มีมาตรฐานสำหรับการกระทำF5และการCtrl + F5กระตุ้นในเว็บเบราว์เซอร์หรือไม่?

ฉันเคยทำการทดลองใน IE6 และ Firefox 2.x การF5 รีเฟรชจะทริกเกอร์คำขอ HTTP ที่ส่งไปยังเซิร์ฟเวอร์ด้วยIf-Modified-Sinceส่วนหัวในขณะที่Ctrl + F5จะไม่มีส่วนหัวดังกล่าว ในความเข้าใจของฉันF5 จะพยายามใช้เนื้อหาที่แคชมากที่สุดเท่าที่จะเป็นไปได้ในขณะที่Ctrl + F5 ตั้งใจจะละทิ้งเนื้อหาที่แคชทั้งหมดและเพียงดึงเนื้อหาทั้งหมดจากเซิร์ฟเวอร์อีกครั้ง

แต่วันนี้ฉันสังเกตเห็นว่าในเบราว์เซอร์ล่าสุดบางส่วน (Chrome, IE8) มันไม่ทำงานในลักษณะนี้อีกต่อไป ทั้งF5และCtrl + 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 คุณจะบอกเบราว์เซอร์ว่าจะไม่ใช้แคช แต่จะเกิดอะไรขึ้นในคำขอถัดไปในหน้าเดียวกัน ฉันหมายความว่าคุณสามารถดูหน้าเว็บที่เก่ากว่าหลังจากที่คุณเห็นหน้าเก่าที่สุดได้หรือไม่ หากฉันเห็นเวอร์ชัน 1 ของหน้าเนื่องจากมีการแคช แต่มีอยู่แล้วในเวอร์ชัน 2 ฉันเข้าใจว่าการกดปุ่ม ctrl + f5 จะทำให้ฉันเห็น version2 จากนั้นฉันปิดเบราว์เซอร์และเปิดหน้านั้นอีกครั้งฉันจะเห็นเวอร์ชัน 1 หรือยังเห็น version2 อยู่หรือไม่ ขอบคุณ
molerus

525

มันขึ้นอยู่กับเบราว์เซอร์ แต่มันทำงานในลักษณะเดียวกัน

ฉันได้ทดสอบ FF, IE7, Opera และ Chrome แล้ว

F5โดยปกติจะอัปเดตหน้าเฉพาะในกรณีที่มีการแก้ไข เบราว์เซอร์มักจะพยายามใช้แคชทุกประเภทให้มากที่สุดและเพิ่มส่วนหัว "If-modified-ตั้งแต่" ลงในคำขอ Opera แตกต่างกันโดยส่ง "Cache-Control: no-cache"

CTRL- F5ใช้เพื่อบังคับการอัปเดตโดยไม่สนใจแคชใด ๆ IE7 เพิ่ม "Cache-Control: no-cache" เช่นเดียวกับ FF ซึ่งเพิ่ม "Pragma: no-cache" Chrome ทำ "If-modified-ตั้งแต่" ปกติและ Opera จะเพิกเฉยต่อคีย์

ถ้าผมจำไม่ผิดมันเป็น Netscape ซึ่งเป็นเบราว์เซอร์แรกที่จะเพิ่มการสนับสนุนสำหรับแคชควบคุมโดยการเพิ่ม "Pragma: ไม่มีแคช" เมื่อคุณกด-CTRLF5

แก้ไข:อัปเดตตาราง

ตารางด้านล่างนี้ได้รับการอัพเดตพร้อมข้อมูลว่าจะเกิดอะไรขึ้นเมื่อคลิกปุ่มรีเฟรชของเบราว์เซอร์ (หลังจากที่Joel Coehoornร้องขอ) และ "max-age = 0" Cache-control-header

อัปเดตตารางเมื่อวันที่ 27 กันยายน 2553

┌────────────┬───────────────────────────────────────────────┐
│  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)
  • Opera 10.62 และ 9.61 (WINXP)

หมายเหตุ:

  1. เวอร์ชัน 3.0.6 ส่ง I และ C แต่ 3.1.6 เปิดหน้าในแท็บใหม่โดยสร้างคำขอตามปกติด้วย "I" เท่านั้น

  2. รุ่น 10.62 ไม่ทำอะไรเลย 9.61 อาจทำ C เว้นแต่ว่ามันเป็นตัวพิมพ์ผิดในตารางเก่าของฉัน

หมายเหตุเกี่ยวกับ Chrome 6.0.472 : หากคุณทำการโหลดซ้ำแบบบังคับ (เช่นCTRL- F5) มันจะทำงานเหมือนมีการทำเครื่องหมาย URL ภายในเพื่อทำการรีโหลดแบบบังคับเสมอ การตั้งค่าสถานะจะถูกล้างหากคุณไปที่แถบที่อยู่แล้วกด Enter


5
@Joel Coehoorn: อัพเดทตารางด้วยการคลิกที่ปุ่มรีเฟรช ต้องรักตารางกราฟิก ASCII ใช่ไหม การเข้ารหัสสีเป็นเพียงผลข้างเคียงของการใช้รหัสสี
บาง

11
คุณไม่สามารถทำเป็นตาราง HTML ที่เหมาะสมได้ใช่ไหม
John Topley

13
FYI - คำตอบนี้ได้รับการอ้างอิงจริงในการพัฒนาโครเมี่ยม / กระดานติดตามข้อผิดพลาด: code.google.com/p/chromium/issues/detail?id=1906
Kip

18
@John Topley: ไม่อนุญาตให้ใช้ตารางดังนั้นคำตอบคือไม่
บาง

1
ใช้งานได้ดีเยี่ยมบนโต๊ะนี้ - สิ่งนี้เป็นของ quirksmode +1 ฉันสงสัยว่านอกจากนี้ยังมีการเปลี่ยนแปลงในสิ่งที่ส่วนหัวมีการใช้ทรัพยากรที่ร้องขอภายในหน้าสดชื่นเช่นภาพ stylesheets ฯลฯ ...
เจมส์ฮาร์ท

68

ฉันใช้หน้าเข้ากันได้ข้ามเบราว์เซอร์เพื่อทดสอบพฤติกรรมการรีเฟรชของเบราว์เซอร์ (นี่คือซอร์สโค้ด ) และรับผลลัพธ์คล้ายกับ @some แต่สำหรับเบราว์เซอร์สมัยใหม่:

ป้อนคำอธิบายรูปภาพที่นี่


ลิงก์ในหน้าของคุณเสียฉันจะแก้ไขลิงก์ในคำตอบ แต่ลิงก์จำนวนมากจากหน้านั้นเสีย podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
Juan Mendes

ขออภัยเกี่ยวกับการย้ายข้อมูลบล็อก ลิงก์จะได้รับการแก้ไขโดยเร็วในตอนนี้ - โปรดไปที่ที่เก็บ github และตัวอย่างการดาวน์โหลด
Pavel Podlipensky

ลิงก์ยังใช้งานไม่ได้ การโยกย้ายยังไม่เสร็จ?
bernardn

คุณช่วยอัพเดตคำตอบของคุณด้วยเบราว์เซอร์รุ่นปัจจุบันโดยเฉพาะมือถือและเดสก์ท็อป Safari, @PavelPodlipensky ได้หรือไม่?
Greg Dubicki

9

อย่างน้อยใน Firefox (v3.5) ดูเหมือนว่าแคชจะถูกปิดการใช้งานแทนที่จะถูกล้างออก หากมีภาพอินสแตนซ์เดียวกันหลายหน้ามันจะถูกถ่ายโอนหลายครั้ง นั่นก็เป็นกรณีสำหรับimgแท็กที่เพิ่มในภายหลังผ่าน Ajax / JavaScript

ดังนั้นในกรณีที่คุณสงสัยว่าทำไมเบราว์เซอร์ที่ช่วยให้การดาวน์โหลดน้อยเดียวกันไอคอนไม่กี่ร้อยครั้งในการรีเฟรชอัตโนมัติเว็บไซต์อาแจ็กซ์ของคุณก็เป็นเพราะคุณโหลดหน้าแรกโดยใช้-CTRLF5


3

IE7 / 8/9 ดูเหมือนจะทำงานแตกต่างกันไปขึ้นอยู่กับว่าหน้านั้นโฟกัสหรือไม่

หากคุณคลิกที่หน้าและCTRL+ F5จากนั้น "Cache-Control: no-cache" จะรวมอยู่ในส่วนหัวของคำขอ หากคุณคลิกในแถบที่ตั้ง / ที่อยู่แล้วกดCTRL+ F5ไม่ใช่


1

เมื่อผู้ใช้กดF5แม้ว่าคำขอใหม่จะไปที่เว็บเซิร์ฟเวอร์และรับการตอบกลับสำหรับคำขอด้วยเช่นกัน แต่เมื่อส่วนหัว responce ถูกแยกวิเคราะห์มันจะตรวจสอบข้อมูลที่จำเป็นในแคชเบราว์เซอร์ หากข้อมูลที่ต้องการในแคชยังไม่หมดอายุข้อมูลนั้นจะถูกกู้คืนจากในแคชเอง

เมื่อผู้ใช้คลิกCTRL- F5แม้กระทั่งคำขอใหม่ก็จะไปที่เว็บเซิร์ฟเวอร์และรับการตอบกลับ แต่ในครั้งนี้เมื่อส่วนหัว responce ถูกแยกวิเคราะห์มันจะไม่ตรวจสอบข้อมูลที่จำเป็นในแคชและนำเซิร์ฟเวอร์ฟอร์มข้อมูลที่อัปเดตทั้งหมดเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.