ความแตกต่างระหว่างการใช้GET
หรือPOST
วิธีการคืออะไร? อันไหนปลอดภัยกว่ากัน? อะไรคือข้อดีของแต่ละข้อ?
( คำถามที่คล้ายกัน )
ความแตกต่างระหว่างการใช้GET
หรือPOST
วิธีการคืออะไร? อันไหนปลอดภัยกว่ากัน? อะไรคือข้อดีของแต่ละข้อ?
( คำถามที่คล้ายกัน )
คำตอบ:
มันไม่ใช่เรื่องของความปลอดภัย โปรโตคอล HTTP กำหนดคำขอประเภท GET ว่าเป็นidempotentในขณะที่ POST อาจมีผลข้างเคียง ในภาษาอังกฤษแบบธรรมดานั่นหมายความว่า GET ใช้สำหรับการดูบางสิ่งโดยไม่ต้องเปลี่ยนในขณะที่ POST ใช้สำหรับการเปลี่ยนบางสิ่งบางอย่าง ตัวอย่างเช่นหน้าการค้นหาควรใช้ GET ในขณะที่แบบฟอร์มที่เปลี่ยนรหัสผ่านของคุณควรใช้ POST
นอกจากนี้โปรดทราบว่า PHP สร้างความสับสนให้กับแนวคิดเล็กน้อย คำขอ POST รับอินพุตจากสตริงเคียวรีและผ่านเนื้อความคำขอ คำขอ GET เพิ่งได้รับอินพุตจากสตริงแบบสอบถาม ดังนั้นคำขอ POST จึงเป็น superset ของคำขอ GET คุณสามารถใช้$_GET
ในคำขอ POST และอาจเหมาะสมที่จะมีพารามิเตอร์ที่มีชื่อเดียวกัน$_POST
และ$_GET
นั่นหมายถึงสิ่งต่าง ๆ
ตัวอย่างเช่นสมมติว่าคุณมีแบบฟอร์มสำหรับแก้ไขบทความ Article-id อาจอยู่ในสตริงการสืบค้น (และมีให้ใช้งานผ่าน$_GET['id']
) แต่สมมติว่าคุณต้องการเปลี่ยน Article-id รหัสใหม่อาจมีอยู่ในเนื้อหาคำขอ ( $_POST['id']
) ตกลงบางทีนั่นอาจไม่ใช่ตัวอย่างที่ดีที่สุด แต่ฉันหวังว่ามันจะแสดงให้เห็นถึงความแตกต่างระหว่างทั้งสอง
เมื่อผู้ใช้ป้อนข้อมูลในแบบฟอร์มและคลิกส่งมีสองวิธีที่ข้อมูลสามารถส่งจากเบราว์เซอร์ไปยังเซิร์ฟเวอร์: ใน URL หรือภายในเนื้อความของคำขอ HTTP
เมธอด GET ซึ่งใช้ในตัวอย่างก่อนหน้านี้ต่อท้ายชื่อ / ค่าต่อท้าย URL น่าเสียดายที่ความยาวของ URL มี จำกัด ดังนั้นวิธีนี้จะใช้ได้เฉพาะเมื่อมีพารามิเตอร์เพียงไม่กี่พารามิเตอร์เท่านั้น URL อาจถูกปัดเศษหากฟอร์มใช้พารามิเตอร์จำนวนมากหรือหากพารามิเตอร์มีข้อมูลจำนวนมาก นอกจากนี้พารามิเตอร์ที่ส่งผ่าน URL จะปรากฏในช่องที่อยู่ของเบราว์เซอร์ไม่ใช่สถานที่ที่ดีที่สุดสำหรับรหัสผ่านที่จะแสดง
ทางเลือกของวิธีการ GET คือวิธี POST เมธอดนี้จัดทำแพ็กเกจคู่ชื่อ / ค่าที่อยู่ภายในเนื้อความของคำร้องขอ HTTP ซึ่งสร้างขึ้นเพื่อทำความสะอาด URL และไม่มีการ จำกัด ขนาดของเอาต์พุตแบบฟอร์ม มันมีความปลอดภัยมากกว่า
คำตอบที่ดีที่สุดคือคำตอบแรก
คุณกำลังใช้:
GET
มีความสามารถในการ 'ส่ง' ข้อมูลได้อย่างสมบูรณ์แบบดังนั้นจึงไม่ใช่คำตอบที่แม่นยำมากนัก
มีสองร่วมกัน "ความปลอดภัย" GET
ผลกระทบจากการใช้เป็น เนื่องจากข้อมูลปรากฏในสตริง URL อาจมีบางคนที่มองข้ามไหล่ของคุณที่แถบที่อยู่ / URL อาจสามารถดูบางสิ่งที่ไม่ควรเปิดเผยเช่นคุกกี้เซสชันที่อาจถูกนำมาใช้เพื่อจี้เซสชันของคุณ โปรดทราบว่าทุกคนมีโทรศัพท์กล้องถ่ายรูป
ความเกี่ยวข้องด้านความปลอดภัยอื่น ๆ ของเกี่ยวข้องGET
กับGET
ตัวแปรที่ถูกบันทึกไว้ในบันทึกการเข้าถึงเว็บเซิร์ฟเวอร์ส่วนใหญ่เป็นส่วนหนึ่งของ URL ที่ร้องขอ ขึ้นอยู่กับสถานการณ์บรรยากาศกฎระเบียบและความไวทั่วไปของข้อมูลนี้อาจทำให้เกิดความกังวล
ไคลเอนต์ / ไฟร์วอลล์ / ระบบ IDS บางอย่างอาจGET
ส่งคำขอเมื่อมีข้อมูลจำนวนมากเกินไปและอาจให้ผลลัพธ์ที่ไม่น่าเชื่อถือ
POST
รองรับการใช้งานขั้นสูงเช่นการสนับสนุนอินพุตไบนารี่แบบหลายส่วนที่ใช้สำหรับการอัพโหลดไฟล์ไปยังเว็บเซิร์ฟเวอร์
POST
ต้องการส่วนหัวที่มีความยาวเนื้อหาซึ่งอาจเพิ่มความซับซ้อนของการใช้งานไคลเอนต์เฉพาะแอปพลิเคชันเนื่องจากขนาดของข้อมูลที่ส่งจะต้องทราบล่วงหน้าเพื่อป้องกันไม่ให้คำขอของลูกค้าเกิดขึ้นในโหมดที่เพิ่มขึ้น อาจเป็นปัญหาเล็กน้อยสำหรับผู้ที่เลือกที่จะใช้งานในทางที่ผิดHTTP
โดยใช้มันเป็นการขนส่ง RPC (การเรียกกระบวนการระยะไกล)
คนอื่นทำได้ดีแล้วในการครอบคลุมความแตกต่างทางความหมายและส่วน "เมื่อ" ของคำถามนี้
ฉันใช้ GET เมื่อฉันรับข้อมูลจาก URL และ POST เมื่อฉันส่งข้อมูลไปยัง URL
คุณควรใช้ POST หากมีข้อมูลจำนวนมากหรือข้อมูลที่ละเอียดอ่อนเรียงลำดับ (สิ่งที่สำคัญจริงๆต้องมีการเชื่อมต่อที่ปลอดภัยเช่นกัน)
ใช้ GET หากคุณต้องการให้ผู้คนสามารถบุ๊กมาร์กหน้าของคุณได้เนื่องจากข้อมูลทั้งหมดนั้นรวมอยู่ในที่คั่นหน้า
เพียงระวังคนที่กดปุ่ม REFRESH ด้วยวิธี GET เนื่องจากข้อมูลจะถูกส่งอีกครั้งทุกครั้งโดยไม่มีการเตือนผู้ใช้ (บางครั้ง POST จะเตือนผู้ใช้เกี่ยวกับการส่งข้อมูลอีกครั้ง)
เอกสาร W3Cนี้อธิบายการใช้ HTTP GET และ POST
ฉันคิดว่ามันเป็นแหล่งที่เชื่อถือได้
สรุปคือ (ส่วน 1.3 ของเอกสาร):
- ใช้GETหากการโต้ตอบเป็นเหมือนคำถาม (นั่นคือเป็นการดำเนินการที่ปลอดภัยเช่นแบบสอบถามการอ่านหรือการค้นหา)
- ใช้POSTหาก:
- การโต้ตอบเป็นเหมือนคำสั่งซื้อหรือ
- การโต้ตอบเปลี่ยนสถานะของทรัพยากรในลักษณะที่ผู้ใช้จะรับรู้ (เช่นการสมัครใช้บริการ) หรือ
- ผู้ใช้ต้องรับผิดชอบต่อผลของการโต้ตอบ
วิธีการรับและโพสต์ไม่มีอะไรเกี่ยวข้องกับเทคโนโลยีเซิร์ฟเวอร์ที่คุณใช้งานได้เหมือนกันใน php, asp.net หรือ ruby GET และ POST เป็นส่วนหนึ่งของโปรโตคอล HTTP ตามที่ระบุไว้เครื่องหมาย POST มีความปลอดภัยมากขึ้น เบราว์เซอร์แบบฟอร์ม POST จะไม่ถูกแคช POST ยังใช้เพื่อถ่ายโอนข้อมูลจำนวนมาก
สาเหตุของการใช้ POST เมื่อทำการเปลี่ยนแปลงข้อมูล:
นอกจากนี้อย่าใส่ข้อมูลที่ละเอียดอ่อนในสตริงการสืบค้น (ตัวเลือกเฉพาะกับ GET) เพราะจะปรากฏในแถบที่อยู่บุ๊กมาร์กและบันทึกเซิร์ฟเวอร์
หวังว่านี่จะอธิบายว่าทำไมคนพูดถึง POST ว่า 'ปลอดภัย' หากคุณกำลังส่งข้อมูลที่สำคัญคุณต้องใช้ SSL
GET
และPOST
เป็นวิธีการ HTTP ซึ่งสามารถบรรลุเป้าหมายที่คล้ายกัน
GET
โดยทั่วไปแล้วสำหรับการรับข้อมูล (การดึง), A GET
ไม่ควรมีเนื้อหา, ดังนั้นนอกเหนือจากคุกกี้, ที่เดียวที่จะส่งผ่านข้อมูลอยู่ใน URL และ URL มีความยาว จำกัด , GET
มีความปลอดภัยน้อยกว่าPOST
เนื่องจากข้อมูลที่ส่งเป็นส่วนหนึ่งของ URL
อย่าใช้GET
เมื่อส่งรหัสผ่านบัตรเครดิตหรือข้อมูลที่ละเอียดอ่อนอื่น ๆ ! ทุกคนใน URL สามารถมองเห็นข้อมูลได้สามารถเก็บข้อมูลได้
GET
ไม่เป็นอันตรายเมื่อเราโหลดใหม่หรือปุ่มโทรกลับมันจะถูกทำเครื่องหมายหนังสือพารามิเตอร์ยังคงอยู่ในประวัติเบราว์เซอร์เฉพาะอักขระ ASCII ที่ได้รับอนุญาต
POST
อาจเกี่ยวข้องกับอะไรก็ได้เช่นการจัดเก็บหรืออัปเดตข้อมูลหรือสั่งซื้อผลิตภัณฑ์หรือส่งอีเมล POST
วิธีการมีร่างกาย
POST
วิธีการที่ปลอดภัยสำหรับการส่งผ่านข้อมูลที่สำคัญและเป็นความลับไปยังเซิร์ฟเวอร์มันจะไม่ปรากฏในพารามิเตอร์การค้นหาใน URL และพารามิเตอร์จะไม่ถูกบันทึกไว้ในประวัติเบราว์เซอร์ ไม่มีข้อ จำกัด เกี่ยวกับความยาวของข้อมูล เมื่อเราโหลดเบราว์เซอร์อีกครั้งควรเตือนผู้ใช้ว่าข้อมูลกำลังจะถูกส่งอีกครั้ง POST
ไม่สามารถคั่นหน้าวิธีการได้
ใช้วิธีการ GET ถ้าคุณต้องการดึงทรัพยากรจาก URL คุณจะเห็นหน้าสุดท้ายเสมอหากคุณกดปุ่มย้อนกลับของเบราว์เซอร์และอาจถูกคั่นหน้าไว้ดังนั้นจึงไม่ปลอดภัยเท่าวิธีการ POST
ใช้วิธีการ POST หากคุณต้องการ 'ส่ง' บางสิ่งลงใน URL ตัวอย่างเช่นคุณต้องการสร้างบัญชี Google และคุณอาจต้องกรอกข้อมูลรายละเอียดทั้งหมดจากนั้นคุณกดปุ่ม 'ส่ง' (วิธีการ POST เรียกว่าที่นี่) เมื่อคุณส่งเรียบร้อยแล้วลองกดปุ่มย้อนกลับของเบราว์เซอร์ของคุณ คุณจะได้รับข้อผิดพลาดหรือฟอร์มว่างเปล่าใหม่แทนที่หน้าสุดท้ายด้วยแบบฟอร์มที่กรอก
GET
วิธีการ:
มันใช้สำหรับการส่งวันที่ 256 ตัวอักษรเท่านั้น
เมื่อใช้วิธีนี้ข้อมูลสามารถดูได้ในเบราว์เซอร์
มันเป็นวิธีการเริ่มต้นที่ใช้โดยแบบฟอร์ม
มันไม่ปลอดภัย
POST
วิธีการ:
มันใช้สำหรับส่งข้อมูลไม่ จำกัด
ด้วยวิธีนี้ข้อมูลจะไม่สามารถมองเห็นได้บนเบราว์เซอร์
คุณสามารถระบุPOST
วิธีการได้อย่างชัดเจน
มันปลอดภัยกว่าGET
วิธีนี้
มันมีคุณสมบัติขั้นสูง