Monday, December 31, 2018

HTTP Request Response Model

HTTP Request Response Model


HTTP Request Response Model – HTTP Specification के अनुसार HTTP एक Stateless Request/Response Protocol है जिसके Basic Operations व उन Operations के Execution का क्रम निम्नानुसार होता है-
  1. Web Browser जैसा कोई Client Application, Web Server के HTTP Port जो कि Default रूप से Port 80 होता है, पर एक Socket Open करता है। इसी HTTPPort 80 द्वारा Client Web Browser व Web Server के बीच Connection स्थापित होता है।
  1. फिर इस Connection द्वारा Client Web Browser, 0 या अधिक HTTP Headers, एक Empty Line व किसी Data के साथ एक ASCII Text Request Line को HTTP Port 80 पर Write करता है। Request Writing की इस प्रक्रिया को ही Request Send करना कहते हैं।
  1. फिर Client Web Browser द्वारा HTTP Port 80 पर Opened Socket पर पिछले Step के दौरान Write किए गए HTTP Request को Web Server द्वारा Parse किया जाता है, जिसके अन्तर्गत Request में Specified Resource को Web Server द्वारा Server Computer पर Locate किया जाता है।
  1. यदि Web Server को Request Object में Specified Resource प्राप्त हो जाता है, तो Web Server उस Resource को फिर से Socket पर Write कर देता है तथा एक Status Code के माध्‍यम से Web Browser को इस बात का Instruction देता है कि उसके द्वारा Perform की गई Request का Response क्या रहा।
  1. Web Server द्वारा Opened Socket पर Response के Write करते ही Web Browser उस Response को प्राप्त कर लेता है और जैसे ही Web Browser उस Response को प्राप्त करता है, Web Server उस Opened Server Connection को Close कर देता है।
HTTP Request Model की इस पूरी प्रक्रिया को निम्नानुसार चित्र द्वारा भी Represent किया जा सकता है-
HTTP Request Response Model - Core JSP in Hindi - BccFalna.com
HTTP Request Response Model
इस HTTP Request Model की सबसे महत्वपूर्ण बात ये है कि ये पूरी तरह से Stateless Model होता है। यानी Web Server जब Current Request को Handle करता है, तो उस समय उसे समान Client द्वारा Perform की गई पिछली Request का कोई भी ज्ञान नहीं होता।
ये Protocol मूलत: एक Request व Response तकनीक पर आधारित Protocol है, जहां Request के रूप में Web Browser, Web Server को कहता है कि
      “मुझे xyz.html नाम का Document दे दो।
और Web Server Response के रूप में वह Document Web Browser को Provide करते हुए Status Code के रूप में कहता है कि
      “ठीक है। ये लो“ यानी-
      Web Browser Request   =>  “Please! Give me this document.”
      Web Server Response   => “OK! Here it is.”

Connecting to Web Server

Web Server विभिन्न Client Requests को एक Particular Port Number 80 पर Listen करता है, जो कि HTTP Protocol के लिए Setup किया गया Default Port Number होता है।
हालांकि किसी अन्‍य Port Number पर भी HTTP Protocol को Web Server द्वारा Listen किया जा सकता है, जहां यदि Web Server, Port 80 के अलावा किसी Different Port Number पर HTTP Requests को Listen कर रहा होता है, तो उस स्थिति में Web Server पर Send होने वाले URL में Server Name के बाद एक Colon के साथ Port Number को Specify करना भी जरूरी होता है। जैसे-
      https://www.bccfalna.com/index.php
इस URL द्वारा Web Browser, Web Server से उसindex.php नाम के Document की Request कर रहा है, जो कि www.bccfalna.com नाम के Web Server पर Default HTTP Port 80 के माध्‍यम से उपलब्ध है।
लेकिन यदि यही Web Server, विभिन्न HTTP Request को HTTP Port 8080 पर Listen करता हो, तो उस स्थिति में index.php Document को HTTP Port 8080 से Access करने के लिए Web Browser में Specify किया जाने वाला URL निम्नानुसार होगा-
      https://www.bccfalna.com:8080/index.php
सवाल ये है कि जब Web Server विभिन्न HTTP Requests को Default Port 80 पर Listen कर सकता है, तो किसी अन्‍य Port को Specify करते हुए अलग Port Number पर HTTP Request को क्‍यों Listen करवाया जाए जबकि किसी अन्‍य Port पर Listen करवाने के लिए Web Browser को Colon के साथ Port Number को Specify करना भी जरूरी हो जाता है, जिससे Web Browser के Address Bar में Specify किया जाने वाला URL भी काफी जटिल हो जाता है।
तो इस सवाल का जवाब ये है कि अलग-अलग HTTP Ports का प्रयोग करके हम एक ही Server Computer यानी Host पर Multiple Web Servers Run कर सकते हैं।
उदाहरण के लिए सामान्यत: Windows Operating System पर IIS (Internet Information Service) Web Server Install करने पर Default Port 80, IIS Web Server के लिए Reserve हो जाता है। उस स्थिति में यदि हमें उसी Windows Based Host Computer पर Linux आधारित Web Technologies (PHP, Python, Perl, etc…) के लिए AMPPS, XAMPP या WAMP Server को Run करना हो अथवा JSP/Servlet Development के लिए Apache Tomcat, JBoss, WebLogic Server या कोई अन्‍य Web Server Run करना हो, तो समान Host Machine पर Multiple Web Servers को केवल एक ही स्थिति में Successfully Run किया जा सकता है, जबकि सभी Installed Web Servers, Different Port Number पर Listen करते हों।
सामान्यत: जब Web Browser जैसा कोई Client, Web Server से किसी Service को Access करना चाहता है, तब वह Web Server पर एक HTTP Request Initiate करते हुए किसी Specific Web Server Port पर एक TCP/IP SocketOpen करता है और इसी Socket पर Input व Output Stream Open करता है, जिसके माध्‍यम से Client Web Browser व Web Server के बीच Data का Transaction होता है। इस पूरी प्रक्रिया को हम निम्नानुसार Java Codes द्वारा ज्यादा सरल तरीके से Represent कर सकते हैं-
Socket sock = new Socket ( “www.bccfalna.com”, 80 );
InputStream istream = sock.getInputStream();
OutputStream ostream = sock.getOutputStream();
Web Server पर Socket Open करने के लिए URL व Port Number के रूप में दो Parameters की जरूरत होती है, जिसे या तो Permanently Specify किया जा सकता है अथवा Web Browser जैसे Client से आने वाले Request URL से Extract करके Use किया जा सकता है।
जबकि Output Stream का प्रयोग Web Server पर HTTP Commands Send करने के लिए तथा Input Stream का प्रयोग Web Server द्वारा Returned Response को Read करने के लिए किया जाता है।

Sending HTTP Request to Web Server

जब एक बार Web Server पर Socket Connection Open हो जाता है, उसके बाद Web Browser किसी Document की Request करने के लिए इस Socket पर HTTP Command Write करता है। इस Request के मूलत: चार भाग होते हैं, जहां पहले भाग के अन्तर्गत एक Request Line होती है और इस Request Line के तीन Tokens (Request Method, Request URI, HTTP Version) होते है जो कि आपस में एक Space द्वारा Separated रहते हैं। जैसे-
   GET /index.php HTTP/1.0
इस Request Line Example के तीनों Tokens निम्नानुसार हैं-
Request Method     :       GET
Request URI            :       /index.php
HTTP Version         :       HTTP/1.0
हालांकि HTTP Specification के अन्तर्गत कुल 8 Possible Request Methods को Specify किया गया है, लेकिन मूल रूप से GET व POST को ही सर्वाधिक Use किया जाता है।
दूसरे Token Request URI के रूप में उस Document की Information होती है, जिसके लिए Web Server से Request किया जा रहा है, जो कि हमारे उदाहरण में index.php नाम का Document है।
जबकि तीसरे व अन्तिम Token के रूप में HTTP Specification के उस Highest Level HTTP Version की जानकारी होती है, जिसे Client Web Browser समझता है। सामान्यत: इस Token के अन्तर्गत HTTP/1.0 या HTTP1.1 होता है।
इस Request Line के Just बाद में विभिन्न HTTP Request Headers की जानकारी होती है, जहां प्रत्येक Header एक Key/Value Pair होता है और हर Request Header एक Separate Line में Write होता है, जबकि प्रत्येक Header केKey व Value के बीच Separator के रूप में एक Colon का प्रयोग किया जाता है। अन्तिम Request Header Write करने के बाद अन्त में एक Empty Line Write करना होता है, जिसमें एक Carriage Return व एक Line Feed Instruction मात्र होता है।
यद्धपि यदि HTTP Request में एक भी Request Header न हो, तब भी इस Empty Line को Write करना जरूरी होता है क्‍योंकि ये Empty Line ही Web Server के लिए इस बात का Instruction होता है कि Socket पर Write होने वाले Request में अब कोई Header Information नहीं है।
HTTP Specification में Request व Response दोनों के लिए बहुत सारे Headers को Specify किया गया है, जिनमें से कुछ सर्वाधिक Use होने वाले Headers के बारे में अगले Chapter में काफी विस्तार से Discuss किया गया है तथा जरूरत के अनुसार जब जिस Header को Use करने की जरूरत होगी, उस Header Information को तभी विस्तार से Discuss किया जाएगा।

Accepting HTTP Request by Web Server

जब कोई Client Web Browser, किसी Web Server के Listening Port पर Socket Open करते हुए उसके साथ Connection स्थापित करता है, तो Web Server उसी Listening Port पर Web Browser से आने वाले Request को Accept करते हुए उसे Handle करता है।
ज्यादातर परिस्थितियों में Web Browser से आने वाली Request को Handle करने के लिए Web Server, Host Computer पर एक नया Thread Create करता है, ताकि वह अन्‍य Users द्वारा आने वाली अन्‍य Requests को भी Handle कर सके और Different Users द्वारा Requested Different Documents को समान समय पर Serve कर सके।
यदि आने वाली Request किसी Static Document के लिए हो, तो उस स्थिति में Web Server, Host Computer पर उस Document को Search करके Open करता है और उसके Content को फिर से Client को Response के रूप में Send करने हेतु Opened Socket के Port पर Copy करने की तैयारी करता है।
जबकि यदि आने वाली Request किसी CGI, ASP, PHP, JSP Script या किसी Server Side Program के Execution के लिए हो और Web Server इस तरह की Requests को Process करने हेतु Configured हो, तो उस स्थिति में Web Server इस Request को Fulfill करते हुए Appropriate Server Program को Invoke कर देता है, जो कि उस Request को Response करने के लिए जिम्मेदार होता है।

HTTP Response from Web Server

Web Server, Client Web Browser द्वारा अपने वाली Request को चाहे जिस तरह से Process करे, लेकिन अन्तिम Result के रूप में Web Browser को HTTP Response ही Return होता है और Request की तरह ही Response के भी चार (Status Line, Response Headers, Empty Line and Data) हिस्से होते हैं जहां Status Line स्वयं निम्नानुसार तीन Tokens का बना होता है-
HTTP Version
Client Web Browser द्वारा Supported Highest Version Level की तरह ही ये भी इस बात को Indicate करता है कि Web Server द्वारा HTTP का कौनसा Highest Level Version Supported है।
Response Code
ये एक 3-Digit Numerical Code होता है हो इस बात को Indicate करता है कि Request Successful रहा या Fail हो गया और यदि Fail हो गया तो Fail होने का कारण क्या था।
विभिन्न प्रकार के Most Used Status Codes को अगले Chapter में विस्तार से Discuss किया गया है। जैसे 200एक Status Code है जो Request के Successful होने को Represent करता है।
Optional Response Description
ये Response Code का ही Human Readable Easy Explanation होता है। जैसे OK एक Response Description है जो Request के Successful होने को Represent करता है।
उदाहरण के लिए-
ये Status Line इस बात को Indicate करता है कि User ने जिस Document के लिए Client Web Browser द्वारा Request Perform किया था, वह Request Successful रहा और Requested Document को HTTP/1.0 Version के Protocol के माध्‍यम से Web Browser को Response के रूप में Return कर दिया गया है।
इस Status Line के Just बाद में विभिन्न Response Headers की Information होती है और सभी Headers के बाद अन्त में एक Empty Line होती है, जो कि Headers के अन्त को Indicate करती है। इस Empty Line के बाद वह Response Data होता है, जिसके लिए Web Browser द्वारा Request Perform किया गया था।
ये Response Data सामान्यत: HTML Document या Image Stream होता है और जैसे ही ये Data, Web Browser को Response के रूप में पूरी तरह से Send कर दिया जाता है, Web Server उस Socket Connection को Close कर देता है, जिसे Request Send करते समय Web Browser द्वारा Open किया गया था।

No comments:

Post a Comment