- http协议
介绍:超文本传输协议,是一个应用层协议
用途:网页数据的传输
数据传输方法
特点:
1、应用层协议,传输层使用tcp服务
2、简单、灵活,多种语言都有http相关操作接口
3、无状态的协议,即不记录用户传输的信息
4、http1.1 支持持久连接
- http请求与响应
一端通过http请求的格式发送具体请求内容,另一端接收http请求,按照协议格式解析。获取真实请求后按照http协议响应格式组织回复内容,回发给请求方,完成一次数据交互 - http请求(request)
请求格式
请求行:具体的请求类别和请求内容
格式: GET / HTTP/1.1
请求类别 请求内容 协议版本
** GET 获取网络资源
** POST 提交一定的附加信息,得到返回结果
HEAD 获取响应头
PUT 更新服务器资源
DELETE 删除服务器资源
CONNECT
TRACE 用于测试
OPTIONS 获取服务器性能信息
请求头:对请求内容的具体描述信息
Accept-Encoding : gzip,deflate
Accept-Language :zh-CN,zh;q=0.9
Cache-Control : nax-age=0
Connection: keep-alive
空行
请求体:请求参数或者是提交内容
- http响应(response)
响应格式
响应行:反馈响应的情况
格式:HTTP/1.1 200 OK
协议版本 响应码 附加信息
响应码:响应的具体情况
1xx:提示信息,表示请求成功
2xx:响应成功
3xx:响应需要重定向
4xx:客户端错误
5xx:服务端错误
常见:200 成功 404 请求内容不存在
401没有访问权限 500 服务器发生未知错误
响应头:对响应内容的具体描述
Connection: Keep-alive
Content-Encoding: gzip
Content-Type: text/html
Dste: Thu,06 `````````
空行
响应体:返回给请求端的具体内容
- HTTP服务端编写_用于返回一个index.html网页
#该程序用来演示HTTP服务器的功能,在浏览器上访问成功时
#返回index.html的网页
from socket import *
def handle_client(connfd):
'''对客户端发送的请求报文按行打印并返回一个网页'''
request = connfd.recv(4096)
#print(request)
#用splitlines对request按行分割
for line in request.splitlines():
print(line.decode())
#若打开网页失败
try:
f = open('index.html')
except IOError:
responce = 'HTTP/1.1 404 not found\r\n'
responce += '\r\n'
responce += '====Sorry not found===='
else:
responce = 'HTTP/1.1 200 OK\r\n'
responce += '\r\n'
responce += f.read()
finally:
connfd.send(responce.encode())
#创建套接字
def main():
sockfd = socket()
sockfd.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
sockfd.bind(('0.0.0.0',8888))
sockfd.listen(3)
print('Listen to the port 8888')
while True:
connfd,addr = sockfd.accept()
#处理请求
handle_client(connfd)
connfd.close()
if __name__ == '__main__':
main()
在浏览器上访问(主机IP,端口:8888)便可测试上述代码