计算机网络-HTTP协议——沐雨先生

实验内容

1.使用Java平台的com.sun.net.httpserver包搭建一个简易HTTP server;

2.编辑网页(.html文档)存放在HTTP server端;

3.在浏览器端浏览HTTP server的网页;

4.使用抓包软件wireshark查看并分析HTTP请求和响应消息首部和数据。

基本要求

1.理解HTTP协议的工作过程;

2.了解HTTP请求消息和响应消息首部结构;

3.学会编写简单的HTML文档。

实验步骤

第1部分 建立简易HTTP服务器

  1. 查看本机IP地址
    进入Dos命令窗口,输入命令ipconfig,查看本主机IP地址,下面是一个可能的显示结果:

以太网适配器 以太网:

连接特定的 DNS 后缀 . . . . . . . :

本地链接 IPv6 地址. . . . . . . . : f880::b1b2:e876:a385:4b82%16

IPv4 地址 . . . . . . . . . . . . : 192.168.1.100

子网掩码 . . . . . . . . . . . . : 255.255.255.0

默认网关. . . . . . . . . . . . . : 192.168.1.1

在这个例子中,主机IPv4地址是192.168.1.100。

  1. 建立一个Java Application项目的包

打开NetBeans开发环境,在前面的实验中,我们曾在"D:\"盘下建立了一个Java Application项目,项目名称是javanetwork,项目所在文件夹是d:\javanetwork;在javanetwork项目中创建一个包,包名是demo.httpserver,在这个包下建立一个名为Server的类,复制下列Java代码,将其粘贴到Server类源码的编辑窗口。

java 复制代码
//Server.java
package demo.httpserver;
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class Server {
    static int BUFF = 1024;
    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress("192.168.1.***",8000), 0);
        server.createContext("/", new MyHandler());
        System.out.println("HTTP Server starts... ...");
        server.start();
    }
    static class MyHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {
           String path = t.getRequestURI().getPath();
           if (path.equals("/"))
             path = "/index.html";
           OutputStream output;
           try
           {
              t.sendResponseHeaders(200, 0);
              output = t.getResponseBody();
              BufferedInputStream in = new BufferedInputStream(new FileInputStream(path.substring(1, path.length())));
              byte[] buf = new byte[BUFF];
              int resp =in.read(buf);
              while (resp != -1){
                output.write(buf,0,resp);
                resp = in.read(buf);
              }
              output.close();
           }
            catch(IOException ioe)
           {
              String resp = "Not Found";
              t.sendResponseHeaders(404, resp.length());
              output = t.getResponseBody();
              output.write(resp.getBytes());
              output.close();
            }
        }
    }
}

将Server.java第15行

HttpServer server = HttpServer.create(new InetSocketAddress("192.168.1.***",8000), 0);

中的IPv4地址替换为第1步得到的主机IPv4地址。

  1. 建立index.html文档

在文件夹D:\javanetwork建立如下index.html文档,可使用记事本等文本编辑软件编辑此文件。

php 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Java Server Test</title>
</head>
<body>
    Hello, world!
</body>
</html>
  1. 运行Server
    在NetBeans开发环境运行Server。
  2. 在本机使用浏览器浏览
    打开Chrome浏览器,在地址栏输入http://<HTTP server的IP地址>:8000,或http://<HTTP server的IP地址>/index.html。例如,http://192.168.1.100:8000,观察浏览器的显示界面。
  3. 从其它主机的浏览器访问HTTP server
    与另外一名同学合作,在另一台电脑打开Chrome浏览器,在地址栏输入http://<HTTP server的IP地址>:8000,或http://<HTTP server的IP地址>/index.html。例如,http://192.168.1.100:8000,查看是否出现预期结果。
    是。
  4. 在Dos命令窗口运行Server
    停止在NetBeans开发环境运行Server程序,将index.html拷贝到路径D:\javanetwork\build\classes
    打开Dos命令窗口,进入路径
    D:\javanetwork\build\classes,执行命令
    java demo.httpserver.Server
    命令成功执行后,Server则一直等待客户的请求。在Chrome浏览器地址栏输入http://<IP地址>:8000,或http://<IP地址>:8000/index.html,可看到浏览器的显示结果。如果要中断HTTP服务,按ctrl-C。

第2部分 修改index.html

按Ctrl-C键停止Dos窗口的HTTP服务,回到NetBeans集成开发环境,使用记事本等文本编辑软件编辑index.html。

HTML的<a>标记(tag)定义超链接,用于从一个页面链接到另一个页面。<a>标记最重要的属性是href,它指示链接的目标。在文件d:\javanetwork\index.html的元素<body></body>中增加一行:

<a href='Server.java'>start</a>

保存index.html,启动Server,使用浏览器浏览,然后点击超链接start,查看显示结果。

Server.java与index.html在不同文件夹,可以在index.html中指出Server.java的位置,例如<a href=".\src\demo\httpserver\Server.java">start</a>

其中.\表示当前目录。

HTML的<h1>到<h6>标记,定义六个不同大小的标题,例如:

<h4>实验三 HTTP</h4>HTML的

标记定义换行,此标记不需要结尾标记,例如:This is<br>an example<br>of line breaks.

修改d:\javanetwork\index.html,要求产生类似下图所示浏览效果:

其中链接Server Source Code指向Server.java, 链接Web Page指向index.html。点击Server Source Code后出现类似如下结果:

点击链接Web Page后出现类似如下结果:

第3部分 抓包

  1. 打开Wireshark,选择接口(网卡)为以太网,点击"捕获"->"选项",不勾选"在所有接口上使用混杂模式",点击"开始"按钮开始抓包;
  2. A,B两台主机一组,B运行Server程序;
  3. A使用浏览器访问B的Server;
  4. 待网页内容完整显示后,停止Wireshark抓包。
相关推荐
阑梦清川1 小时前
JavaEE初阶---网络原理(五)---HTTP协议
网络·http·java-ee
阿尔帕兹1 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
FeelTouch Labs2 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
千天夜3 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
follycat4 小时前
[极客大挑战 2019]HTTP 1
网络·网络协议·http·网络安全
earthzhang20215 小时前
《深入浅出HTTPS》读书笔记(5):随机数
网络协议·http·https
xiaoxiongip6665 小时前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip
JaneJiazhao5 小时前
HTTPSOK:SSL/TLS证书自动续期工具
服务器·网络协议·ssl
JaneJiazhao5 小时前
HTTPSOK:智能SSL证书管理的新选择
网络·网络协议·ssl
CXDNW5 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0