ฉันไม่เห็นความแตกต่างระหว่างพารามิเตอร์และสตริงการค้นหาใน URL แล้วความแตกต่างคืออะไรและควรใช้เมื่อใด?
ฉันไม่เห็นความแตกต่างระหว่างพารามิเตอร์และสตริงการค้นหาใน URL แล้วความแตกต่างคืออะไรและควรใช้เมื่อใด?
คำตอบ:
ส่วนประกอบแบบสอบถามจะแสดงโดยครั้งแรก?
ใน URI "สตริงการสืบค้น" อาจเป็นคำพ้องความหมาย (คำนี้ไม่ได้ใช้ในมาตรฐาน URI)
ตัวอย่างบางส่วนสำหรับ HTTP URI ที่มีคอมโพเนนต์การสืบค้น:
http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b
( รายการอักขระที่อนุญาตในส่วนประกอบแบบสอบถาม )
"รูปแบบ" ของส่วนประกอบแบบสอบถามขึ้นอยู่กับผู้เขียน URI แบบแผนทั่วไป ( แต่ไม่มีอะไรมากไปกว่าแบบแผนเท่าที่เกี่ยวข้องกับมาตรฐาน URI ¹) คือการใช้คอมโพเนนต์การสืบค้นสำหรับคู่คีย์ - ค่าหรือที่เรียกว่า พารามิเตอร์เช่นในตัวอย่างสุดท้ายด้านบน: bar1=a&bar2=b
.
พารามิเตอร์ดังกล่าวอาจปรากฏในองค์ประกอบ URI อื่น ๆ เช่นพา ธ ²และส่วน สำหรับมาตรฐาน URI นั้นขึ้นอยู่กับคุณว่าจะใช้องค์ประกอบใดและรูปแบบใด
ตัวอย่าง URI ที่มีพารามิเตอร์ในพา ธ คิวรีและแฟรกเมนต์:
http://example.com/foo;key1=value1?key2=value2#key3=value3
¹มาตรฐาน URI กล่าวเกี่ยวกับองค์ประกอบการสืบค้น :
[…] คอมโพเนนต์การสืบค้นมักใช้เพื่อดำเนินการระบุข้อมูลในรูปแบบของคู่ "คีย์ = ค่า" […]
²มาตรฐาน URI กล่าวเกี่ยวกับองค์ประกอบเส้นทาง :
[…] อักขระที่สงวนไว้ (";") และเท่ากับ ("=") มักใช้เพื่อคั่นพารามิเตอร์และค่าพารามิเตอร์ที่เกี่ยวข้องกับเซ็กเมนต์นั้น เครื่องหมายจุลภาค (",") ที่สงวนไว้มักใช้เพื่อวัตถุประสงค์ที่คล้ายคลึงกัน
พารามิเตอร์คือคู่คีย์ - ค่าที่สามารถปรากฏในเส้นทาง URL และเริ่มต้นด้วยอักขระอัฒภาค ( ;
)
สตริงคำค้นหาปรากฏหลังเส้นทาง (ถ้ามี) และขึ้นต้นด้วยอักขระเครื่องหมายคำถาม ( ?
)
ทั้งพารามิเตอร์และสตริงการสืบค้นมีคู่คีย์ - ค่า
ในGET
คำขอพารามิเตอร์จะปรากฏใน URL เอง:
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
ในPOST
คำขอพารามิเตอร์สามารถปรากฏใน URL เอง แต่ยังปรากฏในสตรีมข้อมูล (หรือที่เรียกว่าเนื้อหา)
สตริงคำค้นหาเป็นส่วนหนึ่งของ URL เสมอ
สามารถฝังพารามิเตอร์ในform-data
datastream เมื่อใช้เมธอด POST ดังนั้นจึงอาจไม่ปรากฏใน URL ใช่POST
คำขอสามารถกำหนดพารามิเตอร์เป็นข้อมูลฟอร์มและใน URL ได้และไม่สอดคล้องกันเนื่องจากพารามิเตอร์สามารถมีได้หลายค่า
ฉันไม่พบคำอธิบายสำหรับพฤติกรรมนี้ ฉันเดาว่าบางครั้งอาจมีประโยชน์ในการ "ยกเลิกการซ่อน" พารามิเตอร์จากPOST
คำขอหรือแม้กระทั่งปล่อยให้โค้ดที่จัดการGET
คำขอแชร์บางส่วนกับโค้ดที่จัดการ a POST
. แน่นอนว่าสิ่งนี้สามารถใช้ได้กับพารามิเตอร์ที่รองรับโค้ดเซิร์ฟเวอร์ใน URL เท่านั้น
จนกว่าคุณจะได้รับข้อมูลเชิงลึกที่ดีขึ้นเราขอแนะนำให้คุณใช้พารามิเตอร์ในform-data
datastream ของPOST
คำขอเท่านั้น
แหล่งที่มา: