ฟังก์ชั่นแหล่งข้อมูลการจราจรมีอยู่ในบริการสถิติการจราจร แหล่งข้อมูลการจราจรเป็นแนวคิดสำหรับระดับการเยี่ยมชม กล่าวอีกนัยหนึ่งเมื่อมีการจัดตั้งการเยี่ยมชมแหล่งข้อมูลการจราจรของหน้า Landing Page เป็นแหล่งข้อมูลการจราจรของการเยี่ยมชม แม้ว่าจะมีแหล่งข้อมูลหลายประเภท แต่น่าเสียดายที่จาก JS ตอนนี้มีเพียงสองวิธีในการรับแหล่งข้อมูล - document.referrer และ window.opener สิ่งที่โชคร้ายกว่าคือมีสถานการณ์ไม่มากนักที่ Window.Opener เหมาะสมและ Document.referrer อ่อนแอมากจนเป็นไปไม่ได้ที่จะกำหนดแหล่งที่มาของการรับส่งข้อมูลในหลาย ๆ สถานการณ์
ภาพรวมของ document.referrer
ในแง่ของการใช้งาน Document.referrer หวังที่จะติดตามพฤติกรรมของเบราว์เซอร์ หากเปิดหน้า A การกระทำที่อาจเกิดขึ้นบนเบราว์เซอร์รวมถึงการดำเนินการของผู้ใช้และรหัส JS
ก่อนอื่นมาดูการกระทำที่ผู้ใช้อาจดำเนินการเมื่อเปิดหน้า A:
| 1 | ป้อนที่อยู่ของ A โดยตรงในแถบที่อยู่ |
| 2 | คลิกซ้ายลิงค์ A จากหน้า B และข้ามไปที่หน้า A |
| 3 | คลิกขวาลิงค์ A จากหน้า B เพื่อเปิดในหน้าต่างใหม่ |
| 4 | คลิกขวาลิงค์ A จากหน้า B และเปิดในแท็บใหม่ |
| 5 | ลากลิงค์ A ไปยังแถบที่อยู่ |
| 6 | ลากลิงค์ A ไปยังแถบแท็บ |
| 7 | ใช้ปุ่มไปข้างหน้าและด้านหลังของเบราว์เซอร์ |
โปรดทราบว่าลิงค์ที่นี่หมายถึงแท็ก <a> แต่หากมีเหตุการณ์หรือเป้าหมายมันควรจะเป็นเรื่องที่แตกต่างกัน
วิธีที่เป็นไปได้ในการเปิดหน้าโดย JS:
| 1 | แก้ไข window.location |
| 2 | ใช้ window.open |
| 3 | คลิกแฟลช |
ข้างต้นแสดงรายการบางวิธีเพื่อให้ไคลเอนต์เปิดหน้า นอกจากนี้หากใช้เทคโนโลยีการเปลี่ยนเส้นทางของเซิร์ฟเวอร์หน้า A สามารถนำเสนอต่อผู้เข้าชมได้
นี่คือการทดสอบเบราว์เซอร์เฉพาะ หากสถานการณ์ข้างต้นอยู่ข้างต้น document.erferrer จะทำอย่างไร:
| หมายเลขซีเรียล | ฉาก | IE8.0 | FF3.6 | ff4.0 | โครเมี่ยม |
| 1 | ป้อนที่อยู่ของ A โดยตรงในแถบที่อยู่ | - | - | - | - |
| 2 | คลิกซ้ายลิงก์ A จากหน้า B และหน้า A แทนที่หน้า B (target = '_ self') | ||||
| 3 | คลิกซ้ายลิงก์ A จากหน้า B เปิดในหน้าต่างใหม่ (target = '_ blank') | ||||
| 3 | คลิกขวาลิงค์ A จากหน้า B เพื่อเปิดในหน้าต่างใหม่ | - | |||
| 4 | คลิกขวาลิงค์ A จากหน้า B และเปิดในแท็บใหม่ | - | |||
| 5 | ลากลิงค์ A ไปยังแถบที่อยู่ด้วยเมาส์ | - | - | - | - |
| 6 | ลิงค์ลากเมาส์ไปยังแถบแท็บ | - | - | - | - |
| 7 | ใช้ปุ่มไปข้างหน้าและด้านหลังของเบราว์เซอร์ | เก็บ | เก็บ | เก็บ | เก็บ |
| 8 | แก้ไข window.location เพื่อเปิดหน้า A (โดเมนเดียวกัน) | - | |||
| 9 | เปิดหน้า A โดยใช้ window.open | - | |||
| 10 | คลิกแฟลชเพื่อเปิดหน้าก | ||||
| 11 | เซิร์ฟเวอร์เปลี่ยนเส้นทางไปยังหน้าก | - | - | - | - |
ในกรณีที่ "" หมายถึงสตริงที่ว่างเปล่า√หมายความว่าหน้าต้นฉบับสามารถตัดสินได้อย่างถูกต้องและเก็บไว้หมายความว่าผู้อ้างอิงที่จะไม่เปลี่ยนหน้าเมื่อไปข้างหน้าและย้อนกลับจะไม่เปลี่ยนแปลง จากตารางนี้เราจะเห็นเอกสารนั้นผู้อ้างอิงสามารถครอบคลุมประมาณครึ่งหนึ่งของคดี อย่างไรก็ตามสำหรับการดำเนินการที่ใช้กันทั่วไปบางอย่างเช่นการลากลิงก์ไปยังแถบแท็บด้วยเมาส์เลื่อนไปข้างหน้าและข้างหลัง ฯลฯ ไม่สามารถจัดการได้อย่างเหมาะสม
แหล่งที่มาของ document.referrer
เมื่อเบราว์เซอร์ร้องขอหน้า A จากเซิร์ฟเวอร์จะส่งคำขอ HTTP ส่วนหัวของคำขอนี้จะมีแอตทริบิวต์ผู้อ้างอิง หลังจากเซิร์ฟเวอร์ได้รับคำขอแล้วสามารถแยกผู้อ้างอิงในส่วนหัวเพื่อพิจารณาว่าหน้าใดที่ผู้เข้าชมเริ่มร้องขอ
โดยทั่วไปแล้วสิ่งที่ผู้อ้างอิงในส่วนหัวที่ส่งโดยเบราว์เซอร์คืออะไรเมื่อขอ A แล้วค่าของ document.referre คืออะไรหลังจากได้รับหน้า A ภาพด้านบนคือส่วนหัวที่ขอหน้า A และเอกสารอ้างอิงของ A คือ http: //localhost/test/b.html
หากส่วนหัวไม่มีการอ้างอิงจากนั้นเมื่อใช้ document.referre มันจะถูกกำหนดให้เป็นสตริงว่าง
เกี่ยวกับคำขอ HTTPS
หากคุณคลิกที่ลิงค์ HTTPS ในหน้า HTTP ปกติคุณสามารถแนบข้อมูลผู้อ้างอิงไปยังส่วนหัวคำขอ HTTPS และจากนั้นคุณยังสามารถใช้ document.referre เพื่อรับหน้า HTTP ปกติในหน้า HTTPS
ในทำนองเดียวกันหากคุณคลิกลิงก์ HTTPS อื่นในหน้า HTTPS หนึ่งหน้าคุณสามารถแนบข้อมูลผู้อ้างอิงเข้ากับส่วนหัวของคำขอได้
อย่างไรก็ตามหากคุณคลิกที่ลิงค์ HTTP จากหน้า HTTP แต่น่าเสียดายที่ส่วนหัวคำขอ HTTP ที่ส่งไม่สามารถมีข้อมูลเกี่ยวกับหน้า HTTP ซึ่งอาจเกิดจากการวัดการป้องกันสำหรับหน้า HTTP
ข้อมูลผู้อ้างอิงปลอมแปลง
ตามคำอธิบายข้างต้น document.referre ได้มาจากผู้อ้างอิงในส่วนหัว จากนั้นหากคุณต้องการแก้ไขค่าของ document.referre ในทางทฤษฎีคุณจะต้องแก้ไขส่วนหัวคำขอเท่านั้น คุณสามารถแทนที่ผู้อ้างอิงที่มีอยู่ในส่วนหัวด้วยค่าที่คุณต้องการ หากไม่สามารถใช้งานได้ในตอนแรกคุณสามารถเพิ่มผู้อ้างอิงได้
ในด้านลูกค้าการดัดแปลงส่วนหัวเป็นเรื่องง่ายมาก ก่อนที่จะมีการส่งคำขอ HTTP บนหน้าเว็บคุณสามารถใช้เครื่องมือ Interceptor แพ็คเก็ตเพื่อสกัดกั้นจากนั้นวิเคราะห์ข้อมูลส่วนหัวและแก้ไขการอ้างอิง
หลังจากค้นหา Firefox สามารถแก้ไขได้อย่างง่ายดายโดยใช้ปลั๊กอิน REFControl อย่างไรก็ตามการโกงแหล่งข้อมูลการจราจรเป็นเรื่องง่าย
การรีเฟรชหน้าบังคับ
ไม่นานหลังจากที่ฉันเขียนเสร็จฉันก็พบว่าวิธีกระโดดหน้าหายไปนั่นคือเพื่อบังคับให้ระบุหน้าเว็บในแท็กเมตาใน HTML เพื่อรีเฟรช ตัวอย่างเช่นเขียนใน b.html
คัดลอกรหัสรหัสดังนี้: <meta http-equiv = "Refresh" content = "5; url = a.html">
จากนั้นหลังจาก 5 วินาทีเบราว์เซอร์จะเริ่มคำขอหน้าเว็บไปยังเซิร์ฟเวอร์โดยอัตโนมัติ
หลังจากการทดสอบใน IE8, FF3.6-FF4.0 จะไม่มีข้อมูลผู้อ้างอิง แต่ Chrome สามารถเพิ่ม b.html เป็นผู้อ้างอิงถึงส่วนหัวโดยไม่ได้ตั้งใจ