รับพารามิเตอร์ รับหรือโพสต์: จะเลือกอะไร? การสร้างคำขอ GET ด้วย PHP

แหล่งข้อมูลบนเว็บสมัยใหม่ไม่เพียงให้ข้อมูลแก่ผู้เยี่ยมชมเท่านั้น แต่ยังโต้ตอบกับเขาด้วย หากต้องการโต้ตอบกับผู้ใช้ คุณต้องได้รับข้อมูลบางอย่างจากเขา มีหลายวิธีในการรับข้อมูล วิธีการทั่วไปคือ รับและ โพสต์- และตามนั้นค่ะ PHPมีการรองรับวิธีการถ่ายโอนข้อมูลเหล่านี้ รับและ โพสต์- เรามาดูกันว่าวิธีการเหล่านี้ทำงานอย่างไร
วิธีการรับข้อมูล วิธีการรับจะถูกส่งผ่านโดยการเพิ่มลงใน URL ของสคริปต์ที่ถูกเรียกใช้เพื่อประมวลผลข้อมูลที่ได้รับ เพื่อชี้แจง วิธีนี้โทรเข้า แถบที่อยู่ URL เบราว์เซอร์ของทรัพยากรและเพิ่มเครื่องหมายคำถาม (?) ก่อน จากนั้นตามด้วยบรรทัด num=10 ตัวอย่างเช่น

http://domain.ru/script.php?num=10


ถ้าคุณมี เซิร์ฟเวอร์ท้องถิ่นโดยปกติแล้วโดเมนจะเป็น localhost และรายการก่อนหน้าจะมีลักษณะดังนี้

http://localhost/script.php?num=10


ในกรณีนี้ เราจะส่งพารามิเตอร์ num เท่ากับ 10 หากต้องการเพิ่มพารามิเตอร์ต่อไปนี้ สคริปต์จำเป็นต้องใช้ตัวคั่นเครื่องหมายและ (&) เป็นต้น

http://domain.ru/script.php?num=10&type=new&v=text


ในกรณีนี้ เราได้ส่งพารามิเตอร์สามตัวไปยังสคริปต์: num ด้วยค่า 10 พิมพ์ด้วยค่า "new" และ v ด้วยค่า "text"
ในการรับพารามิเตอร์เหล่านี้ในสคริปต์ คุณต้องใช้อาร์เรย์ในตัว $_GET $_GET["หมายเลข"], $_GET["ประเภท"],$_GET["v"]- องค์ประกอบอาร์เรย์เหล่านี้จะมีค่าของพารามิเตอร์ที่ส่งผ่าน เพื่อสาธิตตัวอย่างนี้ ให้สร้างไฟล์ script.php โดยมีเนื้อหาดังต่อไปนี้



ตรวจสอบวิธีการ GET ใน PHP


เสียงสะท้อน ($_GET["หมายเลข"]"
");
เสียงสะท้อน ($_GET["ประเภท"]"
");
เสียงสะท้อน ($_GET["v"]);
?>




และตอนนี้เรียกไฟล์นี้ในเบราว์เซอร์

http://path/script.php?num=10&type=new&v=text


และคุณจะเห็นพารามิเตอร์ที่ส่งผ่านในหน้าต่างเบราว์เซอร์ แต่ถ้าคุณเรียกไฟล์นี้โดยไม่มี พารามิเตอร์เพิ่มเติม http://path/script.php คุณจะเห็นข้อผิดพลาดที่ล่ามจะสร้างขึ้น PHPว่าไม่มีองค์ประกอบดังกล่าวของอาร์เรย์ $_GET สามารถตรวจสอบข้อมูลที่ได้รับจากผู้ใช้ได้มากกว่าหนึ่งบทความ ดังนั้นในบทความนี้ ฉันจะไม่พูดถึงประเด็นนี้
ดังที่คุณคงเข้าใจแล้วว่าการบังคับให้ผู้ใช้พิมพ์ข้อมูลในแถบที่อยู่ของเบราว์เซอร์นั้นไม่ดีนักและไม่สะดวกอย่างยิ่ง ดังนั้นในการรับข้อมูลจากผู้ใช้คุณต้องใช้แบบฟอร์ม html มาเขียนแบบฟอร์ม html ง่ายๆ กัน


ใส่หมายเลข

คุณมีคอมพิวเตอร์ไหม?

ความคิดเห็นของคุณ:





ฉันขอแสดงความคิดเห็นเล็กน้อยเกี่ยวกับแบบฟอร์มที่สร้างขึ้น แบบฟอร์มถูกสร้างขึ้นด้วยแท็กแบบฟอร์ม ฟิลด์แบบฟอร์มถูกสร้างขึ้นโดยใช้อินพุต เลือก แท็กพื้นที่ข้อความ (คุณสามารถอ่านเพิ่มเติมได้) ในแท็กแบบฟอร์ม แอตทริบิวต์การดำเนินการระบุ URL ของสคริปต์ที่จะได้รับข้อมูลแบบฟอร์ม ในกรณีของเรา เราได้ระบุไฟล์ script.php ที่มีอยู่แล้ว คุณลักษณะ method ระบุวิธีการส่งข้อมูล เราได้ระบุวิธีการแล้ว รับ- ตอนนี้เรารู้แล้วว่าข้อมูลในแบบฟอร์มจะถูกถ่ายโอนไปยังไฟล์ใดและสิ่งที่เหลืออยู่ก็คือการค้นหาว่าจะค้นหาได้จากที่ไหน!
ข้อมูลแบบฟอร์มนี้จะถูกส่งไปยังทรัพยากรบนเว็บโดยเบราว์เซอร์โดยผนวกเข้ากับ URL: ก่อนอื่นจะมีเครื่องหมายคำถาม (?) จากนั้นพารามิเตอร์จะถูกนำเสนอโดยคั่นด้วยเครื่องหมายแอมเปอร์แซนด์ (&) ชื่อของพารามิเตอร์จะนำมาจากแอตทริบิวต์ name ซึ่งจะต้องระบุสำหรับฟิลด์แบบฟอร์มใดๆ ค่าของพารามิเตอร์จะขึ้นอยู่กับประเภทฟิลด์ หากช่องนั้นเป็นช่องข้อความ ค่าจะเป็นข้อความที่ผู้ใช้ป้อน หากฟิลด์นั้นเป็นรายการ กลุ่มของปุ่มตัวเลือกหรือกล่องกาเครื่องหมาย ค่าของพารามิเตอร์จะเป็นค่าของแอตทริบิวต์ค่าขององค์ประกอบที่เลือก ให้ฉันอธิบายโดยใช้แบบฟอร์มของเราเป็นตัวอย่าง หากผู้ใช้ป้อนหมายเลข 10 ในช่องป้อนข้อมูล ชื่อของพารามิเตอร์จะเป็น num (ค่าของแอตทริบิวต์ชื่อแท็กอินพุต) และค่าจะเป็น 10 (ตัวเลขที่ป้อนโดยผู้ใช้) ดังนั้นเบราว์เซอร์จะสร้างคู่ "num=10" หากผู้ใช้เลือกตัวเลือก "ใช่" จากรายการ ชื่อของพารามิเตอร์จะถูกพิมพ์ (ค่าของแอตทริบิวต์ชื่อของแท็กที่เลือก) และค่าจะเป็นใช่ (ค่าของแอตทริบิวต์ค่าของตัวเลือก แท็ก) ดังนั้นเบราว์เซอร์จะสร้างคู่ "type=yes"
ตอนนี้เราจะวางแบบฟอร์มนี้ในหน้า forma.php



แบบฟอร์มการส่งข้อมูลโดยใช้วิธี GET และ PHP



ใส่หมายเลข

คุณมีคอมพิวเตอร์ไหม?

ความคิดเห็นของคุณ:









ป้อนค่าใด ๆ ในช่องแบบฟอร์มแล้วคลิกปุ่ม "ส่ง" หลังจากคลิกปุ่ม เบราว์เซอร์จะเปิดหน้าอื่น (script.php) และข้อมูลที่คุณป้อนจะปรากฏในหน้าต่างเบราว์เซอร์ ฉันคิดว่ามันชัดเจนว่าทำไม: เบราว์เซอร์จะส่งข้อมูลไปยังสคริปต์ script.php และในสคริปต์ข้อมูลนี้จะถูกประมวลผลและแสดงบนหน้าจอ
วิธีการโพสต์ตอนนี้เรามาดูวิธีการทำงานกัน โพสต์.
ในการส่งข้อมูลโดยใช้ โพสต์คุณต้องใช้แบบฟอร์ม HTML ดังที่เราจำได้ว่าแอตทริบิวต์ method ของแท็ก form มีหน้าที่รับผิดชอบในการส่งข้อมูลแบบฟอร์ม ดังนั้น คุณต้องระบุค่า POST ในแอตทริบิวต์ method ของแท็กแบบฟอร์ม มิฉะนั้น แบบฟอร์มอาจเหมือนกับวิธี GET มาเปลี่ยนแบบฟอร์มของเราซึ่งเราได้ใช้ในการถ่ายโอนข้อมูลโดยใช้วิธี GET แล้วเพื่อถ่ายโอนโดยใช้วิธี POST


ใส่หมายเลข

คุณมีคอมพิวเตอร์ไหม?

ความคิดเห็นของคุณ:





อย่างที่คุณเห็น แบบฟอร์มยังคงเหมือนเดิม ยกเว้นแอตทริบิวต์วิธีการและการดำเนินการ ตอนนี้ข้อมูลจะถูกส่งไปยังสคริปต์ script_post.php มาวางแบบฟอร์มของเราในหน้า forma_post.php



แบบฟอร์มการส่งข้อมูลโดยใช้วิธี POST และ PHP



ใส่หมายเลข

คุณมีคอมพิวเตอร์ไหม?

ความคิดเห็นของคุณ:









ตอนนี้เราต้องเขียนสคริปต์ที่จะประมวลผลข้อมูลในแบบฟอร์มของเรา
เพื่อรับข้อมูลในสคริปต์โดยใช้วิธีการส่งผ่าน โพสต์จำเป็นต้องใช้อาร์เรย์ในตัว $_โพสต์- คีย์ของอาร์เรย์นี้จะเป็นชื่อของพารามิเตอร์ ในกรณีของเราเราจำเป็นต้องใช้ $_POST["หมายเลข"], $_POST["ประเภท"],$_POST["v"]- องค์ประกอบอาร์เรย์เหล่านี้จะมีค่าของข้อมูลที่ถ่ายโอน ดังที่คุณเห็น ความแตกต่างจากการใช้วิธี GET จะแสดงเฉพาะในการใช้อาร์เรย์ $_POST เท่านั้น ดังนั้นจึงไม่ใช่เรื่องยากสำหรับเราที่จะเขียนไฟล์ script_post.php:



ตรวจสอบวิธีการ POST ใน PHP


เสียงสะท้อน ($_POST ["หมายเลข"]"
");
เสียงสะท้อน ($_POST["ประเภท"]"
");
เสียงสะท้อน ($_POST["v"]);
?>




ตอนนี้เปิดไฟล์ forma_post.php ในเบราว์เซอร์ของคุณ ป้อนข้อมูลบางส่วนลงในช่องแบบฟอร์มแล้วคลิกปุ่ม "ส่ง" ตอนนี้คุณอาจสังเกตเห็นความแตกต่างระหว่างวิธี POST และวิธี GET - ข้อมูลแบบฟอร์มไม่ปรากฏในแถบที่อยู่ของเบราว์เซอร์ ข้อมูลตามวิธี โพสต์ไม่สามารถส่งผ่านแถบที่อยู่ของเบราว์เซอร์ นี่คือความแตกต่างที่สำคัญที่ต้องจำ
ใน PHPไม่ว่าข้อมูลจะถูกส่งด้วยวิธีใด - วิธี POST หรือวิธี GET - คุณสามารถรับข้อมูลได้โดยใช้อาร์เรย์ $_REQUEST การเปรียบเทียบวิธี GET และ POSTเมื่อใช้วิธีการ GET ข้อมูลจะถูกถ่ายโอนโดยการต่อท้าย URL ดังนั้นผู้ใช้จะมองเห็นสิ่งเหล่านี้ได้ ซึ่งไม่ได้ดีเสมอไปจากมุมมองด้านความปลอดภัย นอกจากนี้ จำนวนข้อมูลสูงสุดที่ถ่ายโอนจะขึ้นอยู่กับเบราว์เซอร์ - จำนวนอักขระสูงสุดที่อนุญาตในแถบที่อยู่ของเบราว์เซอร์
เมื่อใช้วิธีการ POST ข้อมูลจะไม่ปรากฏแก่ผู้ใช้ (ไม่แสดงในแถบที่อยู่ของเบราว์เซอร์) ดังนั้นจึงมีความปลอดภัยมากขึ้นและด้วยเหตุนี้โปรแกรมที่ประมวลผลข้อมูลนี้จึงได้รับการปกป้องมากขึ้นในแง่ของความปลอดภัย นอกจากนี้ปริมาณข้อมูลที่ส่งยังไม่จำกัดอีกด้วย
เมื่อเลือกวิธีการถ่ายโอนข้อมูล คุณจะต้องคำนึงถึงคุณสมบัติข้างต้นและเลือกวิธีที่เหมาะสมที่สุด

อัปเดตครั้งล่าสุด: 11/11/2558

เมธอด get ทำการร้องขอ GET ไปยังเซิร์ฟเวอร์ กล่าวคือ ข้อมูลคำขอทั้งหมดจะถูกส่งผ่านในสตริงการสืบค้น ยอมรับพารามิเตอร์ต่อไปนี้:

    url: พารามิเตอร์ที่จำเป็นซึ่งมีที่อยู่ของทรัพยากรที่คำขอจะเข้าถึง

    ข้อมูล: พารามิเตอร์ทางเลือกที่มีแบบง่าย วัตถุจาวาสคริปต์หรือสตริงที่จะถูกส่งไปยังเซิร์ฟเวอร์พร้อมกับคำขอ

    Success(data, textStatus, jqXHR) : พารามิเตอร์ทางเลือก - ฟังก์ชันโทรกลับที่จะดำเนินการเมื่อคำขอสำเร็จ สามารถใช้พารามิเตอร์ได้สามตัว: data - ข้อมูลที่ได้รับจากเซิร์ฟเวอร์, textStatus - สถานะคำขอ และ jqXHR - ออบเจ็กต์ jQuery พิเศษที่แสดงถึงเวอร์ชันขยายของออบเจ็กต์ XMLHttpRequest.

    dataType: พารามิเตอร์ทางเลือกที่มีประเภทข้อมูลเป็นสตริง เช่น "xml" หรือ "json"

ในเอาต์พุต เมธอด get ส่งคืนอ็อบเจ็กต์ jqXHR ที่จะห่อหุ้มข้อมูลคำขอ เราจะดูรายละเอียดเพิ่มเติมที่วัตถุนี้ในภายหลัง

ดังนั้น เรามาเขียนตัวอย่างจากย่อหน้าก่อนหน้าใหม่โดยใช้เมธอด get:

$(function())( $("button").click(function())( $.get("ajax.php", function(data) ( $("#news").html(data); แจ้งเตือน (" โหลดข้อมูลแล้ว");

มีการใช้พารามิเตอร์สองตัวแรกที่นี่: ที่อยู่ทรัพยากรและฟังก์ชันการโทรกลับ ในฟังก์ชันนี้ เราได้รับข้อมูลที่ได้รับจากเซิร์ฟเวอร์เป็นพารามิเตอร์ข้อมูล และโหลดเป็นมาร์กอัปลงในองค์ประกอบการเลือก ($("#news").html(data);) โดยพื้นฐานแล้วเราสามารถทำสิ่งเดียวกันได้โดยใช้วิธีการโหลด

กำลังส่งข้อมูล

การใช้พารามิเตอร์ data ทำให้เราสามารถส่งข้อมูลเพิ่มเติมได้ ตัวอย่างเช่น คุณสามารถส่งคำขอเพื่อดึงองค์ประกอบจากฐานข้อมูลโดยใช้รหัส:

$.get("ajax.php", ( id: "1"));

และเนื่องจากในคำขอ GET ข้อมูลทั้งหมดจะถูกส่งในบรรทัดแบบสอบถาม รหัสนี้จะคล้ายกับดังต่อไปนี้:

$.get("ajax.php?id=1");

ดังนั้นทางฝั่งเซิร์ฟเวอร์เราสามารถรับพารามิเตอร์นี้และดำเนินการบางอย่างกับมันได้ ตัวอย่างเช่น รับองค์ประกอบจากฐานข้อมูลสำหรับรหัสที่กำหนด:

การใช้ชนิดข้อมูล

สถานการณ์นี้มักเกิดขึ้นเมื่อเซิร์ฟเวอร์ส่งข้อมูลในรูปแบบใดรูปแบบหนึ่ง เช่น json หรือ xml ดังนั้นไฟล์ php บนฝั่งเซิร์ฟเวอร์อาจมีลักษณะดังนี้:

"เริ่มการแข่งขันชิงแชมป์รัสเซีย", "date"=>"07/13/2013")); -

ในกรณีนี้จะส่งคืนวัตถุ json จากนั้นในฝั่งไคลเอ็นต์เราสามารถระบุประเภทข้อมูลได้อย่างชัดเจนและประมวลผลข้อมูลที่ได้รับในฟังก์ชัน:

$.get("ajax.php", function(data) ($("#news").empty().append("

โพสต์นี้เป็นคำตอบสำหรับคำถามที่ถามในบทความของฉัน

ในบทความนี้ ฉันอยากจะบอกคุณว่าวิธี HTTP GET/POST/PUT/DELETE คืออะไร และวิธีอื่นๆ คืออะไร เหตุใดจึงคิดค้นวิธีเหล่านี้ขึ้นมา และใช้งานอย่างไรตาม REST

HTTP

ดังนั้นหนึ่งในโปรโตคอลหลักของอินเทอร์เน็ตคืออะไร? ฉันจะส่งคนอวดรู้ไปที่ RFC2616 แล้วฉันจะบอกส่วนที่เหลืออย่างมนุษย์ปุถุชน :)

โปรโตคอลนี้อธิบายปฏิสัมพันธ์ระหว่างคอมพิวเตอร์สองเครื่อง (ไคลเอนต์และเซิร์ฟเวอร์) ที่สร้างขึ้นบนพื้นฐานของข้อความที่เรียกว่าคำขอ (คำขอ) และการตอบสนอง (การตอบสนอง) แต่ละข้อความประกอบด้วยสามส่วน: บรรทัดเริ่มต้น ส่วนหัว และเนื้อหา ในกรณีนี้ ต้องใช้เฉพาะเส้นเริ่มต้นเท่านั้น

บรรทัดเริ่มต้นสำหรับคำขอและการตอบกลับมีรูปแบบที่แตกต่างกัน - เราสนใจเฉพาะบรรทัดเริ่มต้นของคำขอเท่านั้น ซึ่งมีลักษณะดังนี้:

URI วิธีการ HTTP/ รุ่น ,

โดยที่ METHOD คือวิธีการร้องขอ HTTP, URI คือตัวระบุทรัพยากร, VERSION คือเวอร์ชันโปรโตคอล (สำหรับ ในขณะนี้เวอร์ชัน 1.1 เป็นเวอร์ชันปัจจุบัน)

ส่วนหัวคือชุดของคู่ชื่อ-ค่าที่คั่นด้วยเครื่องหมายทวิภาค ส่วนหัวถ่ายทอดข้อมูลบริการต่างๆ: การเข้ารหัสข้อความ ชื่อและเวอร์ชันของเบราว์เซอร์ ที่อยู่ที่ลูกค้ามา (ผู้อ้างอิง) และอื่นๆ

เนื้อความของข้อความคือข้อมูลจริงที่ถูกส่ง ในการตอบกลับ ตามกฎแล้วข้อมูลที่ส่งคือหน้า HTML ที่เบราว์เซอร์ร้องขอ และในคำขอ เช่น ในเนื้อความของข้อความ เนื้อหาของไฟล์ที่อัปโหลดไปยังเซิร์ฟเวอร์จะถูกส่ง แต่ตามกฎแล้ว จะไม่มีเนื้อหาข้อความในคำขอเลย

ตัวอย่างการโต้ตอบ HTTP

ลองดูตัวอย่าง

ขอ:
GET /index.php HTTP/1.1 โฮสต์: example.com ตัวแทนผู้ใช้: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 ยอมรับ: ข้อความ/html การเชื่อมต่อ: ปิด
บรรทัดแรกคือบรรทัดแบบสอบถาม ส่วนที่เหลือเป็นส่วนหัว เนื้อหาข้อความหายไป

คำตอบ:
HTTP/1.0 200 ตกลง เซิร์ฟเวอร์: nginx/0.6.31 ภาษาเนื้อหา: ru ประเภทเนื้อหา: ข้อความ/html; charset=utf-8 Content-Length: 1234 Connection: close ... หน้า HTML เอง...

ทรัพยากรและวิธีการ

กลับไปที่บรรทัดเริ่มต้นของคำขอและจำไว้ว่าคำขอนั้นมีพารามิเตอร์เช่น URI ซึ่งย่อมาจาก Uniform Resource Identifier - ตัวระบุทรัพยากรแบบเดียวกัน ตามกฎแล้วทรัพยากรคือไฟล์บนเซิร์ฟเวอร์ (ตัวอย่าง URI ในกรณีนี้คือ “/styles.css”) แต่โดยทั่วไปแล้วทรัพยากรอาจเป็นวัตถุนามธรรม (“/blogs/webdev/” - จุด ไปยังการพัฒนาบล็อก "เว็บ"" แทนที่จะเป็นไฟล์เฉพาะ)

ประเภทคำขอ HTTP (หรือที่เรียกว่าวิธี HTTP) จะบอกเซิร์ฟเวอร์ว่าเราต้องการดำเนินการใดกับทรัพยากร ในตอนแรก (ต้นทศวรรษที่ 90) สันนิษฐานว่าลูกค้าต้องการเพียงสิ่งเดียวจากทรัพยากร - เพื่อรับมัน แต่ตอนนี้ใช้โปรโตคอล HTTP คุณสามารถสร้างโพสต์ แก้ไขโปรไฟล์ ลบข้อความ และอื่นๆ อีกมากมาย และการกระทำเหล่านี้ยากที่จะรวมกับคำว่า "การรับ"

เพื่อแยกแยะการกระทำจากทรัพยากรในระดับวิธี HTTP จึงมีการสร้างตัวเลือกต่อไปนี้:

  • GET - รับทรัพยากร
  • POST - การสร้างทรัพยากร
  • PUT - อัปเดตทรัพยากร
  • DELETE - การลบทรัพยากร
โปรดทราบว่าข้อกำหนด HTTP ไม่ต้องการให้เซิร์ฟเวอร์เข้าใจวิธีการทั้งหมด (ซึ่งจริงๆ แล้วมีมากกว่า 4 วิธี) - ต้องใช้เพียง GET เท่านั้น และยังไม่ได้บอกเซิร์ฟเวอร์ว่าควรทำอย่างไรเมื่อได้รับคำขอด้วยวิธีการเฉพาะ วิธี. ซึ่งหมายความว่าเซิร์ฟเวอร์ตอบสนองต่อคำขอ DELETE /index.php HTTP/1.1 ไม่จำเป็นลบหน้า index.php บนเซิร์ฟเวอร์ เช่นเดียวกับคำขอ GET /index.php HTTP/1.1 ไม่จำเป็นคืนหน้า index.php ให้คุณ ก็สามารถลบทิ้งได้ เช่น :)

ส่วนที่เหลือเข้ามามีบทบาท

REST (Representational State Transfer) เป็นคำที่ Roy Fielding หนึ่งในผู้พัฒนาโปรโตคอล HTTP เปิดตัวในปี 2000 เป็นชื่อของกลุ่มหลักการในการสร้างเว็บแอปพลิเคชัน โดยทั่วไป REST ครอบคลุมพื้นที่กว้างกว่า HTTP - สามารถใช้ในเครือข่ายอื่นที่มีโปรโตคอลอื่นได้เช่นกัน REST อธิบายหลักการของการโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์ ตามแนวคิดของ "ทรัพยากร" และ "กริยา" (สามารถเข้าใจได้ว่าเป็นเรื่องและภาคแสดง) ในกรณีของ HTTP ทรัพยากรจะถูกระบุโดย URI และคำกริยาคือวิธี HTTP

REST แนะนำให้ละทิ้งการใช้ URI เดียวกันสำหรับทรัพยากรที่แตกต่างกัน (นั่นคือ ที่อยู่ของบทความสองบทความที่แตกต่างกัน เช่น /index.php?article_id=10 และ /index.php?article_id=20 - นี่ไม่ใช่วิธี REST) ​​และ โดยใช้วิธี HTTP ที่แตกต่างกันสำหรับ การกระทำที่แตกต่างกัน- นั่นคือเว็บแอปพลิเคชันที่เขียนโดยใช้วิธี REST จะลบทรัพยากรเมื่อเข้าถึงด้วยวิธี HTTP DELETE (แน่นอนว่านี่ไม่ได้หมายความว่าจำเป็นต้องให้โอกาสในการลบทุกอย่างและทุกคน แต่ ใดๆคำขอลบของแอปพลิเคชันต้องใช้วิธี HTTP DELETE)

REST ช่วยให้โปรแกรมเมอร์สามารถเขียนเว็บแอปพลิเคชันที่ได้มาตรฐานและสวยงามกว่าเดิมเล็กน้อย เมื่อใช้ REST URI ที่จะเพิ่มผู้ใช้ใหม่จะไม่ใช่ /user.php?action=create (วิธี GET/POST) แต่เป็นเพียงแค่ /user.php (วิธี POST อย่างเคร่งครัด)

ด้วยเหตุนี้ เมื่อรวมข้อกำหนด HTTP ที่มีอยู่และวิธีการ REST เข้าด้วยกัน วิธี HTTP ต่างๆ ก็สมเหตุสมผลในที่สุด GET - ส่งคืนทรัพยากร, POST - สร้างทรัพยากรใหม่, PUT - อัปเดตทรัพยากรที่มีอยู่, DELETE - ลบออก

ปัญหา?

ใช่ มีปัญหาเล็กน้อยกับการใช้ REST ในทางปฏิบัติ ปัญหานี้เรียกว่า HTML

สามารถส่งคำขอ PUT/DELETE ได้โดยใช้ XMLHttpRequest โดยติดต่อกับเซิร์ฟเวอร์ด้วยตนเอง (เช่น ผ่าน curl หรือแม้แต่ผ่านทาง telnet) แต่คุณไม่สามารถสร้างแบบฟอร์ม HTML ที่ส่งคำขอ PUT/DELETE แบบเต็มได้

ประเด็นก็คือ ข้อกำหนด HTML ไม่อนุญาตให้คุณสร้างแบบฟอร์มที่ส่งข้อมูลอื่นนอกเหนือจากผ่าน GET หรือ POST ดังนั้นในการทำงานตามปกติกับวิธีอื่นคุณต้องเลียนแบบวิธีเหล่านั้นแบบเทียม ตัวอย่างเช่นใน Rack (กลไกบนพื้นฐานของการที่ Ruby โต้ตอบกับเว็บเซิร์ฟเวอร์ Rails, Merb และเฟรมเวิร์ก Ruby อื่น ๆ ถูกสร้างขึ้นโดยใช้ Rack) คุณสามารถเพิ่มฟิลด์ที่ซ่อนอยู่ลงในแบบฟอร์มด้วยชื่อ "_method" และ ระบุชื่อของวิธีการเป็นค่า (เช่น "PUT") - ในกรณีนี้ คำขอ POST จะถูกส่งไป แต่ Rack จะสามารถแกล้งทำเป็นว่าได้รับ PUT แทนที่จะเป็น POST

ปัจจุบันมีการใช้ HTTP เพียงสองวิธีเท่านั้น: GET และ POST แต่ปรากฎว่าแม้ในหมู่นักพัฒนาเว็บ "ต้นสน" ทั้งสองนี้ก็ยังหลงทางได้ มีคำอธิบายสำหรับสิ่งนี้: สามารถใช้ทั้งสองวิธีเพื่อให้ได้ผลลัพธ์ที่เหมือนกัน แต่เราต้องจำไว้ว่าการใช้วิธีใดวิธีหนึ่งโดยไม่ไตร่ตรองสามารถนำไปสู่ผลที่ตามมาร้ายแรง รวมถึงภาระหนักบนช่องสัญญาณและช่องโหว่ด้านความปลอดภัย

เพื่อหลีกเลี่ยงปัญหานี้ก็เพียงพอแล้วที่จะเข้าใจรายละเอียดเพิ่มเติมเกี่ยวกับวัตถุประสงค์และความแตกต่างของวิธีการเหล่านี้

หากคุณเจาะลึกถึงความหมายของชื่อวิธีการต่างๆ จะชัดเจนขึ้นมากมาย GET (จากภาษาอังกฤษเป็นรับ) เช่น ควรใช้ในการสืบค้นข้อมูล POST (จากภาษาอังกฤษส่งทางไปรษณีย์) - ใช้เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ ดูเหมือนทุกอย่างจะเรียบง่ายและชัดเจนมาก แต่ใครอยากพัฒนาเว็บไซต์ให้ซับซ้อนกว่าเว็บไซต์นามบัตรที่มีรูปแบบเดียวบ้าง? ข้อเสนอแนะเป็นการดีกว่าที่จะรู้คำถามมากขึ้น

คำขอ HTTP ที่ปลอดภัยและไม่ปลอดภัย

ข้อกำหนด HTTP 1.1 นำเสนอแนวคิดสองประการ: คำขอที่ปลอดภัยและไม่ปลอดภัย หรือให้เจาะจงกว่านั้นคือวิธีการ

วิธีที่ปลอดภัยคือวิธีการที่สามารถขอข้อมูลได้เท่านั้น พวกเขาไม่สามารถเปลี่ยนแปลงทรัพยากรที่ร้องขอ และไม่สามารถนำไปสู่ผลลัพธ์ที่ไม่พึงประสงค์สำหรับผู้ใช้ ผู้อื่น หรือเซิร์ฟเวอร์ ตัวอย่างที่ปลอดภัยกำลังขอรหัส HTML ของหน้าเว็บหรือรูปภาพ วิธีการที่ปลอดภัย ได้แก่ HEAD และ GET

บันทึก

ในความเป็นจริง ช่างฝีมือสามารถก่อให้เกิดอันตรายกับคำขอ GET ได้ ตัวอย่างเช่น คิวรีลูป

ข้อความค้นหาที่ไม่ปลอดภัยตามที่ทุกคนคาดเดากันอยู่แล้ว อาจนำไปสู่ผลเสียหากใช้อีกครั้ง คำขอดังกล่าวอาจเปลี่ยนแปลงเนื้อหาของทรัพยากรที่กำลังเข้าถึง ตัวอย่างคำขอดังกล่าว: การส่งข้อความ การลงทะเบียน การชำระเงินออนไลน์ วิธีการที่ไม่ปลอดภัย ได้แก่ POST, PUT, DELETE

วิธีการแบบไร้อำนาจ

Idempotency เป็นคุณสมบัติของเมธอดที่มีการเรียกซ้ำหลายครั้ง จะให้ผลลัพธ์เดียวกัน ยกเว้นในกรณีที่ข้อมูลล้าสมัย ซึ่งหมายความว่าเมื่อเข้าถึง URL เดียวกัน ผู้ใช้ทุกคนจะเห็นหน้าเว็บ รูปภาพ วิดีโอ ฯลฯ เดียวกัน วิธีการ GET, PUT, DELETE มีคุณสมบัตินี้

และตอนนี้เกี่ยวกับตัวเรามากขึ้น รับวิธีการและ POST: เราจะเขียน “เรซูเม่” สั้น ๆ ให้กับทุกคน

รับ

  • ออกแบบมาเพื่อรับข้อมูลจากเซิร์ฟเวอร์
  • เนื้อความคำขอว่างเปล่า
  • ประมวลผลทางฝั่งเซิร์ฟเวอร์เร็วขึ้นและใช้ทรัพยากรเซิร์ฟเวอร์น้อยลงเนื่องจากเนื้อหาคำขอว่างเปล่า
  • การถ่ายโอนตัวแปรเกิดขึ้นในแถบที่อยู่ (นี่คือวิธีที่ผู้ใช้เห็น ในทางเทคนิคแล้วข้อมูลจะถูกส่งในบรรทัดแบบสอบถาม) ดังนั้นข้อมูลเกี่ยวกับตัวแปรและค่าของตัวแปรจึงมองเห็นได้ (ข้อมูลไม่ได้รับการป้องกัน)
  • สามารถถ่ายโอนข้อมูลจำนวนเล็กน้อยไปยังเซิร์ฟเวอร์ได้: ความยาวของ URL มีข้อจำกัดซึ่งขึ้นอยู่กับเบราว์เซอร์ เช่น IE6 = 2Kb นักพัฒนา Yahoo!
  • สามารถส่งได้เฉพาะอักขระ ASCII เท่านั้น
  • คำขอดังกล่าวสามารถคัดลอกและบันทึกได้ (เช่น ในบุ๊กมาร์ก)
  • สามารถแคชคำขอได้ (สามารถควบคุมได้)
  • เพื่อลดภาระบนช่องสัญญาณและเซิร์ฟเวอร์เพิ่มเติม มีการร้องขอแบบมีเงื่อนไขและบางส่วน
  • ไม่ทำลายการเชื่อมต่อ HTTP (หากเปิดใช้งานโหมด KeepAlive บนเซิร์ฟเวอร์)

โพสต์

  • มีไว้สำหรับส่งข้อมูลไปยังเซิร์ฟเวอร์
  • การถ่ายโอนข้อมูลเกิดขึ้นในเนื้อหาของคำขอ
  • การประมวลผลฝั่งเซิร์ฟเวอร์ช้ากว่าและ "หนัก" มากกว่า GET เนื่องจากนอกเหนือจากส่วนหัวแล้ว จะต้องวิเคราะห์เนื้อหาของคำขอด้วย
  • สามารถส่งข้อมูลจำนวนมากได้
  • สามารถถ่ายโอนไฟล์ได้
  • เพจที่สร้างโดยวิธี POST ไม่สามารถบันทึกเป็นที่คั่นหน้าได้
  • ตัดการเชื่อมต่อ HTTP;
  • ในการส่งข้อมูลในปริมาณที่น้อยมาก เบราว์เซอร์ส่วนใหญ่จะส่งแพ็กเก็ต TCP อย่างน้อยสองแพ็กเก็ต: ส่วนหัวและเนื้อหาของคำขอ

ปรากฎว่าทั้งสองวิธีนี้ไม่คล้ายกันมากนัก การใช้งานอย่างใดอย่างหนึ่งควรถูกกำหนดโดยงานที่มีอยู่ และไม่ใช่ตามข้อเท็จจริงที่ว่า GET ถูกใช้เป็นค่าเริ่มต้นหรือใช้งานได้ง่ายกว่า แน่นอนว่า GET เป็นตัวเลือกที่ดีกว่าในกรณีส่วนใหญ่ โดยเฉพาะอย่างยิ่งเมื่อสร้าง AJAX ที่รวดเร็ว แต่อย่าลืมข้อเสียของมันด้วย สำหรับตัวฉันเอง ฉันได้ทำบันทึกอัลกอริธึมง่ายๆ ในการเลือกวิธีการ

การสร้างมาตรฐานอินเทอร์เน็ตเว็บ 2.0 ช่วยให้ผู้ใช้ไม่เพียงรับข้อมูลเท่านั้น แต่ยังโต้ตอบกับผู้ใช้รายอื่นและบริการอินเทอร์เน็ตได้อีกด้วย เพื่อจัดระเบียบข้อเสนอแนะดังกล่าวใน ภาษา HTMLมีการแนะนำแท็กเพิ่มเติมเพื่อให้สามารถส่งข้อมูลที่ร้องขอไปยังเซิร์ฟเวอร์ได้ เช่น อาจเป็นแบบฟอร์มลงทะเบียน หรือแบบฟอร์มแสดงความคิดเห็น หรือตั้งค่าบัญชีส่วนตัว (หน้า เครือข่ายทางสังคม) ฯลฯ ในบทนี้ เราจะดูชุดแท็กที่ช่วยให้คุณสามารถจัดระเบียบการโต้ตอบของผู้ใช้กับไซต์ได้

6.1. คำขอ GET และ POST

เพื่อจัดระเบียบการโต้ตอบของผู้ใช้กับอินเทอร์เน็ต ผู้พัฒนาไซต์จะต้องจัดเตรียมการส่งคำขอจากผู้ใช้ไซต์ไปยังเซิร์ฟเวอร์ที่ไซต์นั้นตั้งอยู่ คำขอมีสองประเภท: คำขอ GET และ POST

รับ-คำขอ

ในช่วงเริ่มต้นของการพัฒนาอินเทอร์เน็ต มีเพียงคำขอ GET เท่านั้น แสดงถึงการถ่ายโอนข้อมูลโดยตรงไปยังแถบที่อยู่ของเบราว์เซอร์ โดยมีไวยากรณ์ดังต่อไปนี้:

http://domain/page?[parameter1=value1][¶meter2=value2]...

ที่นี่ ชุดข้อมูลที่ถ่ายโอนไปยังเซิร์ฟเวอร์เริ่มต้นด้วยอักขระ '?' และคั่นด้วยอักขระ '&' ข้อมูลนั้นเป็นคู่

พารามิเตอร์=ค่า

ตัวอย่างเช่น หากคุณต้องการส่งชื่อและนามสกุลของผู้ใช้ในหน้าลงทะเบียน (เช่น register.php) ของเว็บไซต์ mysite.com ก็จะมีลักษณะดังนี้:

http://mysite.com/register.php?fname=Ivan&lname=Ivanov

โปรดทราบว่าเบราว์เซอร์เวอร์ชันเก่าอาจไม่สามารถรับรู้ตัวอักษรซีริลลิกได้อย่างถูกต้องและการส่งตัวอักษรรัสเซียจะดำเนินการอย่างไม่ถูกต้อง เป็นการดีกว่าที่จะส่งข้อมูลบริการเฉพาะในคำขอ GET ในรูปแบบของตัวเลขและคำในภาษาละติน

ข้อเสียของคำขอ GET คือการถ่ายโอนข้อมูลที่จำกัด บนฝั่งเซิร์ฟเวอร์ สตริงการสืบค้นถูกจำกัดไว้เพียงบางส่วน ค่าสูงสุด- ตัวอย่างเช่น หากขนาดคำขอสูงสุดสามารถเป็น 1,024 อักขระ ทุกอย่างที่เกินค่านี้จะถูกลบ และส่วนหนึ่งของข้อมูลที่ส่งจะไม่ถูกประมวลผลโดยหน้าที่ระบุของไซต์ ข้อจำกัดที่สำคัญประการที่สองคือความสามารถในการส่งชุดอักขระที่กำหนดไว้อย่างเคร่งครัด เช่น สัญลักษณ์? และ & ถูกสงวนไว้แล้ว และไม่สามารถส่งเป็นค่าพารามิเตอร์ได้ อย่างไรก็ตาม กฎนี้สามารถหลีกเลี่ยงได้หากสตริงการสืบค้นไม่มีอักขระในตัว แต่มีค่ารหัส เมื่อต้องการทำเช่นนี้ ให้ใช้อักขระ '%' ตามด้วยโค้ดอักขระ เช่น:

http://mysite.com/register.php?fname=%CC%DF%AD%1F%DS&lname=%DD

ที่นี่ค่ารหัสจะได้รับเป็นเลขฐานสิบหกเพื่อบันทึกความยาวของแบบสอบถาม

แม้ว่าจะมีข้อเสียเหล่านี้ การสร้างไซต์โดยไม่มีคำขอ GET จะเป็นเรื่องยากมาก ตัวอย่างเช่นเป็นสิ่งที่ขาดไม่ได้ในกรณีของการเริ่มต้นหน้าเว็บไซต์สำหรับผู้ใช้เฉพาะเมื่อคำขอไม่เพียงระบุไซต์และหน้าปัจจุบันเท่านั้น แต่ยังรวมถึงรหัสของมันด้วยเช่นเดียวกับที่ทำในเครือข่ายโซเชียล VKontakte:

http://vk.com/profile.php?id=12345678

คำขอ GET มักใช้เพื่อตรวจสอบความถูกต้องของที่อยู่อีเมลเมื่อลงทะเบียนผู้ใช้ ในกรณีนี้ ผู้ใช้จะได้รับอีเมลพร้อมลิงก์เปิดใช้งานตามที่อยู่อีเมลที่ระบุ และลิงก์นี้เป็นคำขอ GET

โพสต์-คำขอ

เพื่อแก้ไขข้อบกพร่องเหล่านี้ของคำขอ GET จึงมีการเพิ่มคำขอ POST เพื่อให้สามารถถ่ายโอนข้อมูลจำนวนมากในรูปแบบไบนารี่ได้ เช่น โดยไม่มีการบิดเบือนหรือการเปลี่ยนแปลงข้อมูลที่ส่ง คำขอดังกล่าวเหมาะอย่างยิ่งสำหรับการอัปโหลดไฟล์และรูปภาพไปยังเซิร์ฟเวอร์ ตัวอย่างเช่น เมื่อผู้ใช้อัปโหลดรูปภาพไปยังโปรไฟล์โซเชียลเน็ตเวิร์ก คำขอ POST จะถูกนำมาใช้ในการดำเนินการนี้ รายละเอียดเพิ่มเติมเกี่ยวกับการจัดระเบียบคำขอ POST จะกล่าวถึงด้านล่าง



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล