นักพัฒนาพบ Safari ของ iOS 6 แหกกฎ HTTP

by lch
24 September 2012 - 08:36

นักพัฒนาค้นพบว่า Safari ใน iOS 6 ฝ่าฝืนข้อกำหนดของโปรโตคอล HTTP ด้วยการ cache หน้าเว็บที่ถูกเรียกด้วยเมท็อด POST ไว้ทั้งที่ไม่ควรจะทำ ซึ่งทำให้การแสดงผลหน้าเว็บผิดพลาดไปจากที่ควรจะเป็น

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

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

ปรากฎว่ามีนักพัฒนากลุ่มหนึ่งโพสต์ใน Stack Overflow ว่าหน้าเว็บของพวกเค้าที่เป็น Ajax นั้นแสดงผลไม่ถูกต้องบน Safari ของ iOS 6 จากการตรวจสอบก็พบว่า Safari เวอร์ชันนี้ตั้งหน้าตั้งตา cache หน้าเว็บไว้ทั้ง ๆ ที่เป็นเมท็อด POST และแม้จะสั่งปิดไม่ให้ Safari เก็บค่าไว้แล้วก็ตาม

งานนี้ทำให้นักพัฒนาต้องปวดหัวและความพยายามในการแก้ไขหลายทางก็ไม่ได้ผล ทางออกที่ใช้ได้ตอนนี้ก็คือต้องใส่ค่า timestamp เป็นพารามิเตอร์หนึ่งของเมท็อด POST ด้วยทุกครั้ง เพื่อให้ Safari เห็นชัด ๆ ว่าเป็นการเรียกที่ไม่ซ้ำกันและไม่ดื้อดึงที่จะ cache หน้าเว็บไว้อีก

ที่มา - Ars Technica

Blognone Jobs Premium