ทำความเข้าใจกับอินเทอร์เน็ตไร้สัญชาติ [ปิด]


15

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


3
สวัสดีไบรอัน Programmers.SE คือไม่กระดานสนทนา มีปัญหาเฉพาะที่คุณเผชิญซึ่งคุณต้องการความช่วยเหลือหรือไม่? ถ้าเป็นเช่นนั้นคุณสามารถเปลี่ยนคำถามใหม่ได้หรือไม่?

โดยปกติคุณปล่อยให้เซิร์ฟเวอร์จัดการรายละเอียดของคุกกี้เซสชัน
FrustratedWithFormsDesigner

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

คำตอบ:


18

นี่คือคำอธิบายที่ดีที่สุดของอินเทอร์เน็ตไร้สัญชาติที่ฉันได้เห็น:

ฉันอธิบายREST  to My Wife
http://www.looah.com/source/view/2284

ภรรยา:ใครคือรอยฟีลดิง?

Ryan:ผู้ชายบางคน เขาฉลาด

ภรรยา:โอ้ เขาทำอะไร?

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

ภรรยา:มันทำงานยังไง?

Ryan:เว็บเหรอ?

ภรรยา:ใช่แล้ว

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

ภรรยา:คุณหมายถึง http เหมือนจุดเริ่มต้นของสิ่งที่ฉันพิมพ์ลงในเบราว์เซอร์?

Ryan:ใช่แล้ว ส่วนแรกนั้นบอกเบราว์เซอร์ว่าจะใช้โปรโตคอลใด สิ่งที่คุณพิมพ์เข้าไปนั้นเป็นหนึ่งในนวัตกรรมที่สำคัญที่สุดในประวัติศาสตร์ของการคำนวณ

ภรรยา:ทำไม

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

ภรรยา:สำหรับหน้าเว็บเหรอ?

Ryan:เพื่ออะไรจริงๆ ชายคนนั้นชื่อ Roy Fielding เขาพูดถึงสิ่งต่าง ๆ มากมายที่ชี้ไปในการวิจัยที่ฉันกำลังพูดถึง เว็บถูกสร้างในสไตล์สถาปัตยกรรมที่เรียกว่า REST REST ให้คำจำกัดความของทรัพยากรซึ่งเป็นสิ่งที่สิ่งเหล่านั้นชี้ไป

ภรรยา:หน้าเว็บเป็นแหล่งข้อมูลใช่ไหม

ไรอัน:ชนิดของ หน้าเว็บเป็นตัวแทนของทรัพยากร ทรัพยากรเป็นเพียงแนวคิด URL - สิ่งที่คุณพิมพ์ลงในเบราว์เซอร์ ...

ภรรยา:ฉันรู้ว่า URL คืออะไร ..

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

ภรรยา:มีตัวแทนประเภทอื่นอีกไหม?

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

ภรรยา:อะไรนะ?

Ryan:อืม มีแนวคิดนี้ที่ผู้คนกำลังเรียกบริการเว็บ มันหมายถึงสิ่งต่าง ๆ มากมายสำหรับผู้คนมากมาย แต่แนวคิดพื้นฐานคือเครื่องสามารถใช้เว็บได้เหมือนที่คนทำ

ภรรยา:นี่เป็นอีกเรื่องของหุ่นยนต์หรือไม่

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

ภรรยา:ทำไมล่ะ

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

ภรรยา:และตอนนี้คุณต้องคุยกับเครื่องจักรทั้งหมดเหรอ?

ไรอัน:ใช่ - และอีกมาก เราต้องสามารถพูดคุยกับเครื่องจักรทั้งหมดเกี่ยวกับสิ่งที่อยู่ในเครื่องอื่น ๆ ทั้งหมด ดังนั้นเราจึงต้องการวิธีการให้เครื่องหนึ่งบอกเครื่องอื่นเกี่ยวกับทรัพยากรที่อาจอยู่ในเครื่องอื่น

ภรรยา:อะไรนะ?

Ryan:สมมติว่าคุณกำลังพูดกับน้องสาวของคุณและเธอต้องการยืมคนกวาดหรือสิ่งอื่น แต่คุณไม่มีมัน - แม่ของคุณมีมัน ดังนั้นคุณบอกให้พี่สาวของคุณได้รับจากแม่ของคุณแทน สิ่งนี้เกิดขึ้นตลอดเวลาในชีวิตจริงและเกิดขึ้นตลอดเวลาที่เครื่องจักรเริ่มพูดคุยด้วย

ภรรยา:แล้วเครื่องจักรจะบอกกันว่าอะไรอยู่ที่ไหน

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

ภรรยา:ใช่แล้ว

Ryan:เครื่องจักรไม่ได้มีคำนามสากล - นั่นเป็นเหตุผลที่พวกเขาดูด ภาษาการเขียนโปรแกรมฐานข้อมูลหรือระบบอื่น ๆ ทุกชนิดมีวิธีพูดคุยเกี่ยวกับคำนามที่แตกต่างกัน นั่นเป็นเหตุผลว่าทำไม URL จึงมีความสำคัญ มันทำให้ระบบทั้งหมดเหล่านี้บอกกันและกันเกี่ยวกับคำนามของกันและกัน

ภรรยา:แต่เมื่อฉันดูหน้าเว็บฉันไม่คิดอย่างนั้น

Ryan:ไม่มีใครทำ ยกเว้น Fielding และหยิบของคนอื่น นั่นเป็นเหตุผลที่เครื่องยังคงดูด

ภรรยา:แล้วคำกริยาคำสรรพนามและคำคุณศัพท์ล่ะ?

Ryan:ตลกที่คุณถามเพราะนั่นเป็นอีกแง่มุมหนึ่งของ REST คำกริยาก็ดีอยู่ดี

ภรรยา:ฉันแค่ล้อเล่น

Ryan:มันเป็นเรื่องตลก แต่จริง ๆ แล้วมันไม่ใช่เรื่องตลกเลย คำกริยามีความสำคัญ มีแนวคิดที่ทรงพลังในการเขียนโปรแกรมและทฤษฎี CS ที่เรียกว่า polymorphism นั่นเป็นวิธีที่เกินบรรยายว่าคำนามต่าง ๆ สามารถใช้คำกริยาเดียวกันกับพวกเขาได้

ภรรยา:ฉันไม่เข้าใจ

Ryan:อืม .. ดูที่โต๊ะกาแฟ คำนามคืออะไร? ถ้วยถาดหนังสือพิมพ์รีโมท ทีนี้คุณสามารถทำอะไรกับทุกสิ่งเหล่านี้บ้าง

ภรรยา:ฉันไม่เข้าใจ ...

ไรอัน:คุณสามารถหามาได้ใช่ไหม คุณสามารถรับพวกเขา คุณสามารถเคาะพวกเขา คุณสามารถเผาไหม้พวกเขา คุณสามารถใช้คำกริยาที่แน่นอนเหล่านั้นกับวัตถุใด ๆ ที่อยู่ที่นั่น

ภรรยา:โอเค ... งั้นเหรอ?

Ryan:ก็สำคัญนะ ถ้าหากฉันสามารถพูดกับคุณได้ว่า "หยิบถ้วย" และ "หยิบหนังสือพิมพ์" และ "เรียกใช้รีโมท" ถ้าหากเราต้องการคำกริยาที่แตกต่างกันสำหรับคำนามแต่ละคำ ฉันไม่สามารถใช้คำว่า "รับ" ได้ในระดับสากล แต่ต้องคิดคำใหม่สำหรับการรวมคำกริยา / คำนาม

ภรรยา:ว้าว! แปลก.

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

ภรรยา:คุณไม่สามารถลบถ้วยได้

Ryan:ก็โอเค แต่คุณสามารถทิ้งมันไปได้ นั่นเป็นเรื่องตลกอีกใช่มั้ย

ภรรยา:ใช่แล้ว

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

หน้าเว็บมักจะมีภาพใช่มั้ย เหล่านี้เป็นทรัพยากรที่แยกจากกัน เว็บเพจระบุ URL ไปยังรูปภาพและเบราว์เซอร์จะดำเนินการและทำ HTTP GETs เพิ่มเติมจนกว่าจะได้รับทรัพยากรทั้งหมดและแสดงหน้าเว็บ แต่สิ่งสำคัญที่นี่คือคำนามชนิดต่าง ๆ สามารถได้รับการปฏิบัติเหมือนกัน คำนามไม่ว่าจะเป็นรูปภาพ, ข้อความ, วิดีโอ, mp3, สไลด์โชว์หรืออะไรก็ตาม ฉันสามารถรับทุกสิ่งเหล่านี้ด้วยวิธีเดียวกันกับที่ได้รับ URL

ภรรยา:ฟังดูเหมือน GET เป็นคำกริยาที่สำคัญมาก

Ryan:มันคือ โดยเฉพาะอย่างยิ่งเมื่อคุณใช้งานเว็บเบราว์เซอร์เพราะเบราว์เซอร์เพิ่งรับของ ๆ พวกเขาไม่ได้มีปฏิสัมพันธ์กับทรัพยากรประเภทอื่นอีกมาก นี่เป็นปัญหาเนื่องจากมีคนจำนวนมากคิดว่า HTTP เป็นเพียงการรับ แต่ HTTP เป็นโปรโตคอลวัตถุประสงค์ทั่วไปสำหรับการใช้คำกริยากับคำนาม

ภรรยา:เท่ห์ แต่ฉันก็ยังไม่เห็นว่ามันจะเปลี่ยนแปลงอะไร คุณต้องการคำนามและคำกริยาในรูปแบบใด?

Ryan:คำนามก็อยู่ที่นั่น แต่ไม่ใช่ในรูปแบบที่ถูกต้อง

ลองนึกถึงเมื่อคุณท่องไปรอบ ๆ amazon.com กำลังมองหาสิ่งที่จะซื้อฉันสำหรับคริสต์มาส ลองนึกภาพแต่ละผลิตภัณฑ์ว่าเป็นคำนาม ตอนนี้ถ้าพวกเขามีตัวแทนที่เครื่องเข้าใจคุณสามารถทำสิ่งต่าง ๆ ได้อย่างเรียบร้อย

ภรรยา:ทำไมเครื่องไม่เข้าใจหน้าเว็บปกติ

Ryan:เพราะหน้าเว็บได้รับการออกแบบให้คนเข้าใจ เครื่องไม่สนใจเกี่ยวกับเค้าโครงและสไตล์ เครื่องจักรโดยทั่วไปต้องการเพียงแค่ข้อมูล ตามหลักการแล้ว URL ทุกอันจะมีมนุษย์ที่อ่านได้และเครื่องที่อ่านได้ เมื่อเครื่องได้รับทรัพยากรเครื่องจะถามหาเครื่องที่อ่านได้ เมื่อเบราว์เซอร์ได้รับทรัพยากรสำหรับมนุษย์มันจะถามหามนุษย์ที่สามารถอ่านได้

ภรรยา:ดังนั้นผู้คนจะต้องสร้างรูปแบบเครื่องจักรสำหรับทุกหน้าของพวกเขา?

Ryan:ถ้ามันมีค่า

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

แต่ละระบบจะรับข้อมูลจากกันและกันโดยใช้ HTTP GET อย่างง่าย หากระบบหนึ่งต้องการเพิ่มบางสิ่งในระบบอื่นระบบจะใช้ HTTP POST หากระบบต้องการอัปเดตบางอย่างในระบบอื่นระบบจะใช้ HTTP PUT สิ่งเดียวที่เหลือก็คือว่าข้อมูลควรมีลักษณะอย่างไร

ภรรยา:นี่คือสิ่งที่คุณและคอมพิวเตอร์ทุกคนทำงานกันอยู่ตอนนี้? การตัดสินใจว่าข้อมูลควรมีลักษณะอย่างไร

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

ภรรยา:ทำไม

ไรอัน:ฉันไม่รู้

ภรรยา:ทำไมคุณไม่พูดอะไร

Ryan:บางทีฉันจะ


1
นั่นคือการอ่านที่ดี ดังนั้นการใช้ http โดยการประชุมจึงเป็นเรื่องง่าย สิ่งเดียวที่ฉันเพิ่มคือสิ่งที่เกี่ยวกับข้อ จำกัด ของหน่วยความจำตามที่ Slawek ชี้ให้เห็นว่าเราหมดทรัพยากรสำหรับเว็บไซต์ขนาดใหญ่อย่างรวดเร็ว บางทีวันหนึ่งเมื่อทรัพยากรของเครื่องมีขนาดใหญ่เมื่อเทียบกับความต้องการของผู้ใช้ที่เราสามารถมีอินเทอร์เน็ตไร้รัฐ
P.Brian.Mackey

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

2
ฉันตาบอดด้วยวิธี stateful ของฉันในการเขียนโปรแกรมฉันพลาดจุดอ้างอิงในบทความ ฉันต้องใส่คำขวัญ "ไร้สัญชาติไม่ใช่ข้อบกพร่อง" ในสมองของฉันสักสองสามร้อยครั้ง ... ขอบคุณสำหรับความคิดเห็นและคำตอบที่ยอดเยี่ยม
P.Brian.Mackey

ย่อหน้าสุดท้าย (5 บรรทัดจากท้าย) อ้างอิงถึงอะไร ฉันมีความคิด แต่ฉันไม่ต้องการที่จะรู้สึกเหมือนคนโง่ที่ทำข้อสันนิษฐานใด ๆ
Steven

1
@ สตีเว่น: ฉันเชื่อว่าย่อหน้าหมายถึงสิ่งต่าง ๆ เช่นสบู่หรืออาจเป็นCORBA (สั่น)
Robert Harvey

6

คุณคิดว่าจะเป็นไปได้อย่างไรที่จะจัดเก็บสถานะการเชื่อมต่อพันล้านพันล้านพันล้าน :) ดังนั้นคุณเก็บสถานะที่ต้องการในเซสชั่นเท่านั้น

BTW: HTTP ไม่ได้เชื่อมต่อ


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

3
HTTP ไม่มีการเชื่อมต่อ คุณส่งคำร้องขอ HTTP รับบางสิ่งกลับไปตราบเท่าที่ HTTP เกี่ยวข้องกับการเชื่อมต่อที่สิ้นสุด เป็นไปได้ที่เซิร์ฟเวอร์จะเชื่อมต่อคำขอที่แตกต่างกันเพื่อจัดทำเซสชัน แต่นั่นไม่ใช่คุณสมบัติโดยธรรมชาติของ HTTP
David Thornley

2
HTTP ใช้ TCP / IP เป็นการส่งข้อมูล (ไม่ใช่ UDP) แต่นั่นคือเลเยอร์ ISO OSI อีกชั้นหนึ่งและคุณสามารถมีได้persistent connectionsซึ่งเรียกว่า Keep-alive ฉันไม่ผู้เชี่ยวชาญเครือข่าย แต่คุณมีการเชื่อมต่อที่แท้จริงใน HTTP มากที่สุดของเวลา :)
Slawek

2
ตกลงดังนั้นสิ่งที่ฉันได้รับจากสิ่งนี้คือความเชื่อทั่วไปที่ว่าการเชื่อมต่อแบบไร้สายสามารถบรรจุด้วยไร้สัญชาตินั้นเป็นเท็จ ฉันคิดว่าเราสามารถยอมรับว่า http เป็นไร้สัญชาติหรือดูข้อกำหนดเพื่อดูตัวคุณเองw3.org/TR/html401/interact/forms.html (ค้นหาไร้สัญชาติ) ดูเพิ่มเติม RFC2616 สำหรับไร้สัญชาติของ http ietf.org/rfc/rfc2616.txt มีการเชื่อมต่อ แต่การเชื่อมต่อนั้นเป็น "รีเลย์ตาบอด"
P.Brian.Mackey

2
การเชื่อมต่อเสมือนบนเว็บ เทคนิคการพูดเพื่อให้มีการเชื่อมต่อที่แท้จริงคุณต้องมีสายเฉพาะที่เชื่อมต่อคุณกับอีกด้านหนึ่งเช่นสายโทรศัพท์ (อย่างน้อยใน <90s) หากด้านหนึ่ง 'ตัดการเชื่อมต่อ' อีกด้านหนึ่งจะไม่ทราบเว้นแต่จะได้รับแพ็คเก็ตซึ่งบอกว่าอีกฝั่งไม่ฟังอีกต่อไป ตามทฤษฎีแล้วแพ็คเก็ตนั้นอาจไม่เคยมาถึง หลังจากหมดเวลาเซิร์ฟเวอร์ก็ยกเลิกการเชื่อมต่อเช่นกัน อย่างไรก็ตามการเชื่อมต่อเสมือนจริงด้วยเหตุผลนี้
Neil

4

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

  1. รัฐสามารถใช้ร่วมกันได้ แต่มักจะถูกเก็บไว้บนเซิร์ฟเวอร์และมีการอ้างอิงโดยใช้โทเค็นเช่นรหัสเซสชันพารามิเตอร์ URL ฟิลด์ที่ซ่อนอยู่หรือค่าคุกกี้
  2. โมเดลไร้สัญชาติเหมาะสำหรับการประมวลผลธุรกรรม พยายามสร้างแบบจำลองของคุณในลักษณะที่สามารถลดจำนวนสถานะที่ต้องการ กรดหลักการของการประมวลผลธุรกรรมสามารถช่วยให้คุณบรรลุเป้าหมายนี้
  3. ทำความคุ้นเคยกับรูปแบบMVC (ถ้าคุณยังไม่ได้) สิ่งนี้จะช่วยปรับปรุงการออกแบบของคุณโดยการแยกข้อกังวลออก เฟรมเวิร์กยอดนิยมบางส่วนเช่นStruts (Java) และMVC (.NET) สร้างขึ้นจากแนวคิดนี้
  4. พิจารณาใช้ปลั๊กอินเช่นJava , FlashหรือSilverlightสำหรับประสบการณ์ UI ที่ยอดเยี่ยม สำหรับประสบการณ์กึ่งอุดมไปพิจารณาใช้ห้องสมุดนิยมจาวาสคริปต์เช่นJQueryหรือAJAX

มีความสุขในการเขียนโปรแกรม!


1
เพียงหมายเหตุด้านข้าง: ระวังด้วยตัวย่อ MVC; เดิมทีมันถูกกำหนดให้เป็นการออกแบบ OO สำหรับแอพ GUI หลังจากนั้นมันถูกใช้เป็นโครงสร้างเลเยอร์สำหรับเว็บแอป นี่เป็นสองสิ่งที่แตกต่างกันมาก
Javier

คุณกำลังแนะนำให้ OP ทำการดำดิ่งสู่เทคโนโลยีโดยตรงที่ให้วิธีการแก้ปัญหาบางอย่างบนเว็บ Beeing stateless แทนการเรียนรู้พื้นฐานก่อน?
Tulains Córdova

3

เพราะมีเวลาที่ไม่ได้นับล้านต่อหน้าเว็บนับล้าน เพราะมีเวลาที่มหาวิทยาลัยเท่านั้นและสิ่งอำนวยความสะดวกการวิจัยมีสองหน้า มีเวลาที่ไม่มีบรอดแบนด์และ http ได้สื่อสารกับโมเด็ม 1200 baud ที่วางอยู่ด้านบนของโทรศัพท์ตั้งโต๊ะ มีบางครั้งที่ "แอปพลิเคชันเว็บที่สมบูรณ์" จะต้องใช้แบนด์วิดท์ที่ไร้สาระในมุมมองของพวกเขา และจำไว้ว่า TCP / IP ถูกสร้างขึ้นเพราะอินเทอร์เน็ตในยุคแรกนั้นไม่น่าเชื่อถือมาก

HTTP 1.0 นั้นอยู่ในช่วงต้นทศวรรษ 1990 ลองคิดดูว่าอินเทอร์เน็ตในยุคนั้นเป็นอย่างไรและทำไมพวกเขาจึงออกแบบในแบบที่เป็น


อินเทอร์เน็ต "ล่าช้า" ยังคงไม่น่าเชื่อถือ
Pemdas

@Pemdas - คุณหมายถึงอะไรอินเทอร์เน็ต "สาย"
P.Brian.Mackey

เพียงแค่หยิบจู้จี้ การส่งข้อมูลยังคงไม่น่าเชื่อถือหากไม่มีโปรโตคอลเช่น TCP และแม้กระทั่ง TCP ไม่สามารถบัญชีสำหรับการเชื่อมต่อที่ไม่พร้อมใช้งาน
Pemdas

3

มันวิวัฒนาการมาทั้งหมด อินเทอร์เน็ตมีอยู่ก่อนเว็บเบราว์เซอร์และเว็บ มันเป็นหม้อฟองของ ftp, telnet, gopher, ping, finger และบิตและบ็อบอีกสองสามตัว เว็บเบราว์เซอร์แรก Mosaic (? ฉันคิดว่าเมื่อนานมาแล้วปี 1991 ฉันคิดว่าฉันอยู่ที่วิทยาลัย) ทำหน้าที่เหมือนเป็นการยั่วเย้าระหว่าง ftp และโปรแกรมดูเอกสาร ความมหัศจรรย์เกิดขึ้นเพราะคุณสามารถมีลิงค์ในเอกสารซึ่งจะทำให้เอกสารใหม่เพิ่มขึ้น

การโต้ตอบทั้งหมดที่เราได้พัฒนาในช่วง 20 ปีข้างหน้า มันไม่ใช่วิวัฒนาการที่มีความสุขเช่นกัน เรามีสงครามเบราว์เซอร์, IE และ Netscape duked มันออกมาเพื่อควบคุมมาตรฐาน (บิตของการทำให้เข้าใจง่าย;)), และบุคคลที่สามอื่น ๆ อีกมากมายเริ่มแนะนำปลั๊กอินอินเพื่ออนุญาตให้มีเนื้อหาที่หลากหลาย Java เป็นไปได้ที่จะเป็นเวทย์มนตร์และแน่นอนว่าแฟลช ไม่มีใครจำปลั๊กอิน VRML ที่สัญญากับโลก 3 มิติและส่งมอบโมเดลสตาร์วอร์สครึ่งโหลได้ครึ่งโหล?

ฉันถูกพาไปที่จุดสิ้นสุด แต่คุณเข้าใจแล้ว :)


ไม่เป็นไรคนอื่น ๆ ก็ถูกพาตัวไปด้วยเช่นกันส่วนใหญ่เป็นคนทำการตลาด ตอนนี้เราจะอยู่ที่ไหนยกเว้นแรงจูงใจในการทำกำไร? ยังมีสองสาม geeks "เชื่อมต่อคอมพิวเตอร์บางเครื่อง" ฉันเดา

3

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

ข้อควรพิจารณาต่อไปนี้เสริมสร้างการตัดสินใจไร้สัญชาติ:

  • การโต้ตอบทั่วไปจะเป็นการดาวน์โหลดและอ่านอย่างรวดเร็ว ในระหว่างการหน่วงเวลาจนถึงการร้องขอถัดไปซ็อกเก็ตจะนั่งว่าง
  • Sockets ใช้ทรัพยากรระบบอันมีค่า หากเราไม่จำเป็นต้องรักษาการสนทนาตามที่คุณต้องการด้วย SMTP คุณสามารถทำสิ่งต่างๆมากมายเพื่อให้เครื่องหนึ่งเครื่องจัดการกับลูกค้าหลายพันราย
  • พวกเขาเรียนรู้บทเรียนล้ำค่าจากการจัดการบัญชี shell remote, NFS, SMTP และโปรโตคอลการเชื่อมต่อ stateful อื่น ๆ

เมื่อหน้าเว็บมีความซับซ้อนมากขึ้นและมีกราฟิกและสไตล์ชีทมากมาย HTTP จึงถูกใช้เป็นธง "Keep-alive" นั่นจะทำให้ซ็อกเก็ตยังคงอยู่และอนุญาตให้ไคลเอนต์ร้องขอทรัพยากรต่าง ๆ ด้วยการสนทนาเดียวกัน

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


3

ถ้าคุณหมายถึงเบราว์เซอร์สองทิศทาง

เหตุผลด้านความปลอดภัย

ตัวอย่างเช่นสแปม!

การสื่อสารแบบสองทิศทางบนเว็บไปอีกระดับ

มิฉะนั้นอินเทอร์เน็ตจะเรียกใช้ TCP / IP (สองโปรโตคอล) และ UDP

โปรโตคอลควบคุมการส่ง(TCP) เป็นหนึ่งในโปรโตคอลหลักของ Internet Protocol Suite TCP เป็นหนึ่งในสองคอมโพเนนต์ดั้งเดิมของชุดประกอบ Internet Protocol (IP) ดังนั้นชุดทั้งหมดจึงถูกเรียกว่า TCP / IP TCP ให้บริการการแลกเปลี่ยนข้อมูลโดยตรงระหว่างสองโฮสต์บนเครือข่ายเดียวกันในขณะที่ IP จัดการกับการกำหนดแอดเดรสและการกำหนดเส้นทางข้อความในเครือข่ายหนึ่งเครือข่ายหรือมากกว่า โดยเฉพาะอย่างยิ่ง TCP ให้การส่งกระแสข้อมูลที่เชื่อถือได้และเป็นคำสั่งของไบต์จากโปรแกรมบนคอมพิวเตอร์เครื่องหนึ่งไปยังโปรแกรมอื่นบนคอมพิวเตอร์เครื่องอื่น TCP คือโพรโทคอลที่แอปพลิเคชันอินเทอร์เน็ตที่สำคัญต้องพึ่งพาแอปพลิเคชันเช่นเวิลด์ไวด์เว็บอีเมลและการถ่ายโอนไฟล์ แอปพลิเคชั่นอื่นซึ่งไม่ต้องการบริการสตรีมข้อมูลที่เชื่อถือได้

อินเทอร์เน็ตโปรโตคอล(IP) เป็นโปรโตคอลการสื่อสารหลักที่ใช้สำหรับการส่งดาตาแกรม (แพ็คเก็ต) ข้ามเครือข่ายโดยใช้ Internet Protocol Suite รับผิดชอบการกำหนดเส้นทางแพ็คเก็ตข้ามขอบเขตเครือข่ายเป็นโปรโตคอลหลักที่สร้างอินเทอร์เน็ต IP เป็นโปรโตคอลหลักใน Internet Layer ของ Internet Protocol Suite และมีหน้าที่ในการส่งดาตาแกรมจากโฮสต์ต้นทางไปยังโฮสต์ปลายทางตามที่อยู่ของพวกเขา แต่เพียงผู้เดียว เพื่อจุดประสงค์นี้ IP จะกำหนดวิธีการและที่อยู่สำหรับการห่อหุ้มดาตาแกรม ในอดีต IP เป็นบริการดาต้าแกรมที่ไร้การเชื่อมต่อในโปรแกรมควบคุมการส่งสัญญาณดั้งเดิมที่นำเสนอโดย Vint Cerf และ Bob Kahn ในปี 1974 และอีกอันคือการเชื่อมต่อที่มุ่งเน้นการควบคุมการส่งผ่านโปรโตคอล (TCP) ชุดโปรโตคอลอินเทอร์เน็ตจึงมักจะเรียกว่า TCP / IP


3

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

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

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

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


2

อินเทอร์เน็ตไม่จำเป็นต้องไร้สัญชาติ - อันที่จริงแล้วเมื่อคุณดูที่ Java EE - พวกเขามี EJB ที่ไร้รัฐและ EJB ที่ไร้รัฐ

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

ไม่ยากเลยที่จะพัฒนาสถาปัตยกรรมไร้สัญชาติ จุดหลักคือการรักษาสถานะน้อยที่สุด (ปกติ id ผู้ใช้ - โดยเฉพาะอย่างยิ่งในคุกกี้) และการเปลี่ยนแปลงฐานข้อมูลตามที่ต้องการ


1

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

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

กรุณาแก้ไขหรือแสดงความคิดเห็นหากคุณมีข้อมูลที่ดีขึ้นหรือดีกว่ายังโพสต์คำตอบของคุณเอง!


1

มันเป็นเพราะเซิร์ฟเวอร์ให้บริการ (ในชื่อ) คุณทำการร้องขอและรับคำตอบนั่นคือทั้งหมดที่มี

เมื่อพิจารณาถึงการเปลี่ยนไปสู่การพัฒนาเว็บผมเชื่อว่า ASP.NET Web Forms จะทำให้คุณเข้าใจได้ง่ายขึ้น - แต่นั่นเป็นเพียงเพราะซ่อนสิ่งที่เกิดขึ้นจริงภายใต้เลเยอร์นามธรรม


ฉันเป็นนักพัฒนา Winforms ที่ครั้งหนึ่งเคยพยายามเปลี่ยนไปใช้เว็บฟอร์ม ASP.NET ประสบการณ์นั้นไม่น่าพอใจ ฉันชอบ ASP.NET MVC มาก
Robert Harvey

อ่าใช่ฉันเริ่มต้นด้วย PHP แล้วก็ย้ายไป ฉันใช้เวลาประมาณ 6 เดือนในการหยุดการสร้าง HTML ในลูป
billy.bob

1

สามารถเข้าใจได้เป็นอย่างมากโดยการวิเคราะห์ชื่อของ HTTP (HyperText Transfer Protocol) ไม่เคยออกแบบมาให้เป็นโปรโตคอล UI ที่สมบูรณ์ แนวคิดดั้งเดิมคือการแบ่งปันเอกสารด้วยลิงก์ระหว่างกัน ฉันขอเอกสารให้คุณตอบกลับพร้อมสำเนาของเอกสารนั้น

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.