HTTP协议的作用原理

哈工大2021年秋季学期数据结构期末试题 因为考完试没有收演草纸,所以题中数据与考试差距不大。选项顺序可能略有差异;选择第5题希尔排序的序列数据是后编的;简答第3题B-树的插入序列顺序可能不同,但是考察的点是一样的。其他题的数据基本可以保证和原题一样。 一、选择题 111.以下代码的时间复杂度是 for(int k=1;k<=n;k++) for(int j=1;j<=n;j++) count++; A.O(n)       B.O(nlogn) & 阅读详情

HTTP协议的作用原理

                                      

 WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协议的作用原理包括四个步骤:
  (1) 连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。
  (2) 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:
  GET 路径/文件名 HTTP/1.0
  文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
  (3) 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。
  例:假设客户机与www.mycompany.com:8080/mydir/index.html建立了连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0。主机名为www.mycompany.com的Web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。
为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
常用的HTTP头信息有:
  ① HTTP 1.0 200 OK
  这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成。
  ② MIME_Version:1.0
  它指示MIME类型的版本。
  ③ content_type:类型
  这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。
  ④ content_length:长度值
  它指示HTTP体信息的长度(字节)。
  (4) 关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

  二、Java实现Web服务器功能的程序设计

  根据上述HTTP协议的作用原理,实现GET请求的Web服务器程序的方法如下:
  (1) 创建ServerSocket类对象,监听端口8080。这是为了区别于HTTP的标准TCP/IP端口80而取的;
  (2) 等待、接受客户机连接到端口8080,得到与客户机连接的socket;
  (3) 创建与socket字相关联的输入流instream和输出流outstream;
  (4) 从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:GET 路径/文件名 HTTP/1.0
  (5) 从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访问的HTML文件名。没有HTML文件名时,则以index.html作为文件名;
  (6) 如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误信息给Web浏览器;
  (7) 关闭与相应Web浏览器连接的socket字。
  下面的程序是根据上述方法编写的、可实现多线程的Web服务器,以保证多个客户机能同时与该Web服务器连接。
  程序1:WebServer.java文件
  // WebServer.java 用JAVA编写Web服务器
  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(); // 接受客户机的连接请求
      new ConnectionThread(client,i).start();
      i++;
     }
    } catch (Exception e) {System.out.println(e);}
   }
  }

  /* ConnnectionThread类完成与一个Web浏览器的通信 */
  class ConnectionThread extends Thread {
   Socket client; // 连接Web浏览器的socket字
   int counter; // 计数器
   public ConnectionThread(Socket cl,int c) {
    client=cl;
    counter=c;
   }
   public void run() // 线程体
   {
    try {
     String destIP=client.getInetAddress().toString(); // 客户机IP地址
     int destport=client.getPort(); // 客户机端口号
     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(); // 读取Web浏览器提交的请求信息
     System.out.println("Received:"+inline);
     if (getrequest(inline)) { // 如果是GET请求
      String filename=getfilename(inline);
      File file=new File(filename);
      if (file.exists()) { // 若文件存在,则将文件送给Web浏览器
       System.out.println(filename+" requested.");
       outstream.println("HTTP/1.0 200 OK");
       outstream.println("MIME_version:1.0");
       outstream.println("Content_Type:text/html");
       int len=(int)file.length();
       outstream.println("Content_Length:"+len);
       outstream.println("");
       sendfile(outstream,file); // 发送文件
        outstream.flush();
      } else { // 文件不存在时
       String notfound="<html><head><title>Not Found</title></head>
       <body><h1>Error 404-file not found</h1></body></html>";
       outstream.println("HTTP/1.0 404 no found");
       outstream.println("Content_Type:text/html");
       outstream.println("Content_Length:"+notfound.length()+2);
       outstream.println("");
       outstream.println(notfound);
       outstream.flush();
      }
     }
     long m1=1;
     while (m1<11100000) {m1++;} // 延时
     client.close();
    } catch (IOException e) {
     System.out.println("Exception:"+e);
    }
   }

   /* 获取请求类型是否为"GET" */
   boolean getrequest(String s) {
    if (s.length()>0)
    {
     if (s.substring(0,3).equalsIgnoreCase("GET")) return true;
    }
    return false;
   }

   /* 获取要访问的文件名 */
   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";
    return f;
   }

   /*把指定文件发送给Web浏览器 */
   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);
    }
   }
  }

  程序中的ConnectionThread线程子类用来分析一个Web浏览器提交的请求,并将应答信息传回给Web浏览器。其中,getrequest()方法用来检测客户的请求是否为"GET";getfilename(s)方法是从客户请求信息s中获取要访问的HTML文件名;sendfile()方法把指定文件内容通过socket传回给Web浏览器。
  对上述程序的getrequest()方法和相关部分作修改,也能对POST请求进行处理。

  三、运行实例

  为了测试上述程序的正确性,将编译后的WebServer.class、ConnectionThread.class和下面的index.html文件置于网络的某台主机的同一目录中(如:主机NT40SRV的C:/JWEB目录)。
程序2:index.html文件
  <HTML>
  <HEAD>
  <META HTTP-EQUIV="Content-Type" content="text/html; charset=gb_2312-80">
  <TITLE>Java Web服务器</TITLE>
  </HEAD>
  <BODY>
  <h3>这是用JAVA写出的WEB服务器主页</h3>
  1998年8月28日
  <hr>
  </BODY>
  </HTML>
  首先在该主机上用java命令运行WebServer.class:
  C:/jweb>java webserver
  然后在客户机运行浏览器软件,在URL处输入WebServer程序所属的URL地址(如: http://nt40srv:8080/index.html),就在浏览器窗口显示出指定的HTML文档。
  注意,不能缺省端口号8080,如缺省,则运行该主机的正常WEB服务器。
  说明,不具备网络条件的可在安装了Windows 95的单机上进行测试,方法是用localhost或127.0.0.1代替URL地址的域名部分,即URL地址为 http://localhost:8080
Android真机调试——ADB调试(含华为手机无法找到设备) 本文以Huawei Nova7为例。 阅读详情

相关推荐

【工控基础】UVW平台踩坑

1 每个轴按顺时针或逆时针走一个距离,就是旋转。 2 图中W动,U轴V轴不动,就是X方向的平移 3 图中U轴V轴同时动,X不动,就是Y方向的平移。

songhuangong123的博客 6852

基于Java的Web服务器设计与实现

HttpServer 类,也不允许使用其它非 Jave SE 库(如各种来源的 servlet-api.jar、jsp-api.jar、jasper.jar、其它相关功能的实现)。1)部分支持 JSP 中的语法,包含基本的 request,response 等。1)支持从 Web.xml 中读取 Filter 配置信息,实现标准的 filter 行为。2)界面包含启动按钮。3)标准的 Servlet 代码,无需修改在开发的系统中能够运行。3)能响应请求的目录的信息,并以列表显示;

毕业作品网站 1213

Arduino I2C for TCA9548A应答扫描程序

Arduino I2C for TCA9548A应答扫描程序

perseverance51博客 1104

JavaWeb服务器开发(精品这一套就足够)

物理服务器: 从硬件层面认识服务器: 服务器是计算机的一种,它比普通个人计算机运行更快、负云服务器: 很多公司都会去阿里云、腾讯云、百度云等公司租赁 载更高、价格更贵。 由于服务器不间断的一直运行,噪音大、需要散热,所以通常情况都不会自己购买服务服务器程序:跑在物理服务器上的应用程序(用编程语言边写出来的,比如java,php,js等等)web服务器,又称为网站服务器,就是给用户提供网站服务的,开发者可以把自己搭建的网站发布到web服务器上,让全世界的用户访问到。 常见的web服务器有:tomcat、n

SYJ的博客 6155

使用java自制简易web服务

记得好多年前,刚刚开始学javaweb的时候,老师教的第一件事是安装jdk,第二件事就是安装tomcat了。当时老师的操作是,下载完压缩包后解压,然后把tomcat的bin目录添加到环境变量里面,然后打开黑乎乎的cmd,输入catalina就可以运行tomcat了。当时还不知道为什么只要添加了环境变量,就可以在cmd里面启动tomcat,更不要说为什么我们什么都没有设置,输入一个命令就能启动web服务器了。

haohulala的博客 2227

java 网络服务器_如何用Java实现Web服务

如何用Java实现Web服务器一、HTTP协议作用原理WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器Web服务器之间的应用层协议,是通用的、无状...

weixin_30297493的博客 727

全网最详细JavaWeb环境配置,以及服务器搭建

JavaWeb环境配置,以及服务器搭建

lz17267861157的博客 9224

HTTP协议作用原理 [ZT]

引用于:blog.chinaunix.net/u/21848/showart_169963.html HTTP协议作用原理WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议HTTP)进行通信。HTTP协议是基于TC

freezgw1985的专栏 981

java http请求原理_服务器_用Java实现Web服务HTTP协议,一、HTTP协议作用原理   H - phpStudy...

用Java实现Web服务HTTP协议一、HTTP协议作用原理HTTP协议作用原理包括四个步骤:1.连接:Web浏览器Web服务器建立连接。2.请求:Web浏览器通过socketWeb服务器提交请求。3.应答:Web浏览器提交请求后,通过HTTP传送给Web服务器。Web服务器接到请求后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。4....

weixin_28309571的博客 254

前端基础HTML之浏览器作用,主流浏览器浏览器访问网页原理和URL组成、HTTP协议、纯文本文件

浏览器作用 将网页渲染出来给用户查看 让用户通过浏览器与网页交互 主流浏览器(内核是渲染引擎,决定浏览器如何显示网页内容) IE:内核Trident 谷歌:内核WebKit / Blink 火狐:内核Gecko Safarri:内核WebKit 欧朋:内核Presto 浏览器访问网页原理 访问网页时有真是物理文件传输 ...

zx870121209的博客 548

Java多线程Web服务器的设计与实现

以JDK为开发工具,利用 Socket通信机制实现一个多线程的WEB服务器,该服务器具有以下功能: 1.能够并行服务于多个请求。 2.对于每个请求,显示接收到的HTTP请求报文的内容,并产生适当的响应(若找到用户请求对象,则返回该对象。否则发送一个包含适当提示信息的响应消息,从而可以在浏览器窗口中显示差错信息。)

m0_53676388的博客 856

Java中的Web服务

Web服务器是一种用于处理客户端请求并返回响应的服务器程序。它通过HTTP协议与客户端进行通信,处理请求、执行应用逻辑,并返回相应的HTML页面、数据或其他资源。在Java中,Web服务器通常使用Servlet技术实现,Servlet是Java EE(企业版)规范的一部分,用于扩展服务器的功能。Servlet是一种基于Java的服务器端编程技术,它允许开发人员创建动态Web内容。Servlet运行在Web服务器上,处理客户端的HTTP请求,并生成动态的响应内容。加载与实例化。

weixin_46372265的博客 536

Java网络编程之简易Web服务器实现

这里,我们写入了HTTP/1.1 200 ok作为响应的状态行,Content-Type:text/html作为响应的Content-Type,Content-Length来指定响应体的长度。在Main类的main方法中,我们首先创建一个ServerSocket对象,监听指定的端口号(这里设为7777)。通过InputStream的read()方法,我们可以读取字节流,并使用指定的字符编码将其转换为字符串。在实际的开发中,我们可能需要添加更多的功能和错误处理逻辑,以提高服务器的稳定性和安全性。

m0_64577506的博客 294

java实现web服务器_Java 实现一个简单的web服务

在日常的开发中,我们用过很多开源的web服务器,例如tomcat、apache等等。现在我们自己实现一个简单的web服务器,基本的功能就是用户点击要访问的资源,服务器将资源发送到客户端的浏览器web服务基于的是HTTP协议,用户在浏览器的地址栏输入要访问的地址,服务器如何得到该地址是个关键。先看下一般的HTTP请求和响应报文的一般格式:HTTP 请求报文 HTTP 响应报文 二 socket类 ...

weixin_29001683的博客 2524

JavaWebWEB服务

WEB WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。 Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。 静态web资源开发技术:HTML、CSS、JavaScr...

离开屏幕的光,哪盏灯照亮你的孤独? 8309

Java 编程实战:如何用 Java 编写一个简单而强大的 Tomcat

本文介绍了如何使用 Java 编写 Tomcat,并实现一个简单的 Web 服务器和 Servlet 容器。本文还介绍了 Tomcat 的基本框架和相关配置,并使用 Eclipse 进行开发和调试。本文旨在帮助伙伴们理解和掌握 Tomcat 的原理和用法。Tomcat 是一个开源的 Web 服务器和 Servlet 容器,它可以提供动态 Web 内容的处理和交互功能。Tomcat 是用 Java 语言编写的,需要运行在 Java 虚拟机上,所以它可以跨平台运行,并且可以与其他 Java 技术集成。

TaloyerG的博客 2692

WIFIPR密码破解工具

wifi密码破解工具,和ewsa差不多的软件,Wireless Password Recovery是一款电脑WiFi密码破解软件,简称“WiFiPR”,其实,开发该软件的目的是为了找回忘记的WiFi密码,但是其能够破解WPA-PSK和WPA2-PSK密码,所以很多人就是那它来破解WiFi密码,经测试,破解简单WiFi密码的速度和成功还是很高的,破解复杂的WiFi密码则需要很长时间。

windows 可以直接使用的标注软件Labelme.exe

最近碰上了YOLO,正好需要标注,记录一下下载的这个常用的标注软件labelme. windows可以直接打开使用的labelme.exe

上一篇: 什么是Web2.0
下一篇: 工作体会
difeng
博客等级 码龄21年 6粉丝 36原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值