自己动手开发简易的Web服务器
来源:互联网 发布:美女喜欢男生 知乎 编辑:程序博客网 时间:2024/05/22 14:24
使用python实现一个简易版的web服务器,旨在了解web服务器的工作原理,及了解HTTP协议。没有涉及多线程处理,并发之类的内容,以后再专门另外研究。首先上代码,稍后再作讲解。
# coding=utf-8import socketclass httpd(object): def __init__(self,host,port): self.host = host self.port = port def parse_info(self,data): global _ENV _ENV = {} lines = data.splitlines() if len(lines)>0: info = lines[0].split() _ENV["method"] = info[0] _ENV["uri"] = info[1] del lines[0] for i in lines: offset = i.index(":") _ENV[ i[0:offset] ] = i[offset+1::] def log( self,data ): f = open("access.log","a") f.write( data ) f.close() def start(self): print "python web server starring...\nlisten at %s" % self.port httpd = socket.socket(socket.AF_INET,socket.SOCK_STREAM) httpd.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) httpd.bind((self.host,self.port)) httpd.listen(5) while True: conn,addr = httpd.accept() request_data = conn.recv(1024) self.log( request_data ) self.parse_info( request_data.strip() ) body = "HTTP/1.1 200 OK\nContent-Type: text/html;charset=utf-8\nPower: Python web\nAuther: yagas\n\n" body += "<h1>简易的WEB SERVER实例</h1>" conn.sendall(body) conn.close()if __name__ == "__main__": server = httpd("0.0.0.0",80) server.start()
我们通过浏览器进行访问的时候,可以看到”简易的WEB SERVER实例”的页面,并记录下了访问的时候接收到的报头数据,如下:
GET / HTTP/1.1Host: localhostConnection: keep-aliveCache-Control: max-age=0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36Accept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8GET /favicon.ico HTTP/1.1Host: localhostConnection: keep-alivePragma: no-cacheCache-Control: no-cacheUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36Accept: */*Referer: http://localhost/Accept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8
主要信息是头一行:
GET / HTML1.1
GET /favicon.ico HTTP/1.1
请求的方式,请求地址,请求的协议。还有一些浏览器发送的来源主机,浏览器信息,语言信息,缓存信息等等。
服务器在接收到请并进行处理,之后同样以报头的形式返回数据,完成一次数据请求与响应。
HTTP/1.1 200 OKContent-Type:text/html;Charset=utf-8数据主体信息
响应信息的报送结构是:响应协议 状态 OK,空一行,然后是输出html内容。
当我们了解了这一些信息之后,只要针对请求的地址,返回相应的数据,无论是使用什么编程语言,ruby, perl, C, go我们都可以实现一个简易的WEB服务器。
可以把这个简易的web服务器嵌入到某个系统服务中,为用户提供WEB界面进行管理,例如路由器的管理界面等等。
这里只是为大家提供了一个思路。技术的东西,就看你是怎么个用法了。
0 0
- 自己动手开发简易的Web服务器
- 自己动手模拟开发一个简单的Web服务器
- 自己动手开发一个 Web 服务器(一)
- 自己动手开发一个 Web 服务器(一)
- 自己动手开发一个 Web 服务器(二)
- 自己动手开发一个 Web 服务器(三)
- 自己动手开发一个 Web 服务器(一)
- 自己动手写的Web服务器<一>
- WinC++简易的web服务器
- 自己动手开发网络服务器
- Tinywebserver-一个简易的web服务器
- Tinywebserver-一个简易的web服务器
- 一个简易的web服务器:Tinywebserver
- 学习一个月web开发的成果,服务器C++,数据库postgresql简易的知识分享平台
- 自己动手写web服务器一(浏览器的访问信息)
- 简易Web服务器
- 简易Web服务器
- 简易web服务器
- iOS毛玻璃效果的实现
- gcc编译C语言
- 【Leetcode】Jump Game #55
- 放在这里,看看能不能养出儿子?
- LeetCode 题解(122): House Robber II
- 自己动手开发简易的Web服务器
- 蚂蚁爬杆之动态演示
- 2015062801 - 祈福八仙水上乐园
- Eight reasons I rejected your article
- 8 reasons I accepted your article
- Opencv调用摄像头
- 11个超棒的iOS开发学习网站
- LeetCode 题解(123): Add and Search Word - Data structure design
- 2015062802 - EffactiveJava笔记 - 第40条 谨慎设计方法签名