จากสิ่งที่ฉันสามารถรวบรวมมีสามประเภท:
- ห้ามใช้
GET
และใช้งานPOST
- ห้ามใช้
POST
และใช้งานGET
- มันไม่สำคัญว่าคุณจะใช้อันไหน
ฉันถูกต้องโดยสมมติว่าทั้งสามกรณี? ถ้าเป็นเช่นนั้นมีตัวอย่างอะไรบ้างจากแต่ละกรณี?
จากสิ่งที่ฉันสามารถรวบรวมมีสามประเภท:
GET
และใช้งานPOST
POST
และใช้งานGET
ฉันถูกต้องโดยสมมติว่าทั้งสามกรณี? ถ้าเป็นเช่นนั้นมีตัวอย่างอะไรบ้างจากแต่ละกรณี?
คำตอบ:
ใช้POST
สำหรับการกระทำที่เป็นอันตรายเช่นการสร้าง (ฉันทราบถึงการประชด) การแก้ไขและการลบเนื่องจากคุณไม่สามารถPOST
ดำเนินการใด ๆ ในแถบที่อยู่ของเบราว์เซอร์ของคุณ ใช้GET
เมื่อปลอดภัยเพื่อให้บุคคลสามารถเรียกการกระทำได้ ดังนั้น URL เช่น:
http://myblog.org/admin/posts/delete/357
ควรนำคุณเข้าสู่หน้าการยืนยันแทนที่จะลบรายการออก มันง่ายกว่าที่จะหลีกเลี่ยงอุบัติเหตุด้วยวิธีนี้
POST
มีความปลอดภัยมากกว่าGET
เนื่องจากคุณไม่ได้รวมข้อมูลไว้ใน URL ดังนั้นการใช้GET
เป็นmethod
รูปแบบ HTML ที่รวบรวมรหัสผ่านหรือข้อมูลที่ละเอียดอ่อนอื่น ๆ ไม่ใช่ความคิดที่ดีที่สุด
หนึ่งบันทึกสุดท้าย: สามารถส่งจำนวนมากของข้อมูลที่มากกว่าPOST
GET
'POST' ไม่มีข้อ จำกัด ด้านขนาดสำหรับข้อมูลที่ส่งขณะที่ 'GET' จำกัด ไว้ที่ 2048 อักขระ
โดยสังเขป
GET
สำหรับsafe and
idempotent
การร้องขอPOST
สำหรับneither safe nor idempotent
การร้องขอในรายละเอียด มีสถานที่ที่เหมาะสมสำหรับแต่ละ แม้ว่าคุณจะไม่ปฏิบัติตามหลักการRESTfulก็สามารถได้รับมากมายจากการเรียนรู้เกี่ยวกับ REST และวิธีการทำงานของทรัพยากรที่มุ่งเน้น
แอพลิเคชันจะสงบสำหรับการดำเนินงานซึ่งมีทั้ง
use GETs
safe and idempotent
การsafe
ดำเนินการเป็นการดำเนินการที่not change the data
ร้องขอ
การidempotent
ดำเนินการเป็นสิ่งที่ผลลัพธ์be the same
ไม่ว่าคุณจะร้องขอกี่ครั้งก็ตาม
มันยืนเพื่อเหตุผลที่ว่าในขณะที่ได้รับจะใช้สำหรับความปลอดภัยการดำเนินงานของพวกเขาโดยอัตโนมัตินอกจากนี้ยังidempotent โดยทั่วไปแล้ว GET จะใช้สำหรับดึงข้อมูลทรัพยากร (เช่นคำถามและคำตอบที่เกี่ยวข้องในสแต็คโอเวอร์โฟลว์) หรือการรวบรวมทรัพยากร
app ที่สงบจะใช้สำหรับการดำเนินงานที่มี
PUTs
not safe but idempotent
ฉันรู้ว่าคำถามเกี่ยวกับ GET และ POST แต่ฉันจะกลับไปที่ POST ภายในไม่กี่วินาที
โดยทั่วไปแล้ว PUT จะใช้สำหรับการแก้ไขทรัพยากร (เช่นการแก้ไขคำถามหรือคำตอบเกี่ยวกับการโอเวอร์โฟลว์สแต็ก)
POST
จะถูกนำมาใช้สำหรับการดำเนินการใด ๆneither safe or idempotent
ซึ่งเป็น
โดยทั่วไปแล้ว POST จะถูกใช้เพื่อสร้างทรัพยากรใหม่เช่นการสร้างคำถาม SO ใหม่ (แม้ว่าในบางการออกแบบจะใช้ PUT สำหรับสิ่งนี้ด้วย)
หากคุณรัน POST สองครั้งคุณจะต้องสร้างคำถามใหม่สองคำถาม
นอกจากนี้ยังมีการดำเนินการลบ แต่ฉันคิดว่าฉันสามารถออกจากที่นั่น :)
อภิปรายผล
โดยทั่วไปแล้วเว็บเบราว์เซอร์สมัยใหม่มักรองรับ GET และ POST อย่างน่าเชื่อถือเท่านั้น (คุณสามารถดำเนินการทั้งหมดเหล่านี้ได้ผ่านการเรียกใช้จาวาสคริปต์ แต่ในแง่ของการป้อนข้อมูลในรูปแบบและการกดส่งคุณโดยทั่วไปมีสองตัวเลือก) ในแอปพลิเคชัน RESTful POST มักจะถูก overriden เพื่อให้การเรียก PUT และ DELETE
แต่แม้ว่าคุณจะไม่ได้ปฏิบัติตามหลักการ RESTful แต่ก็มีประโยชน์ที่จะคิดในแง่ของการใช้ GET สำหรับการดึง / ดูข้อมูลและ POST สำหรับการสร้าง / แก้ไขข้อมูล
คุณไม่ควรใช้ GET สำหรับการดำเนินการที่เปลี่ยนแปลงข้อมูล หากเครื่องมือค้นหารวบรวมข้อมูลลิงก์ไปยัง op ที่ชั่วร้ายของคุณหรือบุ๊กมาร์กไคลเอ็นต์อาจทำให้เกิดปัญหาใหญ่
ใช้ GET ถ้าคุณไม่สนใจคำขอที่ทำซ้ำ (นั่นคือมันไม่เปลี่ยนสถานะ)
ใช้ POST หากการดำเนินการเปลี่ยนสถานะของระบบ
method
บังคับใช้)
GET: โดยปกติจะใช้สำหรับคำขอค้นหาที่ส่งหรือคำขอใด ๆ ที่คุณต้องการให้ผู้ใช้สามารถดึงหน้าเว็บที่แน่นอนอีกครั้ง
ข้อดีของ GET:
ข้อเสียของ GET:
POST: ใช้สำหรับคำขอความปลอดภัยที่สูงขึ้นซึ่งอาจใช้ข้อมูลเพื่อแก้ไขฐานข้อมูลหรือหน้าเว็บที่คุณไม่ต้องการให้ใครบางคนคั่นหน้า
ข้อดีของการโพสต์:
ข้อเสียของการโพสต์:
โดยตรงจากHypertext Transfer Protocol - HTTP / 1.1 :
9.3 GET
วิธีการ GET หมายถึงการดึงข้อมูลใด ๆ (ในรูปแบบของนิติบุคคล) จะถูกระบุโดย Request-URI หาก Request-URI อ้างถึงกระบวนการผลิตข้อมูลมันเป็นข้อมูลที่ผลิตซึ่งจะถูกส่งคืนเป็นเอนทิตีในการตอบกลับไม่ใช่ข้อความต้นฉบับของกระบวนการยกเว้นว่าข้อความนั้นเป็นผลลัพธ์ของกระบวนการ
ซีแมนทิกส์ของเมธอด GET จะเปลี่ยนเป็น "เงื่อนไขแบบรับ" หากข้อความคำร้องขอมีฟิลด์ If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match หรือ If-Range เมธอด GET แบบมีเงื่อนไขร้องขอให้โอนเอนทิตีภายใต้สถานการณ์ที่อธิบายโดยฟิลด์ส่วนหัวที่มีเงื่อนไข วิธี GET แบบมีเงื่อนไขมีวัตถุประสงค์เพื่อลดการใช้เครือข่ายที่ไม่จำเป็นโดยอนุญาตให้รีเฟรชเอนทิตีที่แคชไว้โดยไม่ต้องมีการร้องขอหลายครั้งหรือถ่ายโอนข้อมูลที่มีอยู่แล้วโดยลูกค้า
ซีแมนทิกส์ของวิธีการ GET เปลี่ยนเป็น "รับบางส่วน" ถ้าข้อความคำขอมีฟิลด์ส่วนหัวของช่วง GET บางส่วนร้องขอให้โอนเฉพาะบางส่วนของเอนทิตีตามที่อธิบายไว้ในส่วน 14.35 วิธี GET บางส่วนมีวัตถุประสงค์เพื่อลดการใช้เครือข่ายที่ไม่จำเป็นโดยอนุญาตให้เอนทิตีที่ดึงข้อมูลบางส่วนแล้วเสร็จโดยไม่ต้องถ่ายโอนข้อมูลที่มีอยู่แล้วโดยลูกค้า
การตอบสนองต่อคำขอ GET นั้นจะสามารถแคชได้หากว่าเป็นไปตามข้อกำหนดสำหรับการแคช HTTP ที่อธิบายไว้ในส่วนที่ 13
ดูส่วนที่ 15.1.3 สำหรับข้อควรพิจารณาด้านความปลอดภัยเมื่อใช้กับแบบฟอร์ม
9.5 โพสต์
เมธอด POST ใช้เพื่อร้องขอให้เซิร์ฟเวอร์ต้นทางยอมรับเอนทิตีที่อยู่ในคำขอเป็นผู้ใต้บังคับบัญชาใหม่ของทรัพยากรที่ระบุโดย Request-URI ใน Request-Line POST ได้รับการออกแบบมาเพื่อให้วิธีการแบบเดียวกันครอบคลุมฟังก์ชั่นต่อไปนี้:
คำอธิบายประกอบของทรัพยากรที่มีอยู่;
การโพสต์ข้อความไปยังกระดานข่าวกลุ่มข่าวสารรายชื่อผู้รับจดหมายหรือกลุ่มบทความที่คล้ายกัน
การจัดเตรียมบล็อกข้อมูลเช่นผลลัพธ์ของการส่งแบบฟอร์มไปยังกระบวนการจัดการข้อมูล
การขยายฐานข้อมูลผ่านการดำเนินการผนวก
ฟังก์ชั่นที่เกิดขึ้นจริงดำเนินการโดยวิธีการ POST จะถูกกำหนดโดยเซิร์ฟเวอร์และมักจะขึ้นอยู่กับ Request-URI เอนทิตีที่ถูกโพสต์นั้นเป็นสังกัดอยู่ใน URI นั้นในลักษณะเดียวกับที่ไฟล์นั้นถูกส่งไปยังไดเรกทอรีที่มีอยู่บทความข่าวจะถูกส่งไปยังกลุ่มข่าวสารที่โพสต์ไว้หรือบันทึกเป็นสังกัดในฐานข้อมูล
การกระทำที่ดำเนินการโดยวิธี POST อาจไม่ส่งผลให้เกิดทรัพยากรที่สามารถระบุได้โดย URI ในกรณีนี้ 200 (OK) หรือ 204 (ไม่มีเนื้อหา) เป็นสถานะการตอบสนองที่เหมาะสมขึ้นอยู่กับว่าการตอบสนองนั้นมีเอนทิตีที่อธิบายผลลัพธ์หรือไม่
สิ่งสำคัญอันดับแรกคือความหมายของ GET และ POST:
หลังจากนั้นสองสิ่งที่สามารถสังเกตได้:
อย่างไรก็ตามฉันไม่คิดว่าเราจะ "อยู่" ได้หากไม่มี GET: คิดถึงจำนวน URL ที่คุณใช้กับพารามิเตอร์ในสตริงข้อความค้นหาทุกวัน - หากไม่มี GET สิ่งเหล่านั้นจะไม่ทำงาน ;-)
http://example.com/var1/value1/var2/value2/var3/value3
เราสามารถ 'เทคนิค' ไม่ได้รับอีกต่อไป ...
www.mypage.com/contact/
ใช้งานจะได้รับภายในเพื่อสิ่งที่ชอบindex.php?url=/contact/
นอกเหนือจากข้อ จำกัด ด้านความยาวในเว็บเบราว์เซอร์จำนวนมากยังมีความแตกต่างทางความหมาย GETs ควรจะ "ปลอดภัย" เนื่องจากเป็นการดำเนินการแบบอ่านอย่างเดียวซึ่งจะไม่เปลี่ยนสถานะเซิร์ฟเวอร์ โดยทั่วไปแล้วโพสต์จะเปลี่ยนสถานะและจะให้คำเตือนเกี่ยวกับการส่งอีกครั้ง โปรแกรมรวบรวมข้อมูลเว็บของเครื่องมือค้นหาอาจสร้าง GET แต่ไม่ควรทำ POST
ใช้ GET หากคุณต้องการอ่านข้อมูลโดยไม่เปลี่ยนสถานะและใช้ POST หากคุณต้องการอัพเดทสถานะบนเซิร์ฟเวอร์
กฎทั่วไปของฉันคือการใช้รับเมื่อคุณกำลังร้องขอไปยังเซิร์ฟเวอร์ที่จะไม่เปลี่ยนสถานะ โพสต์สงวนไว้สำหรับคำขอไปยังเซิร์ฟเวอร์ที่เปลี่ยนสถานะ
ข้อแตกต่างที่เป็นไปได้ประการหนึ่งคือเบราว์เซอร์และเว็บเซิร์ฟเวอร์มีข้อ จำกัด เกี่ยวกับจำนวนอักขระที่สามารถมีอยู่ใน URL มันแตกต่างจากแอปพลิเคชันไปยังแอปพลิเคชัน แต่เป็นไปได้ที่จะตีถ้าคุณได้รับtextarea
ในแบบฟอร์มของคุณ
gotcha อีกหนึ่งตัวที่มี GETs - พวกเขาได้รับการจัดทำดัชนีโดยเครื่องมือค้นหาและระบบอัตโนมัติอื่น ๆ Google เคยมีผลิตภัณฑ์ที่จะดึงข้อมูลลิงก์ล่วงหน้าบนหน้าเว็บที่คุณกำลังดูดังนั้นพวกเขาจะโหลดเร็วขึ้นถ้าคุณคลิกลิงก์เหล่านั้น มันทำให้เกิดความเสียหายอย่างใหญ่หลวงในเว็บไซต์ที่มีลิงก์เช่นdelete.php?id=1
- ผู้คนสูญเสียเว็บไซต์ทั้งหมด
ใช้ GET เมื่อคุณต้องการให้ URL แสดงสถานะของหน้า สิ่งนี้มีประโยชน์สำหรับการดูหน้าเว็บที่สร้างขึ้นแบบไดนามิกเช่นที่เห็นในที่นี้ ควรใช้ POST ในแบบฟอร์มเพื่อส่งข้อมูลเช่นเมื่อฉันคลิกปุ่ม "โพสต์คำตอบของคุณ" นอกจากนี้ยังสร้าง URL ที่สะอาดขึ้นเนื่องจากจะไม่สร้างสตริงพารามิเตอร์หลังพา ธ
เนื่องจาก GETs เป็น URL ล้วนๆเว็บเบราว์เซอร์เหล่านี้จึงสามารถแคชได้และอาจใช้ในสิ่งต่าง ๆ เช่นรูปภาพที่สร้างขึ้นอย่างสม่ำเสมอ (ตั้งเวลาหมดอายุ)
ตัวอย่างหนึ่งจากหน้า gravatar: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid
GET อาจมีประสิทธิภาพที่ดีขึ้นเล็กน้อยเว็บเซิร์ฟเวอร์บางตัวเขียนเนื้อหา POST ไปยังไฟล์ชั่วคราวก่อนที่จะเรียกใช้ตัวจัดการ
สิ่งที่ต้องพิจารณาอีกประการหนึ่งคือการ จำกัด ขนาด GETs ถูกต่อยอดด้วยขนาดของ URL 1024 ไบต์ตามมาตรฐานแม้ว่าเบราว์เซอร์อาจรองรับมากกว่านี้
ถ่ายโอนข้อมูลมากกว่าที่ควรใช้ POST เพื่อให้เข้ากันได้กับเบราว์เซอร์ที่ดีขึ้น
แม้จะน้อยกว่าขีด จำกัด นั้นก็เป็นปัญหาตามที่ผู้โพสต์คนอื่นเขียนไว้สิ่งใดก็ตามใน URL อาจปรากฏในส่วนอื่น ๆ ของ UI ของเบราว์เซอร์เช่นประวัติ
ไม่มีสิ่งใดที่คุณไม่สามารถทำต่อได้ ประเด็นก็คือคุณไม่ควรแก้ไขสถานะเซิร์ฟเวอร์ใน HTTP GET HTTP พร็อกซีสันนิษฐานว่าเนื่องจาก HTTP GET ไม่ได้แก้ไขสถานะดังนั้นผู้ใช้จะเรียกใช้ HTTP GET เพียงครั้งเดียวหรือ 1,000 ครั้งทำให้ไม่มีความแตกต่าง การใช้ข้อมูลนี้พวกเขาคิดว่าปลอดภัยที่จะส่งคืนเวอร์ชันแคช HTTP แรกของ GET หากคุณทำลายข้อกำหนดของ HTTP คุณอาจเสี่ยงต่อการแบ่งไคลเอนต์ HTTP และพร็อกซีในรูปแบบเดิม อย่าทำมัน :)
สิ่งนี้เข้าไปในแนวคิดของ REST และวิธีที่เว็บมีจุดประสงค์ในการใช้งาน มีพอดคาสต์ที่ยอดเยี่ยมในวิทยุวิศวกรรมซอฟต์แวร์ที่ให้การพูดคุยเชิงลึกเกี่ยวกับการใช้ Get และ Post
รับใช้เพื่อดึงข้อมูลจากเซิร์ฟเวอร์ซึ่งไม่จำเป็นต้องดำเนินการอัพเดต ความคิดที่เป็นอยู่คือคุณควรจะสามารถใช้คำขอ GET เดียวกันซ้ำแล้วซ้ำอีกและได้รับข้อมูลเดียวกันกลับมา URL มีข้อมูลที่ได้รับในสตริงการสืบค้นเพราะมันหมายถึงสามารถส่งไปยังระบบอื่น ๆ ได้อย่างง่ายดายและผู้คนเช่นที่อยู่ในที่ที่จะหาบางสิ่งบางอย่าง
การโพสต์ควรจะใช้ (อย่างน้อยโดยสถาปัตยกรรม REST ซึ่งเป็นเว็บตาม kinda) สำหรับการผลักดันข้อมูลไปยังเซิร์ฟเวอร์ / บอกเซิร์ฟเวอร์เพื่อดำเนินการ ตัวอย่างเช่น: อัปเดตข้อมูลนี้สร้างระเบียนนี้
1.3 รายการตรวจสอบด่วนสำหรับการเลือก HTTP GET
หรือPOST
The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).
The interaction is more like an order, or
The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
The user be held accountable for the results of the interaction.
ฉันไม่เห็นปัญหาในการใช้รับ แต่ฉันใช้มันสำหรับสิ่งง่าย ๆ ที่มันเหมาะสมที่จะเก็บสิ่งต่าง ๆ ในสตริงการสืบค้น
การใช้เพื่ออัปเดตสถานะ - เช่นเดียวกับ GET ของdelete.php?id=5
เพื่อลบหน้า - มีความเสี่ยงมาก ผู้คนพบว่าเมื่อตัวเร่งความเร็วเว็บของ Google เริ่มดึง URL ล่วงหน้าบนหน้าเว็บมันจะไปถึงลิงก์ 'ลบ' ทั้งหมดและลบข้อมูลของผู้คนออกไป สิ่งเดียวกันสามารถเกิดขึ้นได้กับสไปเดอร์ของเครื่องมือค้นหา
POST สามารถย้ายข้อมูลขนาดใหญ่ได้ในขณะที่ GET ไม่สามารถทำได้
แต่โดยทั่วไปจะไม่เกี่ยวกับการย่อของ GET แต่เป็นการประชุมหากคุณต้องการให้เว็บไซต์ / เว็บแอปของคุณทำงานได้ดี
จากRFC 2616 :
9.3 GET
วิธี GET หมายถึงการดึงข้อมูลใด ๆ (ในรูปแบบของนิติบุคคล) ที่ระบุโดย Request-URI หาก Request-URI อ้างถึงกระบวนการผลิตข้อมูลมันเป็นข้อมูลที่ผลิตซึ่งจะถูกส่งคืนเป็นเอนทิตีในการตอบกลับไม่ใช่ข้อความต้นฉบับของกระบวนการยกเว้นว่าข้อความนั้นเป็นผลลัพธ์ของกระบวนการ
9.5 POST
วิธี POST ใช้เพื่อขอให้เซิร์ฟเวอร์ต้นทางยอมรับเอนทิตีที่อยู่ในคำขอเป็นผู้ใต้บังคับบัญชาใหม่ของทรัพยากรที่ระบุโดย Request-URI ใน Request-Line POST ได้รับการออกแบบมาเพื่อให้วิธีการแบบเดียวกันครอบคลุมฟังก์ชั่นต่อไปนี้:
- คำอธิบายประกอบของทรัพยากรที่มีอยู่;
- การโพสต์ข้อความไปยังกระดานข่าวกลุ่มข่าวสารรายชื่อผู้รับจดหมายหรือกลุ่มบทความที่คล้ายกัน
- การจัดเตรียมบล็อกข้อมูลเช่นผลลัพธ์ของการส่งแบบฟอร์มไปยังกระบวนการจัดการข้อมูล
- การขยายฐานข้อมูลผ่านการดำเนินการผนวก
ฟังก์ชั่นที่เกิดขึ้นจริงดำเนินการโดยวิธีการ POST จะถูกกำหนดโดยเซิร์ฟเวอร์และมักจะขึ้นอยู่กับ Request-URI เอนทิตีที่ถูกโพสต์นั้นเป็นสังกัดอยู่ใน URI นั้นในลักษณะเดียวกับที่ไฟล์นั้นถูกส่งไปยังไดเรกทอรีที่มีอยู่บทความข่าวจะถูกส่งไปยังกลุ่มข่าวสารที่โพสต์ไว้หรือบันทึกเป็นสังกัดในฐานข้อมูล
การกระทำที่ดำเนินการโดยวิธี POST อาจไม่ส่งผลให้เกิดทรัพยากรที่สามารถระบุได้โดย URI ในกรณีนี้ 200 (OK) หรือ 204 (ไม่มีเนื้อหา) เป็นสถานะการตอบสนองที่เหมาะสมขึ้นอยู่กับว่าการตอบสนองนั้นมีเอนทิตีที่อธิบายผลลัพธ์หรือไม่
ฉันใช้ POST เมื่อฉันไม่ต้องการให้คนอื่นเห็น QueryString หรือเมื่อ QueryString ใหญ่ขึ้น และต้องมี POST สำหรับการอัปโหลดไฟล์
ฉันไม่เห็นปัญหาในการใช้ GET แต่ฉันใช้มันสำหรับสิ่งง่าย ๆ ที่เหมาะสมกับการใช้ QueryString
การใช้ GET จะอนุญาตให้เชื่อมโยงไปยังหน้าใดหน้าหนึ่งโดยเฉพาะซึ่ง POST จะไม่ทำงาน
จุดประสงค์ดั้งเดิมคือใช้ GET เพื่อรับข้อมูลกลับมาและ POST จะเป็นอะไรก็ได้ กฎง่ายๆที่ฉันใช้คือถ้าฉันส่งอะไรกลับไปที่เซิร์ฟเวอร์ฉันใช้ POST ถ้าฉันแค่เรียก URL เพื่อรับข้อมูลฉันใช้ GET
อ่านบทความเกี่ยวกับ HTTP ในวิกิพีเดีย มันจะอธิบายว่าโปรโตคอลคืออะไรและทำอะไร:
GET
ร้องขอการแทนค่าของทรัพยากรที่ระบุ โปรดทราบว่า GET ไม่ควรใช้สำหรับการดำเนินการที่ก่อให้เกิดผลข้างเคียงเช่นใช้สำหรับการดำเนินการในเว็บแอปพลิเคชัน เหตุผลหนึ่งสำหรับเรื่องนี้คือ GET อาจถูกนำไปใช้โดยหุ่นยนต์หรือซอฟต์แวร์รวบรวมข้อมูลโดยไม่จำเป็นต้องพิจารณาผลข้างเคียงที่คำขอควรเกิดขึ้น
และ
POST ส่งข้อมูลที่จะประมวลผล (เช่นจากฟอร์ม HTML) ไปยังทรัพยากรที่ระบุ ข้อมูลจะรวมอยู่ในเนื้อหาของคำขอ ซึ่งอาจส่งผลให้เกิดการสร้างทรัพยากรใหม่หรือการปรับปรุงทรัพยากรที่มีอยู่หรือทั้งสองอย่าง
W3C มีเอกสารชื่อURIs, Addressability และการใช้ HTTP GET และ POSTที่อธิบายว่าจะใช้เมื่อใด การอ้างอิง
1.3 รายการตรวจสอบด่วนสำหรับการเลือก HTTP GET หรือ POST
- ใช้ GET หาก:
- การโต้ตอบนั้นเป็นเหมือนคำถาม (นั่นคือเป็นการทำงานที่ปลอดภัยเช่นแบบสอบถามการดำเนินการอ่านหรือการค้นหา)
และ
- ใช้ POST หาก:
- การโต้ตอบเป็นเหมือนคำสั่งซื้อหรือ
- การโต้ตอบเปลี่ยนสถานะของทรัพยากรในลักษณะที่ผู้ใช้จะรับรู้ (เช่นการสมัครใช้บริการ) หรือ o ผู้ใช้ต้องรับผิดชอบต่อผลของการโต้ตอบ
อย่างไรก็ตามก่อนการตัดสินใจขั้นสุดท้ายเพื่อใช้ HTTP GET หรือ POST โปรดพิจารณาข้อควรพิจารณาสำหรับข้อมูลที่ละเอียดอ่อนและข้อควรพิจารณาในทางปฏิบัติ
ตัวอย่างการปฏิบัติจะเป็นเมื่อใดก็ตามที่คุณส่งแบบฟอร์ม HTML คุณระบุว่าโพสต์หรือรับสำหรับการกระทำของแบบฟอร์ม PHP จะเติม $ _GET และ $ _POST ตามลำดับ
ใน PHP POST
ขีด จำกัด php.ini
ข้อมูลมักจะกำหนดโดยคุณ GET
ถูก จำกัด โดยการตั้งค่าเซิร์ฟเวอร์ / เบราว์เซอร์ที่ฉันเชื่อ - โดยปกติประมาณ255
ไบต์
จากw3schools.com :
HTTP คืออะไร
Hypertext Transfer Protocol (HTTP) ถูกออกแบบมาเพื่อเปิดใช้งานการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์
HTTP ทำงานเป็นโปรโตคอลตอบกลับคำขอระหว่างไคลเอนต์และเซิร์ฟเวอร์
เว็บเบราว์เซอร์อาจเป็นไคลเอนต์และแอปพลิเคชันบนคอมพิวเตอร์ที่โฮสต์เว็บไซต์อาจเป็นเซิร์ฟเวอร์
ตัวอย่าง: ไคลเอนต์ (เบราว์เซอร์) ส่งการร้องขอ HTTP ไปยังเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์จะส่งคืนการตอบกลับไปยังลูกค้า การตอบกลับมีข้อมูลสถานะเกี่ยวกับคำขอและอาจมีเนื้อหาที่ร้องขอ
วิธีการร้องขอ HTTP สองวิธี: GET และ POST
สองวิธีที่ใช้กันทั่วไปสำหรับการร้องขอการตอบสนองระหว่างไคลเอนต์และเซิร์ฟเวอร์คือ: GET และ POST
GET - ร้องขอข้อมูลจากทรัพยากรที่ระบุ POST - ส่งข้อมูลที่จะดำเนินการกับทรัพยากรที่ระบุ
ที่นี่เราแยกแยะความแตกต่างที่สำคัญ:
รุ่นที่เรียบง่ายของ POST GET PUT DELETE
สิ่งสำคัญอย่างหนึ่งคือทุกสิ่งที่คุณส่งGET
ไปจะถูกเปิดเผยผ่าน URL ประการที่สองที่ Ceejayoz พูดมีขีด จำกัด สำหรับอักขระสำหรับ URL
ข้อแตกต่างคือ POST โดยทั่วไปต้องการการดำเนินการ HTTP สองอย่างในขณะที่ GET ต้องการเพียงหนึ่ง
แก้ไข: ฉันควรชี้แจง - สำหรับรูปแบบการเขียนโปรแกรมทั่วไป โดยทั่วไปการตอบสนองต่อ POST ที่มีเว็บเพจ HTML ตรงขึ้นเป็นการออกแบบที่น่าสงสัยด้วยเหตุผลหลายประการซึ่งหนึ่งในนั้นน่ารำคาญ "คุณต้องส่งแบบฟอร์มนี้อีกครั้งคุณต้องการทำเช่นนั้นหรือไม่?" เมื่อกดปุ่มย้อนกลับ
expect: 100-continue
ส่วนหัวแล้วส่งข้อมูลเมื่อเซิร์ฟเวอร์ตอบกลับด้วย a 100 CONTINUE
เท่านั้น
ตามที่ผู้อื่นตอบมีข้อ จำกัด เกี่ยวกับขนาดของ URL ที่มีการรับและสามารถส่งไฟล์พร้อมโพสต์เท่านั้น
ฉันต้องการเพิ่มสิ่งนั้นสามารถเพิ่มสิ่งต่าง ๆ ในฐานข้อมูลด้วยการรับและดำเนินการกับโพสต์ เมื่อสคริปต์ได้รับโพสต์หรือรับก็สามารถทำสิ่งที่ผู้เขียนต้องการที่จะทำ ฉันเชื่อว่าการขาดความเข้าใจนั้นมาจากถ้อยคำในหนังสือที่เลือกหรือวิธีที่คุณอ่าน
ผู้เขียนสคริปต์ควรใช้โพสต์เพื่อเปลี่ยนฐานข้อมูลและใช้รับเฉพาะสำหรับการดึงข้อมูล
ภาษาสคริปต์มีวิธีการมากมายในการเข้าถึงการร้องขอ ตัวอย่างเช่น PHP อนุญาตให้ใช้$_REQUEST
เพื่อดึงโพสต์หรือรับ หนึ่งควรหลีกเลี่ยงปัญหานี้ในความโปรดปรานของเฉพาะเจาะจงมากขึ้นหรือ$_GET
$_POST
ในการเขียนโปรแกรมเว็บมีพื้นที่สำหรับการตีความมากขึ้น มีสิ่งใดที่ควรทำและสิ่งใดที่สามารถทำได้ แต่สิ่งที่ดีกว่ามักจะเป็นการอภิปราย โชคดีที่ในกรณีนี้ไม่มีความกำกวม คุณควรใช้โพสต์เพื่อเปลี่ยนข้อมูลและคุณควรใช้รับเพื่อดึงข้อมูล
Gorgapor, ยังมักจะใช้mod_rewrite
GET
มันช่วยให้การแปล URL ที่เป็นมิตรใน URL เป็นGET
สตริงการสืบค้น
ข้อมูล HTTP โพสต์ไม่มีข้อ จำกัด ตามปริมาณข้อมูลที่เบราว์เซอร์ต่าง ๆ มีข้อ จำกัด ที่แตกต่างกันสำหรับ GET RFC 2068 ระบุว่า:
เซิร์ฟเวอร์ควรระมัดระวังเกี่ยวกับความยาวของ URI ที่สูงกว่า 255 ไบต์เนื่องจากไคลเอนต์หรือพร็อกซีรุ่นเก่าบางรุ่นอาจไม่รองรับความยาวเหล่านี้อย่างเหมาะสม
คุณควรสร้าง HTTP ที่ถูกต้องสำหรับสิ่งที่พวกเขาใช้ HTTP GET ไม่ควรมีผลข้างเคียงและสามารถรีเฟรชและจัดเก็บได้อย่างปลอดภัยโดย HTTP Proxies ฯลฯ
HTTP POST's ถูกใช้เมื่อคุณต้องการส่งข้อมูลกับทรัพยากร url
ตัวอย่างทั่วไปสำหรับการใช้ HTTP GET นั้นอยู่ในการค้นหาเช่น Search? Query = แบบสอบถาม + ของฉันตัวอย่างทั่วไปสำหรับการใช้ HTTP POST กำลังส่งข้อเสนอแนะไปยังแบบฟอร์มออนไลน์