HTTP,超文本传输协议(HyperText Transfer Protocol),属于应用层协议;主要用于网页的获取(基于网站的数据传输),信息的传递(基于http协议的数据传输)。
一、HTTP概念
1、HTTP的特点
a、应用层协议,传输层使用tcp传输b、简单灵活,和多种语言对接方便
c、无状态协议,不记录用户的通信内容
d、成熟稳定 http1.1
2、HTTP的工作模式
* 使用http双方均遵循http协议规定发送接收消息体* 请求方,根据协议组织请求内容发送给对方
* 服务方,收到内容按照协议解析
* 服务方,将回复内容按照协议组织发送给请求方
* 请求方,收到回复根据协议解析
3、HTTP请求(Request)
请求格式:请求行
请求头
空行
请求体
a、请求行
请求种类 请求内容 协议版本eg:
GET / HTTP/1.1
请求种类:
GET 获取网络资源
POST 提交一定的附加数据,得到返回结果
HEAD 获取响应头
PUT 更新服务器资源
DELETE 删除服务器资源
CONNECT 预留
TRACE 测试
OPTIONS 获取服务器性能
b、请求头
对请求内容的具体描述以键值对的形式对请求信息进行描述
eg:
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
c、请求体
提交具体的请求参数 4、HTTP响应(Response)
响应格式:
响应行
响应头
空行
响应体
a、响应行
反馈具体的响应情况版本信息 响应码 附加信息
eg:
HTTP/1.1 200 OK
响应码 :
1xx 提示信息 表示请求已经接受
2xx 响应成功
3xx 响应需要重新请定向
4xx 客户端错误
5xx 服务器错误
常见响应码 :
200 成功
404 请求页面不存在
401 没有访问权限
500 服务器发生未知错误
503 服务器暂时无法执行
b、响应头
对响应信息的具体描述eg:
Cache-Control: private
Connection: Keep-Alive
c、响应体
将客户想要的内容进行返回二、HTTP服务器简要模型
1、tcp应用:http传输
from socket import *
#处理请求,返回响应
def handleClient(connfd):
print("Connect from",connfd.getpeername())
request = connfd.recv(4096)
#按行进行分割
requestHeadlers = request.splitlines()
for line in requestHeadlers:
print(line)
#无论什么请求给出相同的响应
try:
f = open("./index.html")
except IOError:
response = "HTTP/1.1 404 not found\r\n"
response += '\r\n'
response += "===Sorry,The page not found==="
else:
response = "HTTP/1.1 200 OK\r\n"
response += '\r\n'
for i in f:
response += i
finally:
connfd.send(response.encode())
connfd.close()
#网络链接控制流程
def main():
sockfd = socket()
sockfd.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sockfd.bind(('0.0.0.0', 8000))
sockfd.listen(5)
while True:
print("Listen to the port 8000.....")
connfd, addr = sockfd.accept()
#处理具体客户端请求
handleClient(connfd)
if __name__ == "__main__":
main()
说明:
sockfd.bind(('0.0.0.0', 8000)),可以在局域网中任何电脑访问此服务器;
sockfd.bind(('127.0.0.1', 8000))和sockfd.bind(('localhost', 8000)),只能在本机进行访问。
2、index.html文件
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
这是一个网页
</body>
</html>
说明:同http服务器代码放在同一个目录下