คำขอเว็บทุกครั้งส่งคุกกี้ของเบราว์เซอร์หรือไม่
ฉันไม่ได้พูดถึงการดูหน้าเว็บ แต่ขอรูปภาพ.js
ไฟล์ ฯลฯ
อัปเดต หากหน้าเว็บมีองค์ประกอบ 50 รายการนั่นคือคำขอ 50 รายการ เหตุใดจึงส่งคุกกี้ SAME สำหรับแต่ละคำขอไม่ใช่แคชหรือรู้ว่ามีอยู่แล้ว
คำขอเว็บทุกครั้งส่งคุกกี้ของเบราว์เซอร์หรือไม่
ฉันไม่ได้พูดถึงการดูหน้าเว็บ แต่ขอรูปภาพ.js
ไฟล์ ฯลฯ
อัปเดต หากหน้าเว็บมีองค์ประกอบ 50 รายการนั่นคือคำขอ 50 รายการ เหตุใดจึงส่งคุกกี้ SAME สำหรับแต่ละคำขอไม่ใช่แคชหรือรู้ว่ามีอยู่แล้ว
คำตอบ:
ใช่ตราบใดที่ URL ที่ร้องขอนั้นอยู่ในโดเมนเดียวกันและเส้นทางที่กำหนดไว้ในคุกกี้ (และข้อ จำกัด อื่น ๆ ทั้งหมด - ปลอดภัย, แบบ httponly, ไม่หมดอายุและอื่น ๆ ) จะเก็บคุกกี้นั้นไว้สำหรับทุกคำขอ
ดังที่คนอื่น ๆ กล่าวไว้ว่าหากเป็นไปตามข้อ จำกัด ของโฮสต์เส้นทางและอื่น ๆ คุกกี้จะถูกส่งไป 50 ครั้ง
แต่คุณยังถามด้วยว่าทำไม: เพราะคุกกี้เป็นคุณสมบัติ HTTP และ HTTP นั้นไร้สัญชาติ HTTP ถูกออกแบบมาให้ทำงานโดยไม่มีเซิร์ฟเวอร์ที่จัดเก็บสถานะใด ๆ ระหว่างคำขอ
ในความเป็นจริงเซิร์ฟเวอร์ไม่มีวิธีที่ชัดเจนในการรับรู้ว่าผู้ใช้รายใดที่ส่งคำขอที่กำหนด อาจมีผู้ใช้หนึ่งพันคนที่อยู่เบื้องหลังเว็บพรอกซีเดียว (และที่อยู่ IP) หากไม่ได้ส่งคุกกี้ทุกคำขอเซิร์ฟเวอร์จะไม่มีทางรู้ว่าผู้ใช้รายใดร้องขอทรัพยากรใด
ในที่สุดเบราว์เซอร์ไม่มีเงื่อนงำหากเซิร์ฟเวอร์ต้องการคุกกี้หรือไม่มันเพิ่งรู้ว่าเซิร์ฟเวอร์สั่งให้ส่งคุกกี้สำหรับคำขอใด ๆ ไปยัง foo.com ดังนั้นจึงเป็นเช่นนั้น บางครั้งภาพต้องการพวกเขา (เช่นสร้างต่อผู้ใช้แบบไดนามิก) บางครั้งไม่ แต่เบราว์เซอร์ไม่สามารถบอกได้
ใช่. ทุกคำขอจะส่งคุกกี้ที่เป็นของโดเมนเดียวกัน พวกเขาจะไม่แคชเนื่องจาก HTTP ไร้สัญชาติสิ่งที่หมายถึงทุกคำขอจะต้องเพียงพอสำหรับเซิร์ฟเวอร์ที่จะคิดออกว่าจะทำอย่างไรกับมัน สมมติว่าคุณมีรูปภาพที่เข้าถึงได้โดยผู้ใช้บางรายเท่านั้น คุณต้องส่งคุกกี้รับรองความถูกต้องทุก 50 คำขอดังนั้นเซิร์ฟเวอร์จึงรู้ว่าเป็นคุณไม่ใช่คนอื่นหรือเป็นแขกในกลุ่มของคำขอที่ได้รับ
ต้องบอกว่าอาจไม่ส่งคุกกี้เนื่องจากข้อ จำกัด อื่น ๆ ที่กล่าวถึงในการตอบกลับอื่น ๆ เช่นการตั้งค่า HTTPS เส้นทางหรือโดเมน สิ่งสำคัญที่ควรสังเกตคือคุกกี้ไม่ถูกแชร์ระหว่างโดเมน ซึ่งช่วยลดขนาดการเรียก HTTP สำหรับไฟล์สแตติกเช่นรูปภาพและสคริปต์ที่คุณกล่าวถึง
ตัวอย่าง: คุณมี 4 คุกกี้ที่www.stackoverflow.com
; หากคุณทำการร้องขอwww.stackoverflow.com/images/logo.png
คุกกี้ 4 รายการเหล่านั้นจะถูกส่งไป
อย่างไรก็ตามหากคุณขอstackoverflow.com/images/logo.png
(สังเกตเห็นการเปลี่ยนแปลงโดเมนย่อย) หรือimages.stackoverflow.com/logo.png
คุกกี้ 4 รายการนั้นจะไม่ปรากฏ แต่อาจเกี่ยวข้องกับโดเมนเหล่านี้
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับคุกกี้และภาพขอยกตัวอย่างเช่นนี้StackOverflow บล็อกโพสต์
ไม่ทุกคำขอส่งคุกกี้ ขึ้นอยู่กับการกำหนดค่าคุกกี้และการเชื่อมต่อไคลเอนต์ - เซิร์ฟเวอร์
ตัวอย่างเช่นหากsecure
ตั้งค่าตัวเลือกคุกกี้ของคุณtrue
จะต้องส่งผ่านการเชื่อมต่อ HTTPS ที่ปลอดภัย หมายถึงเมื่อคุณเห็นเว็บไซต์ที่มีโปรโตคอล HTTP แล้วคุกกี้เหล่านี้จะไม่ถูกส่งโดยเบราว์เซอร์เนื่องจากการตั้งค่าความปลอดภัยเป็นจริง
คุกกี้มีคุณสมบัติ "เส้นทาง" หาก "path = /" คำตอบคือใช่
/app/
- มันจะรักษาความสะดวกในการพกพาโดยไม่ต้องใช้โดเมนย่อยแยกต่างหากเพื่อกำจัดค่าใช้จ่ายซ้ำซ้อน หรือคุณอาจเลือกใช้ Google Analytics ที่ไร้ประโยชน์ในตอนนี้สำหรับการเริ่มต้น ฉันเห็นหัวคุกกี้นานมากแล้วฉันสงสัยว่าย่าของฉันถักไหมพรม
3 ปีที่ผ่านมา
มีอีกสาเหตุที่เบราว์เซอร์ไม่ส่งคุกกี้ คุณสามารถเพิ่มcrossOrigin
แอตทริบิวต์ที่คุณแท็กและความคุ้มค่าในการ<script>
"anonymous"
วิธีนี้จะป้องกันไม่ให้มีการส่งคุกกี้ไปยังเซิร์ฟเวอร์ปลายทาง 99.9% ของเวลา javascripts ของคุณเป็นไฟล์คงที่และคุณไม่ได้สร้างรหัส js นั้นตามคุกกี้ของคำขอ หากคุณมีคุกกี้ 1KB และคุณมีทรัพยากร 200 รายการบนหน้าเว็บของคุณผู้ใช้ของคุณกำลังอัปโหลด 200KB และอาจต้องใช้เวลาสักครู่บน 3G และไม่มีผลกระทบใด ๆ กับหน้าผลลัพธ์ ไปที่แอตทริบิวต์ HTML: crossoriginเพื่อการอ้างอิง
ฉันรู้ว่านี่เป็นด้ายเก่า แต่ฉันเพิ่งสังเกตเห็นว่าเบราว์เซอร์ส่วนใหญ่จะไม่ส่งคุกกี้สำหรับโดเมนหากคุณเพิ่มจุดต่อท้าย ยกตัวอย่างเช่นจะไม่ได้รับการตั้งค่าสำหรับคุกกี้http://example.com.
.example.com
Apache ในทางกลับกันถือว่าเป็นโฮสต์เดียวกัน ฉันพบว่ามีประโยชน์ในการทำให้การติดตามข้ามโดเมนยากขึ้นสำหรับทรัพยากรภายนอกที่ฉันมี แต่คุณสามารถใช้เพื่อเหตุผลด้านประสิทธิภาพได้ หมายเหตุเบรคนี้การตรวจสอบhttps
ใบรับรอง ฉันทำการทดสอบสองสามครั้งโดยใช้เบราว์เซอร์ภาพและอุปกรณ์ของฉันเอง แฮ็คทำงานได้กับเบราว์เซอร์เกือบทั้งหมดยกเว้นสำหรับ Safari (อุปกรณ์เคลื่อนที่และเดสก์ท็อป) ซึ่งจะรวมคุกกี้ไว้ในคำขอ
คำตอบสั้น ๆ คือใช่ บรรทัดด้านล่างมาจากเอกสาร JS
คุกกี้ถูกใช้ครั้งเดียวสำหรับการจัดเก็บข้อมูลฝั่งไคลเอ็นต์ทั่วไป ขณะนี้ถูกต้องตามกฎหมายเมื่อพวกเขาเป็นวิธีเดียวในการจัดเก็บข้อมูลบนไคลเอนต์ตอนนี้ก็ขอแนะนำให้ใช้ API การจัดเก็บข้อมูลที่ทันสมัย คุกกี้จะถูกส่งไปพร้อมกับคำขอทุกครั้งเพื่อให้ประสิทธิภาพแย่ลง (โดยเฉพาะสำหรับการเชื่อมต่อข้อมูลมือถือ)