tcp的http应用 Http1.0版本的创建

  • 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)便可测试上述代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值