ความแตกต่างระหว่างการควบคุมแคช: max-age = 0 และไม่แคช?


คำตอบ:


598

ฉันมีคำถามเดียวกันนี้และพบข้อมูลบางอย่างในการค้นหาของฉัน (คำถามของคุณเป็นหนึ่งในผลลัพธ์) นี่คือสิ่งที่ฉันกำหนด ...

มีสองด้านที่Cache-Controlส่วนหัว ด้านหนึ่งคือจุดที่เว็บเซิร์ฟเวอร์สามารถส่งได้ (aka. "เซิร์ฟเวอร์ต้นทาง") อีกด้านหนึ่งคือตำแหน่งที่เบราว์เซอร์สามารถส่งได้ (aka. "user agent")


เมื่อส่งจากเซิร์ฟเวอร์ต้นทาง

ฉันเชื่อว่าmax-age=0เพียงแค่บอกแคช (และตัวแทนผู้ใช้) การตอบสนองค้างจาก get-go และดังนั้นพวกเขาควรตรวจสอบการตอบสนอง (เช่นกับIf-Not-Modifiedส่วนหัว) ก่อนที่จะใช้สำเนาแคชในขณะที่no-cacheบอกพวกเขาพวกเขาจะต้องตรวจสอบก่อนใช้แคช สำเนา. จาก14.9.1 Cacheable คืออะไร :

ไม่มีแคช

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

กล่าวอีกนัยหนึ่งแคชอาจเลือกใช้การตอบสนองค้าง (แม้ว่าฉันเชื่อว่าต้องเพิ่มWarningส่วนหัว) แต่no-cacheกล่าวว่าพวกเขาไม่ได้รับอนุญาตให้ใช้การตอบกลับค้างไม่ว่าจะเกิดอะไรขึ้น บางทีคุณอาจจะต้องการควร -revalidate พฤติกรรมเมื่อสถิติเบสบอลจะเกิดขึ้นในหน้า แต่คุณต้องการต้องการต้องพฤติกรรม -revalidate เมื่อคุณได้สร้างการตอบสนองต่อการสั่งซื้อ E-commerce

แม้ว่าคุณถูกต้องในความคิดเห็นของคุณเมื่อคุณพูดว่าไม่ควรจะป้องกันไม่ให้การจัดเก็บก็จริงอาจจะมีความแตกต่างอีกเมื่อใช้no-cache no-cacheฉันเจอหน้าหนึ่งคำสั่งควบคุมแคชอย่างชัดเจนว่า (ฉันไม่สามารถรับรองความถูกต้องได้):

ในทางปฏิบัติ IE และ Firefox ได้เริ่มรักษาคำสั่ง no-cache ราวกับว่ามันสั่งให้เบราว์เซอร์ที่จะไม่แคชแม้แต่หน้า เราเริ่มสังเกตพฤติกรรมนี้เมื่อประมาณหนึ่งปีที่แล้ว เราสงสัยว่าการเปลี่ยนแปลงนี้ได้รับแจ้งจากการใช้คำสั่งนี้อย่างกว้างขวาง (และไม่ถูกต้อง) เพื่อป้องกันการแคช

...

โปรดสังเกตว่าการล่าช้า "การควบคุมแคช: ไม่มีแคช" ก็เริ่มทำตัวเหมือนคำสั่ง "ไม่มีร้านค้า"

เช่นกันก็จะปรากฏขึ้นกับผมว่าโดยทั่วไปจะหมายถึงสิ่งเดียวกันเช่นCache-Control: max-age=0, must-revalidate Cache-Control: no-cacheดังนั้นอาจเป็นวิธีที่จะได้รับพฤติกรรมที่ต้องประเมินno-cacheในขณะที่หลีกเลี่ยงการย้ายถิ่นที่ชัดเจนของno-cacheการทำสิ่งเดียวกันเช่นno-store(เช่นไม่มีการแคชใด ๆ )?


เมื่อส่งโดยตัวแทนผู้ใช้

ฉันเชื่อว่าคำตอบของ shahkalpeshใช้กับด้านตัวแทนผู้ใช้ นอกจากนี้คุณยังสามารถดู13.2.6 disambiguating หลายคำตอบ

หากตัวแทนผู้ใช้ส่งการร้องขอด้วยCache-Control: max-age=0(aka. "การตรวจสอบความถูกต้องแบบ end-to-end") แต่ละแคชที่อยู่ระหว่างทางจะทำการตรวจสอบรายการแคชใหม่ (เช่นด้วยIf-Not-Modifiedส่วนหัว) จนถึงเซิร์ฟเวอร์ต้นทาง หากการตอบกลับเป็น 304 (ไม่ได้แก้ไข) คุณสามารถใช้เอนทิตีแคชได้

ในทางกลับกันการส่งคำขอด้วยCache-Control: no-cache(aka. "end-to-end reload") จะไม่ทำการตรวจสอบความถูกต้องอีกครั้งและเซิร์ฟเวอร์จะต้องไม่ใช้สำเนาแคชเมื่อตอบกลับ


9
การควบคุมแคช: max-age = 0, ต้องตรวจสอบความถูกต้องอีกครั้ง, พร็อกซี - การตรวจสอบความถูกต้องอีกครั้งจะเป็นสิ่งที่เทียบเท่ากับแคชแบบไม่แน่นอนหรือไม่
Didier A.

1
คำตอบที่ดีฉันไปอ่านบทความเว็บไซต์ของคุณ แต่หน้าไม่ถูกต้อง palisade.plynt.com/issues/2008Jul/cache-control-attributes
Craig London

7
ขอบคุณ @CraigLondon ฉันเปลี่ยนเส้นทางไปเป็นเวอร์ชันแคช
Michael Krebs

2
must-revalidateไม่ได้หมายถึงเป็นเช่นเดียวกับหรือno-cache no-storeบายพาสหลังแคชทั้งหมด แต่อดีตเพิ่งบอกว่าแคชจะต้องตรวจสอบเสมอเพื่อความสดใหม่ แต่ถ้ามันยังคงเป็นปัจจุบันก็สามารถนำมาใช้เพื่อประหยัดแบนด์วิดธ์ การบังคับหลังดาวน์โหลดแบบ end-to-end เต็มตลอดเวลารับแบนด์วิดธ์ที่ไม่จำเป็นและการตอบสนองล่าช้า
Patanjali

3
@Patanjali no-cache ไม่ "บายพาสแคชทั้งหมด" หรือ "บังคับให้ดาวน์โหลดแบบ end-to-end แบบเต็มตลอดเวลา" อย่างน้อยก็ไม่ได้อยู่ในเบราว์เซอร์ทั้งหมด ข้อมูลจำเพาะบอกว่าเบราว์เซอร์นั้นจะต้องตรวจสอบแคช
Franklin Yu

57

max-age = 0

นี่เทียบเท่ากับการคลิกรีเฟรชซึ่งหมายความว่าให้สำเนาล่าสุดแก่ฉันยกเว้นว่าฉันมีสำเนาล่าสุดแล้ว

ไม่มีแคช

นี่คือกดปุ่ม Shift ค้างไว้ในขณะที่คลิกรีเฟรชซึ่งหมายความว่าเพียงทำซ้ำทุกสิ่ง


31
สิ่งนี้ไม่ถูกต้อง shift-refresh เป็นรีเฟรชที่ยากซึ่งคล้ายกับno-store
Michael

3
ตรวจสอบแล้วใน Firefox 45.0 ซึ่งเช่น Chrome 49.0.2623.87 m ก็ส่ง "Pragma: no-cache" เมื่อ Shift + Refreshing
Cees Timmerman

34

คำถามเก่าตอนนี้ แต่ถ้าใครมาเจอสิ่งนี้ผ่านการค้นหาอย่างที่ฉันทำปรากฏว่า IE9 จะใช้สิ่งนี้เพื่อกำหนดค่าพฤติกรรมของทรัพยากรเมื่อใช้ปุ่มย้อนกลับและไปข้างหน้า เมื่อใช้max-age = 0เบราว์เซอร์จะใช้เวอร์ชันล่าสุดเมื่อดูทรัพยากรจากการกดย้อนกลับ / ไปข้างหน้า หากไม่มีการใช้แคชทรัพยากรจะถูกดึงออกมา

รายละเอียดเพิ่มเติมเกี่ยวกับ IE9 แคชสามารถมองเห็นเกี่ยวกับเรื่องนี้MSDN บล็อกโพสต์แคช


4
ในทำนองเดียวกัน IE 8 พบปัญหา "ไม่สามารถดาวน์โหลด" ได้ทุกประเภทเมื่อไม่มีการใช้แคชผ่าน https ความละเอียดที่แนะนำบางครั้งรวมถึงการเปลี่ยนส่วนหัวเป็น max-age = 0
Robert Christ

28

ในการทดสอบล่าสุดของฉันกับ IE8 และ Firefox 3.5 ดูเหมือนว่าทั้งสองเป็นไปตาม RFC อย่างไรก็ตามพวกเขาแตกต่างใน "มิตร" ของพวกเขาไปยังเซิร์ฟเวอร์ต้นทาง IE8 ถือว่าการตอบสนองที่มีความหมายเช่นเดียวกับno-cache max-age=0,must-revalidateอย่างไรก็ตาม Firefox 3.5 นั้นดูเหมือนว่าจะno-cacheเทียบเท่ากับno-storeซึ่งถือว่าเป็นเรื่องประสิทธิภาพและการใช้แบนด์วิดท์

โดยค่าเริ่มต้น Squid Cache นั้นดูเหมือนว่าจะไม่เก็บอะไรไว้กับno-cacheส่วนหัวเหมือนกับ Firefox

คำแนะนำของฉันคือการตั้งค่าpublic,max-age=0สำหรับทรัพยากรที่ไม่ไวต่อความรู้สึกที่คุณต้องการตรวจสอบความสดใหม่ในทุก ๆ การร้องขอ แต่ก็ยังช่วยให้ประสิทธิภาพและแบนด์วิดธ์ได้รับประโยชน์จากการแคช private,max-age=0สำหรับรายการต่อผู้ใช้ที่มีการพิจารณาเดียวกันการใช้งาน

ฉันจะหลีกเลี่ยงการใช้งานของno-cacheทั้งหมดที่ดูเหมือนว่าจะได้รับการ bastardized no-storeเบราว์เซอร์บางและแคชที่นิยมเทียบเท่ากับการทำงานของ

นอกจากนี้อย่าเลียนแบบ Akamai และ Limelight ในขณะที่พวกเขาดำเนินการแคชอาร์เรย์ขนาดใหญ่เป็นธุรกิจหลักของพวกเขาและควรเป็นผู้เชี่ยวชาญ แต่จริง ๆ แล้วพวกเขามีความสนใจที่จะทำให้ข้อมูลเพิ่มเติมถูกดาวน์โหลดจากเครือข่ายของพวกเขา Google อาจไม่ใช่ตัวเลือกที่ดีสำหรับการลอกเลียนแบบ ดูเหมือนว่าพวกเขาจะใช้max-age=0หรือno-cacheสุ่มขึ้นอยู่กับทรัพยากร


2
คำตอบที่ดีที่สุดสำหรับเนื้อหาที่ป้องกันด้วยรหัสผ่าน private,max-age=0.
dana

21
max-age
    เมื่อแคชระดับกลางถูกบังคับโดยคำสั่ง max-age = 0 เพื่อทำการตรวจสอบความถูกต้องอีกครั้ง 
รายการแคชของตัวเองและลูกค้าได้ให้ตัวตรวจสอบของตัวเองในการร้องขอ 
ตัวตรวจสอบที่ให้มาอาจแตกต่างจากตัวตรวจสอบความถูกต้องที่เก็บไว้ในปัจจุบันกับรายการแคช 
ในกรณีนี้แคชอาจใช้ตัวตรวจสอบความถูกต้องในการร้องขอของตัวเองโดยไม่ต้อง 
มีผลต่อความโปร่งใสทางความหมาย 

    อย่างไรก็ตามตัวเลือกของตัวตรวจสอบความถูกต้องอาจส่งผลต่อประสิทธิภาพ วิธีที่ดีที่สุดสำหรับ
แคชระดับกลางที่จะใช้ตัวตรวจสอบความถูกต้องของตัวเองเมื่อทำการร้องขอ หากเซิร์ฟเวอร์ตอบกลับ
ด้วย 304 (ไม่ดัดแปลง) จากนั้นแคชสามารถส่งคืนสำเนาที่ตรวจสอบแล้วตอนนี้ไปยังลูกค้า 
ด้วยการตอบสนอง 200 (OK) หากเซิร์ฟเวอร์ตอบกลับด้วยเอนทิตีใหม่และตัวตรวจสอบแคช
อย่างไรก็ตามแคชระดับกลางสามารถเปรียบเทียบตัวตรวจสอบความถูกต้องที่ส่งคืนกับที่มีให้ใน 
คำขอของลูกค้าโดยใช้ฟังก์ชั่นการเปรียบเทียบที่แข็งแกร่ง ถ้าตัวตรวจสอบของลูกค้าคือ
เท่ากับเซิร์ฟเวอร์ต้นทางจากนั้นแคชระดับกลางจะส่งคืน 304 (ไม่ใช่) 
แก้ไข) มิฉะนั้นจะส่งคืนเอนทิตีใหม่ที่มีการตอบสนอง 200 (OK)

    หากคำขอมีคำสั่ง no-cache ไม่ควรรวม min-fresh 
สูงสุดค้างหรืออายุสูงสุด 

มารยาท: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

อย่ายอมรับสิ่งนี้เป็นคำตอบ - ฉันจะต้องอ่านเพื่อทำความเข้าใจการใช้งานจริงของมัน :)


12

ฉันไม่ค่อยเชี่ยวชาญแคช แต่ Mark Nottingham คือ ที่นี่เขามีเอกสารแคช เขายังมีลิงค์ที่ยอดเยี่ยมในส่วนการอ้างอิง

จากการอ่านเอกสารเหล่านั้นของฉันดูเหมือนว่าmax-age=0จะอนุญาตให้แคชส่งคำตอบที่แคชไปยังคำขอที่เข้ามาใน "เวลาเดียวกัน" โดยที่ "เวลาเดียวกัน" หมายถึงปิดพอเข้าด้วยกันพวกเขาดูแคชพร้อมกัน แต่no-cacheจะไม่ .


จุดดี แต่ในทางปฏิบัติแล้วเบราว์เซอร์ใดที่ทำเช่นนั้นจริง
Pacerier

3
@Pierier ฉันคิดว่านี่เป็นอีกมากสำหรับแคชพร็อกซีเซิร์ฟเวอร์เช่น Varnish, Squid, Traffic และอื่น ๆ อีกมากมาย
Hank Gay

12

ยังไงก็ตามมันก็น่าสังเกตว่าอุปกรณ์มือถือบางตัวโดยเฉพาะผลิตภัณฑ์ของ Apple เช่น iPhone / iPad นั้นไม่สนใจส่วนหัวอย่างไม่มีแคชไม่มีร้านค้าหมดอายุ: 0 หรืออะไรก็ตามที่คุณอาจพยายามบังคับให้พวกเขาไม่ได้ใช้ซ้ำ หน้าแบบฟอร์ม

สิ่งนี้ทำให้เราไม่มีอาการปวดหัวเมื่อเราพยายามทำให้ปัญหาของ iPad ของผู้ใช้บอกว่าถูกทิ้งให้หลับไปบนหน้าเว็บที่พวกเขาเข้าถึงผ่านกระบวนการแบบฟอร์มพูดขั้นตอนที่ 2 ใน 3 แล้วอุปกรณ์จะไม่สนใจร้านค้า / คำสั่งแคชและเท่าที่ฉันสามารถบอกได้เพียงแค่ใช้สิ่งที่เป็นภาพรวมเสมือนจริงของหน้าเว็บจากสถานะสุดท้ายของมันนั่นคือการเพิกเฉยสิ่งที่มันบอกอย่างชัดเจนและไม่เพียง แต่การถ่ายหน้าที่ไม่ควรเก็บไว้ และเก็บไว้โดยไม่ตรวจสอบจริง ๆ อีกครั้งซึ่งนำไปสู่ปัญหาเซสชันแปลก ๆ ทุกประเภทรวมถึงสิ่งอื่น ๆ

ฉันแค่เพิ่มสิ่งนี้ในกรณีที่มีใครบางคนเข้ามาและไม่สามารถเข้าใจได้ว่าทำไมพวกเขาถึงได้รับข้อผิดพลาดในเซสชั่นโดยเฉพาะอย่างยิ่งไอโฟนและไอแพด

ฉันได้ทำการทดสอบดีบักเกอร์ที่กว้างขวางพอสมควรกับปัญหานี้และนี่คือข้อสรุปของฉันอุปกรณ์ละเว้นคำสั่งเหล่านี้อย่างสมบูรณ์

แม้ในการใช้งานปกติฉันพบว่าโทรศัพท์มือถือบางรุ่นยังไม่สามารถตรวจสอบเวอร์ชั่นใหม่ได้โดยบอกว่า Expires: 0 จากนั้นตรวจสอบวันที่แก้ไขล่าสุดเพื่อตรวจสอบว่าควรได้รับโทรศัพท์ใหม่หรือไม่

มันไม่ได้เกิดขึ้นดังนั้นสิ่งที่ฉันถูกบังคับให้ทำคือเพิ่มสตริงการสืบค้นลงในไฟล์ css / js ที่ฉันต้องการเพื่อบังคับให้มีการอัปเดตซึ่งหลอกให้อุปกรณ์เคลื่อนที่โง่ ๆ คิดว่าเป็นไฟล์ที่ไม่มีอยู่เช่น: ของฉัน .css? v = 1 จากนั้น v = 2 สำหรับการอัปเดต css / js ส่วนใหญ่ใช้งานได้

เบราว์เซอร์ของผู้ใช้ยังคงเป็นไปตามค่าเริ่มต้น ณ ปี 2559 ตามที่ฉันค้นพบอย่างต่อเนื่อง (เราทำการเปลี่ยนแปลงและอัปเดตในเว็บไซต์ของเราเป็นจำนวนมาก) ไม่สามารถตรวจสอบวันที่แก้ไขล่าสุดในไฟล์ดังกล่าวได้ วิธีการสตริงแก้ไขปัญหาที่ นี่คือสิ่งที่ฉันสังเกตเห็นกับลูกค้าและคนในสำนักงานที่มักจะใช้ค่าเริ่มต้นผู้ใช้ขั้นพื้นฐานบนเบราว์เซอร์และไม่มีความรู้เกี่ยวกับปัญหาการแคชกับ css / js ฯลฯ เกือบจะล้มเหลวในการเปลี่ยน css / js ใหม่ ซึ่งหมายความว่าค่าเริ่มต้นสำหรับเบราว์เซอร์ของพวกเขาส่วนใหญ่เป็น MSIE / Firefox ไม่ได้ทำในสิ่งที่พวกเขาบอกให้ทำพวกเขาไม่สนใจการเปลี่ยนแปลงและละเว้นวันที่แก้ไขล่าสุดและไม่ตรวจสอบแม้กับ Expires: 0 ตั้งอย่างชัดเจน

นี่เป็นหัวข้อที่ดีที่มีข้อมูลทางเทคนิคที่ดีมากมาย แต่ก็เป็นสิ่งสำคัญที่จะต้องทราบว่าการสนับสนุนสิ่งนี้แย่มากในอุปกรณ์มือถือโดยเฉพาะ ทุกๆสองสามเดือนฉันต้องเพิ่มเลเยอร์การป้องกันที่มากขึ้นจากความล้มเหลวในการทำตามคำสั่งส่วนหัวที่ได้รับหรือเพื่อขัดจังหวะคำสั่งเหล่านั้นอย่างถูกต้อง


css และ js เป็นตัวเลือกที่เหมาะสมสำหรับการแคชเช่นเดียวกับในระบบการผลิตพวกเขาไม่ควรเปลี่ยนแปลงบ่อยนัก อย่างไรก็ตามการมีแคชสำหรับพวกเขาในขณะที่การพัฒนาเป็นความเจ็บปวดเนื่องจากกิจกรรมดังกล่าวอาจต้องใช้แคชที่บังคับใช้บ่อยครั้ง แต่หากไม่สามารถใช้การตั้งค่าที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกันข้อกำหนดการผลิตควรเป็นแบบอย่างเนื่องจากมีผลมากที่สุดเนื่องจากการเข้าถึงที่มีขนาดใหญ่กว่าจะประหยัดแบนด์วิดท์เมื่อเทียบกับ Ctrl-F5 ไม่กี่รีเฟรช ทำ. อย่างไรก็ตามการสืบค้นข้อมูลตามเวลาจริงต้องการให้การควบคุมแคชทำงานได้อย่างถูกต้อง
Patanjali

0

สิ่งหนึ่งที่ (ไม่น่าแปลกใจ) ที่ไม่ได้กล่าวถึงคือคำขอสามารถระบุอย่างชัดเจนว่าจะยอมรับข้อมูลเก่าโดยใช้max-staleคำสั่ง ในกรณีนั้นหากเซิร์ฟเวอร์ตอบสนองmax-age=0แคชจะพิจารณาเพียงแค่การตอบสนองค้างและจะมีอิสระที่จะใช้เพื่อตอบสนองคำขอของลูกค้า [ซึ่งขอข้อมูลที่อาจมีข้อมูลเก่า] ในทางตรงกันข้ามหากเซิร์ฟเวอร์ส่งno-cacheว่าลูกค้าที่ร้องขอจริง ๆ (ด้วยmax-stale) สำหรับข้อมูลเก่าเนื่องจากแคชต้องตรวจสอบความถูกต้องอีกครั้ง


-2

ความแตกต่างคือไม่มีแคช (ไม่มีร้านค้าบน Firefox) ป้องกันการแคชทุกชนิด สิ่งนี้มีประโยชน์ในการป้องกันหน้าเว็บที่มีเนื้อหาที่ปลอดภัยถูกเขียนลงบนดิสก์และสำหรับหน้าเว็บที่ควรได้รับการอัปเดตอยู่เสมอแม้ว่าจะกลับมาเยี่ยมชมอีกครั้งด้วยปุ่มย้อนกลับ

max-age = 0 บ่งชี้ว่ารายการแคชเก่าและต้องการการตรวจสอบความถูกต้องอีกครั้ง แต่ไม่ได้ป้องกันการแคช บ่อยครั้งที่เบราว์เซอร์ตรวจสอบความถูกต้องของทรัพยากรเพียงครั้งเดียวต่อเซสชันของเบราว์เซอร์ดังนั้นเนื้อหาอาจไม่ได้รับการอัปเดตจนกว่าจะมีการเยี่ยมชมไซต์ในเซสชันใหม่

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


9
เท่าที่ฉันเข้าใจ 'no-cache' ไม่ควรป้องกันการจัดเก็บ ('no-store' เป็นวิธีที่เหมาะสมในการบรรลุเป้าหมาย) เบราว์เซอร์บางแห่งตีความ 'no-cache' เป็น 'no-store' หรือไม่? นั่นจะอธิบายว่าเหตุใดจึงใช้ 'max-age = 0' แทน 'no-cache'
rubyruy

3
นี่เป็นสิ่งที่ผิด ดูด้านบน. เบราว์เซอร์ / เซิร์ฟเวอร์บางตัวอาจเลือกที่จะไม่ใช้แคชเป็นแบบไม่มีการจัดเก็บ แต่ไม่ทั้งหมด
Jeremy Kauffman

4
วิธีที่ปลอดภัยเพียงอย่างเดียวคือการใช้max-age=0หากคุณหมายถึงอนุญาตให้แคชได้ แต่ทรัพยากรควรได้รับการตรวจสอบซ้ำและno-storeหากคุณไม่ต้องการให้การตอบสนองถูกเก็บไว้ในแคชเลย no-cacheถูกกำหนดให้สุ่มหมายถึงทั้งสองเหล่านี้ขึ้นอยู่กับผู้ขายตัวแทนของผู้ใช้และจำนวนรุ่นและโปรโตคอลการถ่ายโอน
Mikko Rantalainen

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