นักพัฒนาค้นพบว่า 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
Comments
จริงๆแล้วตามข้อกำหนดใน rfc สามารถกำหนด cache-control header เพื่อสั่งให้ browser cache ได้นะครับ เพียงแต่ default แล้วมันจะไม่ cache ให้
แต่ในกรณีนี้เขาบอกว่าใน safari ดูเหมือนจะ cache ให้เป็น default และหากต้องการไม่ให้ cache ก็ต้องส่ง header Cache-Control: no-cache เท่านั้น และอีกวิธีก็คือส่ง timestamp นั่นแหละ
คำว่า method (เมธ็อด) ไม่มีคำไทยหรือครับ?
ตอนเด็ก ๆ อาจารย์สอนเรียกเม็ดตอดครับ :p
+1
เม็ด..ตอด
รู้นะ คิดอะไร :P ... คิดเหมือนผมใช่ป่าว
ปลาทองใช่ไหมล้า เคยโยนอาหารเม็ดมันตอดอาหารเกลี้ยงเลย
มันไม่ง่ายเลยที่จะทำ GIF ให้มีขนาดน้อยกว่า 20kB
นั่นมันตอดเม็ด!
อย่าต่ออีกเลยเดี๋ยวต้องติด เรต อิอิ
วิธี หรือ เมท็อด (จากศัพท์บัญญัติ) ครับ
หากแปลไทย คงจะมีคนสับสนกว่าเดิม เพราะ method มันถูกใช้ทับศัพท์ เสมือนเป็นศัพท์ทางเทคนิคไปโดยปริยาย
ไม่ควรเรียกเป็นคำไทยอย่างยิ่ง
เอาจริงๆ นะ เคยมีช่วงหนึ่งผมอ่านเป็น มีท็อด จากนั้นค้นพบว่าตัวเองใช้หลักการอ่านออกเสียงผิด พอๆ กับครูประถมที่สอนเด็กอ่านออกเสียงว่าเรสเตอแรน (restaurant)
ไม่ได้เหน็บครูนะ แต่ผมนักเรียนหลักสูตร 2521 เจอคำนี้ในช่วงประถมบ่อยมาก!
ปล. นอกเรื่องนิด คิดถึงหนังสือสปช. มากๆ
มันไม่ง่ายเลยที่จะทำ GIF ให้มีขนาดน้อยกว่า 20kB
ซ้ำรอย IE5 ?
เป็นมานานละครับ สมัยก่อนผมแก้เว็บอยู่หลายรอบ แต่มันกลับแสดงผลเหมือนเดิม
It's a feature !!
ฮา
iOS6 มีบั๊กเรื่อง AJAX อยู่ 3 ตัว มีวิธีแก้ไขตามนี้ครับ http://www.devthought.com/2012/09/22/understanding-the-ios6-ajax-bugs/
pittaya.com
รู้แต่ว่า Safari เวอร์ชั่นนี้มันเร็วมากๆ
positivity
+1
+1 ทดแทนแผนที่ได้สำหรับผม เพราะชอบอ่านเว็บบนรถไฟฟ้า
กับ chrome ละครับใครเร็วกว่า
Chrome กระตุกกว่าครับ #ผิดประเด็น
Dream high, work hard.
ผลการทดสอบออกมาว่า safari เร็วกว่าครับ
จากหัวข้อข่าวน่าจะพอรู้นะครับว่ามันเร็วเพราะอะไร
อธิบายเรื่อง method ได้ดีครับ ^^
ทำตัวเป็น IE ไปได้
ชิส์
Apple ทำอะไรเนี้ย
รู้สึกผิดหวังกับ apple ยุคที่ไม่มี ลุงจ๊อบส์ หน่อยนึง คิดว่าเรื่องพวกนี้ไม่น่าหลุดออกมาถ้าแกยังอยู่ รู้สึกเหมือน quality ลดลงเยอะ เรื่อง map เหมือนกัน ส่วนตัวเชื่อว่าถ้า จ๊อบส์ อยู่ ios6 น่าจะยังใช้ map ของ google อยู่ เพราะเห็นๆอยู่ว่าของใหม่สู้ของเดิมไม่ได้ ยังดันทุรังใส่มาอีก
HTTP is universal transfer protocols.
อยากบอกว่า android ก็เป็นครับ Ajax bug อันนี้