Giter Site home page Giter Site logo

computer-network-homework's Introduction

Computer-Network-Homework

要求:

  1. 不允许基于netty等框架,完全基于Java Socket API进行编写
  2. 不分区使用的IO模型,BIO、NIO和AIO都可以
  3. 实现基础的HTTP请求、响应功能,具体要求如下: 3.1 HTTP客户端可以发送请求报文、呈现响应报文(命令行和GUI都可以) 3.2 HTTP服务器端支持GET和POST请求 3.3 HTTP服务器端支持200、301、302、304、404、405、500的状态码 3.4 HTTP服务器端实现长连接 3.5 MIME至少支持三种类型,包含一种非文本类型 4.基于以上的要求,实现注册,登录功能(数据无需持久化,存在内存中即可,只需要实现注册和登录的接口,可以使用postman等方法模拟请求发送,无需客户端)。

参考资料:

  1. https://docs.oracle.com/javase/tutorial/networking/sockets/index.html
  2. http://www.runoob.com/java/java-networking.html
  3. https://tools.ietf.org/html/rfc2616

功能说明

重要:请助教和老师在使用本项目之前清空浏览器缓存,因为使用了cookie,未清空浏览器缓存可能会导致一些异常情况的出现

项目介绍

本项目所用门户、登录、注册界面的源码均来自网络开源项目

本项目基于java Socket API进行开发,运行HttpServer中的主类或者直接运行根目录下的jar包。会自动启动系统默认浏览器并打开门户网站,等待用户进行选择,所有页面罗列如下:

网址 内容
http://localhost:8080 门户网站
http://localhost:8080/login 登陆
http://localhost:8080/register 注册
http://localhost:8080/301 301
http://localhost:8080/302 302
http://localhost:8080/304 304
http://localhost:8080/404 404
http://localhost:8080/txt TXT传输
http://localhost:8080/img 图像传输

使用过程中有网站自动跳转逻辑,但是使用自动跳转的都是状态码为200的页面,有以下页面存在跳转逻辑

  • "User not found, try register first"页面会在3秒之后跳转到登陆界面

  • "Login Success"页面会在4秒之后跳转到门户网站

  • "Wrong Password"页面会在4秒之后跳转到登陆界面

  • "User already exist"页面会在3秒之后跳转到注册页面

  • "Register Success"页面会在4秒之后跳转到登陆页面

各网站介绍

门户网站介绍-李镔达,杜铭哲

测试各项功能可通过直接访问门户网站点击相应的按钮进行操作,不必一项项访问上述表格中的网址

门户网站用于测试本http服务器的所有对应需求功能,主体为一操作列表

操作列表包含注册和登录操作、几种特殊的状态码以及传输MIME类型

注册操作包含成功注册(Register Success) 和用户已存在(User already exist)两种状态,其中用已存在的用户名重新注册会触发用户已存在状态,呈现相应的效果

登录操作包括成功登录(Login Success)、用户不存在,请先注册(User not found, try register first)、密码错误(Wrong Password)三种状态,其中用未注册过的用户名和密码登录触发用户不存在状态,用已注册的用户名和错误密码登录触发密码错误状态,呈现相应效果

各操作码对应的效果详情参见下方介绍

MIME详情参见下方介绍

GET用于请求和显示各网页内容,POST用于登录和注册表单内容的提交,故GET请求和POST请求未直接在操作列表中列出

200:连接成功-李镔达

除门户网站上相应的特殊状态码之外,所有网页状态码均为200,即成功处理请求,并显示与各网址对应的网页内容

301:端口号永久转移-韩茁

自动跳转百度

302:端口号临时转移-刘瑞麒

自动跳转百度

304:网页没有进行改动-杜铭哲

第一次进入304测试页面返回状态码200,页面显示"Hello World!";刷新页面,页面仍显示"Hello World!",网页没有进行改动,此时返回状态码304,之后刷新此页面会一直返回状态码304。

404:端口号无法访问-戴俊浩

会返回一张404的图片,同时告知浏览器404的状态码,在Network中可以进行查看。

405:方法禁用-李镔达

无论请求什么端口,只能使用get和post ,不支持其它方法

注意:由于html5只支持get和post请求,这一状态码烦请助教使用postman进行测试,测试方法为使用除get和post以外的其它方法访问上述表格中的网址,会有相应的response结果

500:服务器内部错误-戴俊浩

注册账号的时候用户名不得超过八位,用户名不得为空,密码不能为空,否则会引发服务器内部错误。返回的状态码为500

MIME-李镔达

本服务器支持三种MIME类型:text/html,text/plain和image/jpeg(非文本)

响应GET请求在response的body部分传输和显示各网址对应的网页内容对应text/html类型,故该类型未直接在操作列表中体现

剩余两种类型在操作列表中,点击按钮可获取相应的内容,可自行更改assets中的mime_txt.txt和mime_jpeg.jpg的内容进行测试(请勿擅自更换文件名称)

cookie使用-杜铭哲

使用前确保已经清除浏览器的Cookie,或者抓包检查主页的请求标头中是否存在Cookie(测试状态下要求一开始不存在Cookie),检查无误后,注册账号,初次登录需要输入用户名和密码,20秒内再次登录不需要输入用户名和密码,而是直接显示登录成功,20秒后Cookie失效,登录需要输入用户名和密码。(如果测试时发生未注册也能直接登录的情况,基本上是没有按照前面的说明清除Cookie)

制作人员列表

"User not found, try register first" 李镔达

"Login Success" 戴俊浩,李镔达

"Wrong Password" 韩茁,戴俊浩

"User already exist" 杜铭哲

"Register Success" 刘瑞麒,戴俊浩

门户网站优化杜铭哲,李镔达

set_cookie杜铭哲

文档戴俊浩

computer-network-homework's People

Contributors

icimence avatar allenlbd avatar qi18 avatar rosshann avatar

Stargazers

 avatar  avatar 杜铭哲 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.