การ Crawl เดือนธันวาคม: การแคช HTTP

วันจันทร์ที่ 9 ธันวาคม 2024

โปรดอนุญาตให้เราแคชนะ

อินเทอร์เน็ตเติบโตขึ้นในช่วงหลายปีที่ผ่านมา ปริมาณการ Crawl ของ Google ก็เพิ่มขึ้นด้วย แม้ว่าโครงสร้างพื้นฐานการ Crawl ของ Google จะรองรับกลไกการแคชที่แบบฮิวริสติกมาโดยตลอด แต่จำนวนคำขอที่แสดงผลจากแคชในเครื่องก็ลดลง โดย 10 ปีที่แล้วการดึงข้อมูลทั้งหมดมีประมาณ 0.026% แคชได้ ซึ่งก็ถือว่าน้อยอยู่แล้ว แต่ปัจจุบันตัวเลขดังกล่าวลดลงมาอยู่ที่ 0.017%

เหตุใดการแคชจึงสำคัญ

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

โดยเฉพาะอย่างยิ่งหากคุณมีเว็บไซต์ขนาดใหญ่ที่มีเนื้อหาเปลี่ยนแปลงน้อยมากใน URL แต่ละรายการ การอนุญาตให้แคชในเครื่องอาจช่วยให้ระบบทำการ Crawl เว็บไซต์ได้อย่างมีประสิทธิภาพมากขึ้น โครงสร้างพื้นฐานการ Crawl ของ Google รองรับการแคช HTTP แบบฮิวริสติกตามที่ระบุไว้ในมาตรฐานการแคช HTTP โดยเฉพาะอย่างยิ่งผ่านส่วนหัวการตอบกลับ ETag และคำขอ If-None-Match รวมถึงส่วนหัวการตอบกลับ Last-Modified และคำขอ If-Modified-Since

เราขอแนะนําอย่างยิ่งให้ใช้ ETag เนื่องจากมีแนวโน้มที่จะเกิดข้อผิดพลาดและข้อผิดพลาดน้อยกว่า (ค่านี้จะไม่อยู่ในโครงสร้างซึ่งต่างจากค่า Last-Modified) และหากมีตัวเลือกดังกล่าว ให้ตั้งค่าทั้ง 2 รายการ แล้วอินเทอร์เน็ตจะขอบคุณคุณ อาจจะนะ

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

ETag และ If-None-Match

Crawler ของ Google รองรับคำขอแบบมีเงื่อนไขตาม ETag ตามที่ระบุไว้ในมาตรฐานการแคช HTTP กล่าวคือ หากต้องการส่งสัญญาณค่ากำหนดการแคชไปยัง Crawler ของ Google ให้ตั้งค่า Etag เป็นสตริง ASCII ที่กำหนดเอง (โดยปกติจะเป็นแฮชของเนื้อหาหรือหมายเลขเวอร์ชัน แต่อาจเป็นส่วนของ π ก็ได้ ทั้งนี้ขึ้นอยู่กับคุณ) โดยตั้งค่าไม่ให้ซ้ำกันสำหรับการแสดงเนื้อหาที่โฮสต์โดย URL ที่เข้าถึง ตัวอย่างเช่น หากคุณโฮสต์เนื้อหาเดียวกันในเวอร์ชันต่างๆ ภายใต้ URL เดียวกัน (เช่น เวอร์ชันอุปกรณ์เคลื่อนที่และเวอร์ชันเดสก์ท็อป) แต่ละเวอร์ชันอาจมีค่า ETag ที่ไม่ซ้ำกัน

Crawler ของ Google ที่รองรับการแคชจะส่งค่า ETag ที่แสดงผลจากการ Crawl URL ก่อนหน้าใน If-None-Match header หากค่า ETag ที่ Crawler ส่งตรงกับค่าปัจจุบันที่เซิร์ฟเวอร์สร้างขึ้น เซิร์ฟเวอร์ควรแสดงรหัสสถานะ HTTP 304 (ไม่มีการเปลี่ยนแปลง) โดยไม่มีเนื้อหา HTTP การไม่มีเนื้อหา HTTP เป็นส่วนสําคัญเนื่องจากเหตุผล 2 ข้อต่อไปนี้

  • เซิร์ฟเวอร์ของคุณไม่จําเป็นต้องใช้ทรัพยากรการประมวลผลในการสร้างเนื้อหาจริง ซึ่งหมายความว่าคุณประหยัดเงินได้
  • เซิร์ฟเวอร์ของคุณไม่จําเป็นต้องโอนเนื้อหา HTTP ซึ่งหมายความว่าคุณประหยัดเงินได้

ทางฝั่งไคลเอ็นต์ เช่น เบราว์เซอร์ของผู้ใช้หรือ Googlebot จะดึงข้อมูลเนื้อหาภายใต้ URL นั้นจากแคชภายในของไคลเอ็นต์ เนื่องจากไม่มีการโอนข้อมูล การดำเนินการนี้จึงเกิดขึ้นอย่างรวดเร็ว ทำให้ผู้ใช้พึงพอใจและอาจช่วยประหยัดทรัพยากรให้กับผู้ใช้ด้วย

Last-Modified และ If-Modified-Since

เช่นเดียวกับ ETag Crawler ของ Google ยังรองรับคำขอแบบมีเงื่อนไข Last-Modified based ด้วย ตามที่ระบุไว้ในมาตรฐานการแคช HTTP โดยจะทำงานในลักษณะเดียวกับ ETag จากมุมมองเชิงความหมาย กล่าวคือ มีการใช้ตัวระบุเพื่อตัดสินใจว่าทรัพยากรนี้แคชได้หรือไม่ และจะให้ประโยชน์เช่นเดียวกับ ETag ฝั่งไคลเอ็นต์

เราขอแนะนํา 2-3 ข้อหากคุณใช้ Last-Modified เป็นคำสั่งการแคช

  1. วันที่ในส่วนหัว Last-Modified ต้องอยู่ในรูปแบบตามมาตรฐาน HTTP เราขอแนะนำให้ใช้รูปแบบวันที่ต่อไปนี้เพื่อหลีกเลี่ยงปัญหาการแยกวิเคราะห์ "วันธรรมดา, DD Mon YYYY HH:MM:SS เขตเวลา" ตัวอย่างเช่น "Fri, 4 Sep 1998 19:15:56 GMT"
  2. แม้ว่าจะไม่จําเป็น แต่ให้พิจารณาตั้งค่าช่อง max-age ของส่วนหัว Cache-Control ด้วยเพื่อช่วย Crawler ระบุเวลาที่จะทำการ Crawl URL หนึ่งๆ อีกครั้ง ตั้งค่าของช่อง max-age เป็นจำนวนวินาทีที่คาดว่าเนื้อหาจะไม่มีการเปลี่ยนแปลง ตัวอย่างเช่น Cache-Control: max-age=94043

ตัวอย่าง

หากคุณเป็นเหมือนผม การทําความเข้าใจวิธีการทํางานของแคชเชิงฮิวริสติกเป็นเรื่องน่าสนุกและท้าทาย แต่การแสดงตัวอย่างลำดับคำขอและการตอบกลับดูเหมือนจะช่วยเราได้ ต่อไปนี้เป็นเชน 2 รายการ เชนหนึ่งสำหรับ ETag/If-None-Match และอีกเชนสำหรับ Last-Modified/If-Modified-Since เพื่อแสดงภาพว่าการแคชควรจะทํางานอย่างไร

ETag/If-None-Match Last-Modified/If-Modified-Since
การตอบสนองของเซิร์ฟเวอร์ต่อการ Crawl: การตอบสนองนี้ช่วยให้ Crawler บันทึกช่องส่วนหัวเงื่อนไขเบื้องต้น ETag และ Last-Modified ได้
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
ETag: "34aa387-d-1568eb00"
...
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT
Cache-Control: max-age=94043
...
คำขอแบบมีเงื่อนไขของ Crawler ที่ตามมา: คำขอแบบมีเงื่อนไขจะอิงตามค่าส่วนหัวของเงื่อนไขเริ่มต้นที่บันทึกไว้จากคำขอก่อนหน้า ระบบจะส่งค่ากลับไปยังเซิร์ฟเวอร์เพื่อตรวจสอบในส่วนหัวคำขอ If-None-Match และ If-Modified-Since
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-None-Match: "34aa387-d-1568eb00"
...
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...
การตอบสนองของเซิร์ฟเวอร์ต่อคำขอแบบมีเงื่อนไข: เนื่องจากค่าส่วนหัวเงื่อนไขที่ Crawler ส่งมาได้รับการตรวจสอบในฝั่งเซิร์ฟเวอร์ เซิร์ฟเวอร์จึงแสดงรหัสสถานะ HTTP 304 (ไม่มีเนื้อหา HTTP) ไปยัง Crawler การดำเนินการนี้จะมีผลกับคำขอทุกรายการที่ตามมาจนกว่าเงื่อนไขเบื้องต้นจะตรวจสอบไม่สำเร็จ (วันที่ ETag หรือ Last-Modified เปลี่ยนแปลงในฝั่งเซิร์ฟเวอร์)
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:52 GMT
Vary: Accept-Encoding
If-None-Match: "34aa387-d-1568eb00"
...
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:51 GMT
Vary: Accept-Encoding
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...

หากคุณทำธุรกิจเพื่อสร้างความพึงพอใจให้แก่ผู้ใช้และอาจต้องการประหยัดเงินค่าโฮสติ้งด้วย โปรดปรึกษาผู้ให้บริการโฮสติ้งหรือ CMS หรือนักพัฒนาซอฟต์แวร์เกี่ยวกับวิธีเปิดใช้การแคช HTTP สำหรับเว็บไซต์ อย่างน้อยที่สุด ผู้ใช้ก็จะชอบคุณมากขึ้น

หากต้องการพูดคุยเกี่ยวกับการแคช โปรดไปที่ชุมชนความช่วยเหลือของ Search Central ที่สะดวกที่สุด และหากมีความคิดเห็นเกี่ยวกับวิธีที่เราแคช โปรดแสดงความคิดเห็นเกี่ยวกับเอกสารประกอบเกี่ยวกับการแคชที่เราเผยแพร่พร้อมกับบล็อกโพสต์นี้


หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการ Crawl ดูซีรีส์เรื่องการ Crawl ในเดือนธันวาคมทั้งหมดได้ที่