TCP应用之 http传输
网站访问流程
1,客户端发起http请求
2, 传输层使用tcp协议建立连接,层层打包,将请求内容发送给服务器
3,web服务器接收后解析http请求,叫给后端应用程序处理
4, 后端应用得到结果,通过web server发给前端
http协议介绍
用途:
网站中网页的传输和数据传输
也可用作基于http协议的编程传输数据
特点: 应用层协议, 使用tcp连接
简单灵活,接口使用方便
几乎支持所有数据类型
无状态协议:通信过程中不记录客户端的访问状态
http 1.0无连接, http1.1持续连接
请求:request
格式:
请求行: 确定具体请求的类型
请求头: 对请求内容的信息描述
空行
请求正文: 具体请求参数
请求行: GET /index.html HTTP/1.1
请求方法 请求资源 协议版本
请求方法:
GET 获取网络资源:最为常用
POST 提交一定的附加数据,得到返回结果:例如登陆,注册等页面,常用
HEAD 获取响应的头部信息
PUT 更新服务器的资源
DELETE 删除服务器资源
TRACE 用于测试
CONNECT 保留方法
OPTIONS 请求获取服务器性能和信息
请求头:
Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.6
Connection:keep-alive
Host:gss0.bdstatic.com
Referer:http://news.baidu.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
请求体:
GET请求--> get参数 &a=1&b=2
POST请求 --> post提交的内容
响应 response
响应行: 反馈响应的情况
响应头: 对响应的具体描述
空行:
响应体: 具体返回给用户的内容
响应行: HTTP/1.1 200 OK
协议版本 响应码 响应码对应信息
响应码:
1xx 提示信息,表示请求已经接收,正在处理
2xx 请求响应成功
3xx 重定向,完成任务需要其他操作
4xx 请求资源不存在,客户端错误
5xx 服务端错误
常用响应码:
200 成功
401 没有权限
404 资源不存在
500 服务器发生未知错误
503 服务器暂时无法执行
响应头 格式同请求头
响应体: 文件,图片。。。
要求: 能够简述访问一个网站的流程,
知道什么是http协议及基本特点,
知道http请求种类,及每种请求的功能
知道http响应种类及常用响应码
知道GET请求和POST请求的功能和区别
from socket import *
from time import sleep
def handleClient(connfd):
request = connfd.recv(2048)
requestHeadlers = request.splitlines()
for line in requestHeadlers:
print(line)
try:
f = open('d:\csdn.html','r',encoding='utf-8')
except IOError:
response = "HTTP/1.1 404 not found\r\n"
response += '\r\n'
response += '''--------sorry, file not found--------'''
else:
response = "HTTP/1.1 200 OK\r\n"
response += '\r\n'
for line in f:
response += line
finally:
connfd.send(response.encode())
f.close()
def main():
sockfd = socket()
sockfd.setsockopt(SOL_SOCKET, SO_REUSEADDR,1)
sockfd.bind(('0.0.0.0',8888))
sockfd.listen(10)
while True:
sleep(0.1)
connfd,addr = sockfd.accept()
handleClient(connfd)
connfd.close()
if __name__ == "__main__":
main()
然后使用web访问: http://127.0.0.1:8888/
效果如下: