本文将介绍Python之HTTP静态Web服务器开发的详细情况,特别是关于python静态网页的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于dar
本文将介绍Python之HTTP静态Web服务器开发的详细情况,特别是关于python静态网页的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于darkhttpd 小型静态Web服务器、Golang 简单静态web服务器、html – Eclipse静态Web项目HTTP预览/服务器模块与相对路径冲突、HTTP和HTTPS访问本机localhost WEB服务器的知识。
本文目录一览:- Python之HTTP静态Web服务器开发(python静态网页)
- darkhttpd 小型静态Web服务器
- Golang 简单静态web服务器
- html – Eclipse静态Web项目HTTP预览/服务器模块与相对路径冲突
- HTTP和HTTPS访问本机localhost WEB服务器
Python之HTTP静态Web服务器开发(python静态网页)
众所周知,Http协议是基于Tcp协议的基础上产生的浏览器到服务器的通信协议 ,其根本原理也是通过socket进行通信。
使用HTTP协议通信,需要注意其返回的响应报文格式不能有任何问题。
响应报文,一共包括4个部分,分别是响应行,响应头,空行,响应体,并且每项数据之间必须使用/r/n隔开。
空行是区分响应头和响应体的必要数据,不能省略。
HTTP静态Web服务器主要开发思路如下:
1.导入socket模块
2.创建socket对象
3.设置端口复用,解决端口阻塞问题
4.绑定端口及ip,在绑定端口及IP后,客户端只能通过绑定的IP及端口给服务器发送请求报文。
5.设置监听,
注意:设置监听成功后,原socket变成被动套接字,不能够进行数据的收发。
6.等待客户端(浏览器)链接(发送请求)
7.使用链接成功后返回的新socket进行数据的收发。
注意:此处返回数据应为HTTP响应报文。
1 # 1.导入模块
2 import socket
3
4
5 def main():
6 # 2.创建socket对象
7 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
9 # 3.设置端口复用
10 server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
11 # 4.绑定端口
12 server_socket.bind(('''', 8001))
13 # 5.设置监听
14 server_socket.listen(128)
15 # 设置循环接收客户端连接,实现多客户端连接
16 while True:
17 # 6.接收客户端连接
18 client_socket, ip_port = server_socket.accept()
19 print("客户端:%s 上线了,使用端口为:%s" % ip_port)
20 # 7.接收数据
21 recv_data = client_socket.recv(1024).decode(''utf-8'')
22 if recv_data:
23 # print(''接收的数据为:'', recv_data)
24 # 获取http请求报文中的指定路径
25 # split()方法不指定参数时,默认以空白字符(\t,\n,空格)分割
26 # 获取到的路径信息分割后,会形成三部分存放到列表中
27 # 1.请求提交的方式:GET/POST
28 # 2.请求路径信息及参数信息
29 # 3.HTTP协议及版本
30 page_recv_data = recv_data.split()[1]
31 print(''请求的资源路径为:'', page_recv_data)
32 # 判断接受到的路径信息是否包含参数
33 # HTTP协议中,参数格式为:/index.html?name=666&age=12
34 if ''?'' in page_recv_data:
35 real_recv_page = page_recv_data.split(''?'')[0]
36 else:
37 real_recv_page = page_recv_data
38 try:
39 # 8.发送数据
40
41 # 接收指定的路径信息,并读取文件信息
42 # 注意f-string只能在3.6及以上版本使用
43 data = f''static{real_recv_page}''
44 print(data)
45 with open(data, ''rb'') as file:
46 page_data = file.read()
47 except Exception as e:
48 # 8.1 当文件不存在时,编写HTTP协议如下格式:
49 http_line = ''HTTP/1.1 / 404 NOT FOUND\r\n''
50 http_header = ''Server: PWS/1.0\r\n''
51 http_body = ''<h1>Page Not Found!</h1>''
52 send_data = (http_line + http_header + ''\r\n'' + http_body).encode()
53 client_socket.send(send_data)
54 else:
55 # 8.1 当文件存在时,编写HTTP协议如下格式:
56 http_line = ''HTTP/1.1 / 200 ok\r\n''
57 http_header = ''Server: PWS/1.0\r\n''
58 send_data = (http_line + http_header + ''\r\n'').encode() + page_data
59 client_socket.send(send_data)
60 finally:
61 # 断开与客户端连接
62 client_socket.close()
63 else:
64 print(''客户端:%s,端口号:%s 下线了'' % ip_port)
65 break
66
67 # 9.关闭套接字
68 # 关闭服务器
69 # server_socket.close()
70
71
72 # 入口
73 if __name__ == ''__main__'':
74 main()
darkhttpd 小型静态Web服务器
darkhttpd 介绍
darkhttpd 是一个安全的、轻量级、快速和单线程的 HTTP/1.1 的Web服务器,只支持静态文件。只需一个可执行文件。
darkhttpd 官网
http://unix4lyfe.org/darkhttpd/
Golang 简单静态web服务器
直接使用 net.http 包,非常方便
// staticWeb
package main
import (
"fmt"
"net/http"
"strconv"
)
//传入url参数、静态文件存放目录、监听的端口号
func StaticRunServer(urlPath string, filePath string, port int) {
http.Handle(urlPath, http.FileServer(http.Dir(filePath)))
fmt.Print("Run server!")
portStr := strconv.Itoa(port)
http.ListenAndServe(":"+portStr, nil)
}
html – Eclipse静态Web项目HTTP预览/服务器模块与相对路径冲突
这就是我要看到的:
所以我转到localhost:8080 / MySite / index.html并查看我的主页.
正如您所看到的那样,该链接并未处于应有的位置.
它应该是localhost:8080 / MySite / index.html,甚至更可取的是,MySite的索引页面应该托管在localhost:8080 / index.html而不是某些模块上.
的index.html
<!DOCTYPE html> <html lang="en"> <body> <a href="/index.html">Home</a> </body> </html>
如果我将其更改为MySite / index.html,则会失去它作为http预览服务器的目的,因为MySite最终将成为它自己的站点而不是某种模块.
如何在不使用变通方法的情况下解决此问题?
解决方法
As you can see the the link is not leading where it should be. It should be going to localhost:8080/MySite/index.html,but instead it goes to localhost:8080/index.html
那是因为你使用的是与服务器root /相对的url表单.
只需在MySite / index.html中使用./(page-relative路径)而不是/(server-root-relative path).
<!DOCTYPE html> <html lang="en"> <body> <a href="./index.html">Home</a> </body> </html>
希望能帮助到你!
HTTP和HTTPS访问本机localhost WEB服务器
HTTP和HTTPS访问本机WEB服务器
内网主机上安装了WEB服务器,只能在局域网内或者本机上访问,怎样从公网也能访问本地WEB服务器?
本文将介绍使用holer实现的具体步骤。
1. 准备工作
1.1 安装Java 1.7及以上版本
执行命令java -version
检查Java安装和配置是否正确。
1.2 安装并启动WEB服务器
默认安装的WEB服务器HTTP端口是80,HTTPS端口是443。
2. 实现步骤
2.1 下载并解压holer软件包
Holer软件包:holer-client.zip
2.2 修改holer配置文件
在holer官网上申请专属的holer access key或者使用开源社区上公开的access key信息。
例如申请得到的holer信息如下,这里以此holer信息为例:
---------------------------------------------
Holer Client : holerdemo@gmail.com
Access Key : 6688daebe02846t88s166733595eee5d
---------------------------------------------
Domain Name : holer65004.wdom.net
Internet Address : holer.org:65004
Local Address : 127.0.0.1:80
---------------------------------------------
Domain Name : holer65014.wdom.net
Internet Address : holer.org:65014
Local Address : 127.0.0.1:443
---------------------------------------------
修改配置文件: holer-client/conf/holer.conf
配置项更新为: HOLER_ACCESS_KEY=6688daebe02846t88s166733595eee5d
2.3 启动holer服务
进入目录: holer-client/bin
Windows系统平台:
双击startup.bat
或者打开CMD控制台,进入目录下执行命令:startup.bat
Linux系统平台:
执行命令: sh startup.sh
2.4 访问映射后的公网地址
浏览器里输入如下URL,就可从公网也能访问本地WEB服务器了。
HTTP访问: http://holer65004.wdom.net
或者 http://holer.org:65004
HTTPS访问: https://holer65014.wdom.net
或者 https://holer.org:65014
2.5 问题咨询与帮助
使用holer过程中遇到问题可以先查看holer日志文件,日志路径:holer-client/logs
,这样很容易排查出问题的具体原因。
更多的holer使用示例,请参考holer相关的技术资料。
今天的关于Python之HTTP静态Web服务器开发和python静态网页的分享已经结束,谢谢您的关注,如果想了解更多关于darkhttpd 小型静态Web服务器、Golang 简单静态web服务器、html – Eclipse静态Web项目HTTP预览/服务器模块与相对路径冲突、HTTP和HTTPS访问本机localhost WEB服务器的相关知识,请在本站进行查询。
本文标签: