HTTP学习与Web服务器编程

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这次的主题是查找HTTP协议的相关资料,基于此编写一个简单的Web服务器。
需要完成的几大主要的要求有:
1)编写一个简单的Web服务器;
2)实现的服务器应能与标准的浏览器进行简单的交互;
3)记录浏览器与服务的交互过程;
4)利用HTML语言编写网页浏览器可通过编写的Web服务器正常访问该网页;
5)支持多用户并发访问;
6)扩展编写的简单Web服务器,使浏览器能够浏览Web上存储的图像

一.了解http协议(参考百度百科)

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理,应答的服务器上存储着(一些)资源,比如HTML文件和图像;(我们称)这个应答服务器为源服务器。“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
其实简单说就是任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包,每个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP决定了每个数据包的格式。如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。
HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。
请求报文格式为:请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体。请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。SP 是分隔符。除了在最后的 CRLF 序列中 CF 和 LF 是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。
应答报文格式为:状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体。状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。
简而言之,使用http就像我们打电话订货一样,我们可以打电话给商家,告诉他我们需要什么规格的商品,然后商家再告诉我们什么商品有货,什么商品缺货。这些,我们是通过电话线用电话联系(HTTP是通过TCP/IP),当然我们也可以通过传真,只要商家那边也有传真。

二.建立简单的web服务器
我们将使用java语言,基于java.net.Socket和java.net.ServerSocket实现一个简单的web服务器。

首先我们来看一下整个程序的大致结构(使用的IDE为eclipse):
这里写图片描述
有三个Java类,分别是服务器类MyWebServer.java和需要在服务器类里调用的Request类和Responses类,分别用来处理接收到的http协议报文的解析工作和响应工作。在本工程目录下建一个文件夹resource用来储存所有的html文件和图片。

现在主要说说整个程序的思路:
1.创建一个ServerSocket对象;
2.调用ServerSocket对象的accept方法,等待连接,连接成功会返回一个Socket对象,否则一直阻塞等待;
3.从Socket对象中获取InputStream和OutputStream字节流,这两个流分别对应request请求和response响应;
4.处理请求:读取InputStream字节流信息,转成字符串形式,并解析
5.处理响应:根据解析出来的uri信息,从WEB_ROOT目录中寻找请求的资源资源文件, 读取资源文件,并将其写入到OutputStream字节流中;
6.关闭Socket对象;
7.转到步骤2,继续等待连接请求;

(1)服务器类

//MyWebServer.java
package homework3;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;  
import java.net.ServerSocket;  
import java.net.Socket;



public class MyWebServer {
   
   
        public static int PORT=8888;
        public static final String WEB_ROOT="resource";  
        public static void main(String[] args) { 
            System.out.println("开启服务器");
            try {
                ServerSocket WebServer=null;
                WebServer = new ServerSocket(PORT,1,InetAddress.getByName("127.0.0.1"));
                while(true)
                //不断循环监听是否有新的请求,有的话启动一个线程响应
                {
                    Socket Client=WebServer.accept();
                    new HttpConnectThread(Client).start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }  
        }  
}



class HttpConnectThread extends Thread
{
    
网络编程(一)——浅析web服务器浏览器的实现原理_web服务器和浏览器安全设置原理 最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。其中方法也就是所谓的get/post之类的请求方法,统一资源标示符也就是要访问的目标资源的路径,包括协议协议版本,这些信息被放在请求的第一行。而实际上,这也是浏览器开发的难点和重点。那么,对应的,当WEB服务器处理完浏览器请求,返回数据时,也会有对应的封装,就是所谓的HTTP响应体。随后,紧接着的便是请求标头; 阅读详情

相关推荐

构建一个基本的Rust Web服务器:使用Hyper库处理HTTP请求和响应

本文将介绍如何使用Rust编程语言以及Hyper库来构建一个基本的Web服务器。我们将探讨处理HTTP请求和响应的关键概念,并提供一个简单的示例代码,以帮助您入门。无论您是初学者还是有经验的Rust开发人员,这篇文章都将为您提供一个起点,帮助您了解如何构建和扩展一个高性能的Web服务器。如果您对Web开发和Rust编程感兴趣,那么这篇文章将为您提供有用的信息和指导。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1084

捕获HTTP包,网络编程实现

HTTP SOCKET MFC 网络编程 抓包 捕获HTTP包,网络编程实现

使用Web前端服务器进行编程

Web前端服务器是托管和提供Web前端应用程序的服务器。使用编程语言和框架,如Node.js和Express.js、Python和Flask,可以轻松地创建和配置Web前端服务器。这只是两种常见的编程语言和框架示例,实际上还有其他语言和工具可以用于创建Web前端服务器,如Java(使用Spring框架)、Ruby(使用Ruby on Rails框架)等。处理请求:一旦服务器接收到请求,它会根据请求的URL、请求方法(如GET、POST等)以及其他相关信息来确定需要采取的操作。Web前端服务器的工作原理。

ByteJolt的博客 195

实现一个Web服务器HTTP服务器

实现 TCPServer类: 功能: 启动 server_start 处理请求 get_request 、 process_request、close_request 正常关闭 shutdown 属性: 服务端地址 处理器 Handler 套接字 --> 用于接收客户端请求 实现网络请求处理器Handler类 功能: 编码 encode / 解码 decode: 字节...

qq_42347617的博客 784

Python 开发一个 Web 服务器

利用 Python 开发一个可以一次处理一个 HTTP 请求的 Web 服务器,该服务器可以接受并解析HTTP 请求,然后从服务器的文件系统中读取被 HTTP 请求的文件,并根据该文件是否存在而向客户端发送正确的响应消息,

mainjay 1709

WebServer项目(四)->(基于Proactor的c++)Web服务器简介及简单实现

WebServer项目(四)->(基于Proactor的c++)Web服务器简介及简单实现

敖丙007的博客 4222

Python Web开发(详细教程)

PythonWeb开发可以涵盖多个方面,包括服务器端开发、数据库管理、前端设计和API开发等。在服务器端开发中,常用的Python Web框架有Django、Flask和Bottle等。这些框架提供了一套工具和结构,使得开发者能够更高效地构建Web应用程序。在PythonWeb开发中,数据库管理也是一个重要的方面。Python提供了多种数据库连接库,如SQLAlchemy和psycopg2,可以轻松地主流数据库(如MySQL、PostgreSQL和SQLite)进行交互。

Python84310366的博客 3万+

7 年的 web 编程生涯,今天系统整理学习web 安全学习笔记

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓👉CSDN大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享**(安全链接,放心点击)**👈。

jennycisp的博客 1240

基于LinuxC实现Web服务器项目介绍:实战C语言网络编程

基于LinuxC实现Web服务器项目介绍:实战C语言网络编程 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今互联网时代,Web服务器作为网络基础设施的核心组件之一,其重要性不言而喻。今天,我将为您推荐一个基于Linux操作系统的C语言Web服务器项目。该项目旨在帮助编程爱好者通过实践,深入理解C语言在网络编程中的应用,以及HTTP协议的运作机制。 项目技术分析 ...

gitblog_06763的博客 888

易语言简易WEB服务器:从源码学习网络编程

易语言是一种以中文作为编程语言的编程工具,它允许开发者使用中文词汇和语法来编写程序代码。这种设计极大地降低了编程的门槛,使得中文用户能够更加方便地参到软件开发的过程中。易语言不仅提供了丰富的中文编程库,还支持多平台开发,包括Windows、Android等。易语言的出现,为广大没有英语背景的编程爱好者打开了一扇门。它的设计理念是将编程语言“翻译”成易于理解的中文,使得即使是编程新手也能快速上手,创建出自己的应用程序。

weixin_42234168的博客 1049

VB6.0编写的简易WEB服务器:为网络编程初学者量身打造

VB6.0编写的简易WEB服务器:为网络编程初学者量身打造 去发现同类优质开源项目:https://gitcode.com/ 简易WEB服务器 项目介绍 在现代网络技术飞速发展的背景下,掌握网络编程成为程序员必备的技能之一。而VB6.0作为一种经典的编程语言,其易学易用的特性使其成为了许多编程爱好者和初学者的首选。今天,我们将为您介绍一个基于VB6.0语言编写的简易WEB服务器项目,它不仅可以帮助...

gitblog_06765的博客 288

Web会不会学到php,如何学习web编程

学习web编程的方法:1、学习html和css;2、学习javascript;3、了解web服务器;4、学习一门服务器端脚本语言;5、学习数据库及SQL语法;6、学习web框架。如何学习web开发,需要掌握哪些方面?这里我写下我的一些的建议,仅供参考。学习WEB编程有两种学习方法:第1种:不管三七 二十一 ,先把所有基础全学完, 每个知识点掌握50%就行了, 最后在实战的时候下苦功,哪个地方不会...

weixin_36294980的博客 183

python学习笔记第十六天------------网络编程http协议web并发服务器

文章目录1. http协议1.1 HTTP协议简介1.2 HTTP请求1.2.1 步骤11.2.2 步骤21.2.3 步骤31.3 HTTP格式1.3.1 HTTP GET请求的格式1.3.2 HTTP POST请求的格式1.3.3 HTTP响应的格式2. Web静态服务器----显示固定的页面3. Web静态服务器----显示需要的页面4. Web静态服务器----多进程5. Web静态服务器...

zenghongju的博客 558

Python Web 编程基础详解

Python web开发基础

燕鹏 1021

socket编程 java多线程web服务器设计实现

相信很多人在socket编程学习过程中,都会遇到类似的web服务器的设计案例,可是对于刚接触socket的新手来说,往往难以迈出第一步,于是在此分享一个多线程的web服务器代码(参考计算机网络课程的代码框架),便于各位网友参考学习使用! 一、理解多线程 多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样...

a1004070060的博客 3547

web框架的概念

什么都想学会,就什么都学不会 框架:反复使用的提炼出来,比如舞台 对http协议解析返回的服务器web服务器——》计算机 WSGI接口:Web Server Gataway Interface 转载于:https://www.cnblogs.com/jintian/p/11129651.html...

weixin_30852451的博客 239

Linux下Web服务器开发

web服务器开发,练习指南。

小明的专栏 1万+

《TCP/IP网络编程学习笔记 | Chapter 24:制作 HTTP 服务器

《TCP/IP网络编程学习笔记 | Chapter 24:制作 HTTP 服务器

ProgramNovice的博客 495

Python网络编程实战:实现一个简易版Web服务器

在实际应用中,可以尝试实现更复杂的功能,如动态页面生成、数据库连接、安全性等。学习Web应用架构:为了设计和实现更复杂的Web应用程序,了解Web应用的基本架构和设计模式是非常有帮助的。使用更高级的Web框架:实现一个功能完善的Web服务器可能需要大量的工作。您可以考虑使用更高级的Web框架(如Flask、Django等),这些框架通常提供了更丰富的功能和更好的性能。支持HTTPS:为了保护用户数据的安全性和隐私,您可以尝试实现HTTPS(安全套接层HTTP协议,以加密客户端服务器之间的通信。

斌擎科技 1351
上一篇: 八皇后问题详解(四种解法)
下一篇: python使用tf-idf法判断文本关键词
codes_first
博客等级 码龄10年 255粉丝 34原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值