The principle of the role of the HTTP protocol

xiaoxiao2021-03-30  204

The principle of the role of the HTTP protocol

WWW is an application system as a transmission medium in an Internet, and the most basic transmission unit on the WWW online is a web page. WWW's work is based on client / server computing models, composed of a web browser (client) and web server (server), and the hypertext transfer protocol (HTTP) is communicated between the two. The HTTP protocol is based on protocols above the TCP / IP protocol, which is an application layer protocol between web browses and web servers, which is a general, stateless, object-oriented protocol. The principle of the HTTP protocol includes four steps: (1) Connection: The web browser establishes a connection to the web server, open a virtual file called Socket (socket), and the establishment of this file is successfully established. (2) Request: The web browser submits a request to the web server via Socket. The request of HTTP is generally the GET or POST command (POST is used for the transfer of the FORM parameter). The format of the GET command is: GET path / file name HTTP / 1.0 file name points to the file accessed, and HTTP / 1.0 pointed out the HTTP version used by the web browser. (3) Available: After the web browser submits the request, transfer to the web server via the HTTP protocol. After the web server is connected, transaction processing, the processing result is sent back to the web browser via HTTP, so that the requested page is displayed on the web browser. Example: Assume that the client has established a connection with www.mycompany.com:8080/mydir/index.html, it will send a get command: get /mydir/index.html http / 1.0. The host named WWW.MYCOMPANY.COM Search subdirectory MyDir file index.html from its documentation space. If you find this file, the web server transmits the content to the corresponding web browser. In order to inform the web browser, the web server first transmits some HTTP header information, then transmits the specific content (ie HTTP body information), and HTTP header information and HTTP body information are separated from one space. Common HTTP headers are: 1 HTTP 1.0 200 OK This is the first line of the web server response, lists the HTTP version number and response code that the server is running. The code "200 ok" indicates the completion of the request. 2 MIME_VERSION: 1.0 It indicates the version of the MIME type. 3 Content_Type: Type This header information is very important, it indicates the MIME type of HTTP information. Such as: content_type: text / html indicates that the transferred data is an HTML document. 4 Content_length: The length value indicates the length of the HTTP body information (bytes). (4) Turning the connection: When the response is completed, the web browser and the web server must be disconnected to ensure that other web browsers can connect with the web server.

Second, Java implementation of web server function programming

According to the principle of the above HTTP protocol, the method of implementing the web server program for GET requests is as follows: (1) Creating a ServerSocket class object, listening to port 8080. This is to distinguish between the standard TCP / IP port 80 of HTTP; (2) Waiting, accept the client to connect to the port 8080, get the socket associated with the client; (3) Creating the input stream associated with the socket word Instream and output flow outstream; (4) Read the request information submitted by a line client from the input stream INSTREAM associated with the socket, the format of the request information is: GET path / filename http / 1.0 (5) gets from the request information Request type. If the request type is GET, get the HTML file name accessed from the request information. When there is no HTML file name, use index.html as a file name; (6) If the HTML file exists, open the HTML file, transfer the http header information and the HTML file content to the web browser via the Socket, and then close the file. Otherwise send an error message to the web browser; (7) Close the socket word connected to the corresponding web browser. The following program is written in accordance with the above method, which enables multi-threaded web servers to ensure that multiple clients can connect to the web server. Procedure 1: WebServer.java file // WebServer.java Written Web Server IMPORT JAVA.IO. *; Import Java.net. *; Public Class Webserver {Public Static Void Main (String Args []) {INT i = 1 , Port = 8080; Serversocket Server = null; socket client = null; try {server = new serversocket (port); system.out.println ("Web Server is listening on port" server.getlocalport ()); for ;) {Client = server.Accept (); // Accept the client's connection request New connectionthread (Client, i) .Start (); i ;}} catch (exception e) {system.out.println (e); }}}

/ * ConnnectionThread class does communicate with a Web browser * / class ConnectionThread extends Thread {Socket client; // socket connected Web browser word int counter; // counter public ConnectionThread (Socket cl, int c) {client = cl Counter = C;} PUBLIC VOID RUN () // Wire body {Try {string destip = client.getinetaddress (). ToString (); // client IP address int destport = client.getport (); // client port number System.out.println ( "Connection" counter ": connected to" destIP "on port" destport "."); PrintStream outstream = new PrintStream (client.getOutputStream ()); DataInputStream instream = new DataInputStream ( Client.getInputStream ()); string inline = instream.readline (); // reads the request information submitted by the web browser system.out.println ("received:" inline); if (getRequest (inline) {/ / If it is a GET request string filename = getFileName (inline); file file = new file (file "; if (file.exists ()) {// If the file exists, send the file to the web browser system.out.println (FileName "Requested."); Outstream.println ("HTTP / 1.0 200 OK"); Outstream.println ("MIME_V Ersion: 1.0 "); OutStream.println (" Content_Type: Text / HTML); int Len = (int) file.length (); outstream.println ("Content_length:" LEN); Outstream.println ("") Sendfile (outstream, file); // Send file outstream.flush ();} else {// file String notfound = " not found </ title> </ head> <body> <h1> error 404-file not found </ h1> </ body> </ html> "; outstream.println (" http / 1.0 404 no found "; outstream.println ("</p> <p>Content_type: text / html "); OutStream.println (" Content_length: " NOTFOUND.LENGTH () 2); Outstream.println (" "); Outstream.Println (notfound); outstream.flush ();} ring M1 = 1; While (m1 <11100000) {m1 ;} // delay client.close ();} catch (ioException e) {system.out.println ("Exception:" e);}} / * Get The request type is "get" * / boolean getRequest (String s) {if (s.Length ()> 0) {if (s.substring (0, 3) .EqualsignoreCase ("get") Return True;} return False;}</p> <p>/ * Get the file name to be accessed * / string getFileName (String s) {string f = s.substring (s.indexof ('') 1); f = f.substring (0, f.indexof ('') ); Try {if (f.Charat (0) == '/') f = f.substring (1);} catch (stringIndexoutofboundsexception e) {system.out.println ("Exception:" e);} if (F. Equals (")) f =" index.html "; returnif;}</p> <p>/ * Send the specified file to the web browser * / void sendfile (PrintStream outs, file file) {Try {DataInputStream IN = New DataInputStream (New fileInputStream (file); int Len = (int) file.length (); byte Buf [] = new byte [len]; in.readfully (buf); Outs.write (buf, 0, len); outs.flush (); in.close ();} catch (exception e) {system.out .println ("ERROR RETRIEVING FILE."); System.exit (1);}}}</p> <p>The ConnectionThread thread subclass in the program is used to analyze a request submitted by a web browser and pass the response information back to the web browser. Among them, the getRequest () method is used to detect whether the customer's request is "get"; the getFileName (s) method is to obtain the HTML file name to be accessed from the customer request information S; sendFile () method to pass the specified file content via Socket Give a web browser. Modifications to the getRequest () method of the above program and related parts can also be processed.</p> <p>Third, run an example</p> <p>In order to test the correctness of the program, the compiled webserver.class, connectionthread.class, and the following index.html file are placed in the same directory of a host of the network (such as the host NT40SRV C: / jweb directory). Program 2: Index.html file</p> <p><Html></p> <p><HEAD></p> <p><Meta http-equiv = "content-type" content = "text / html; charset = gb_2312-80"></p> <p><Title> Java Web Server </ Title></p> <p></ HEAD></p> <p><Body></p> <p><h3> This is the web server whose Java is written </ h3></p> <p>August 28, 1998</p> <p><hr></p> <p></ Body></p> <p></ Html></p> <p>First, use the java command on this host to run WebServer.class:</p> <p>C: / jweb> Java Web Server</p> <p>Then enter the browser software at the client, and enter the URL address to which the Webserver program is at the URL (eg</p> <p>HTTP: // NT40SRV: 8080 / index.html), the specified HTML document is displayed in the browser window.</p> <p>Note that the port number 8080 cannot be default, such as default, run the normal web server.</p> <p>Explanation, no network conditions can be tested on a single machine installed in Windows 95, the method is used to replace the domain name part of the URL address with localhost or 127.0.0.1, ie the URL address is</p> <p>Http: // localhost: 8080.</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-130516.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="130516" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.051</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'bM4fI_2FHN7VwUe1_2FgvYtcPF60UUvX_2F_2FibaMIkkli3dxmLQOOvEH3hFQfL7AO5NaI4ibrUw_2BeinIPCEhJ_2BajHNfg_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>