tcp应用之http传输
http协议 : 超文本传输协议,是一个应用层协议
用途 : 网页数据的传输
数据传输方法
特点 :
1. 应用层协议,传输层使用tcp服务
2. 简单,灵活,多种语言都有http相关操作接口
3. 无状态的协议,即不记录用户传输的信息
4. http1.1 支持持久连接
一端通过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: max-age=0
Connection: keep-alive
空行
请求体 : 请求参数或者是提交内容
http响应 (response)
响应格式
响应行 : 反馈响应的情况
格式 : HTTP/1.1 200 OK
协议版本 响应码 附加信息
响应码 : 响应的具体情况
1xx : 提示信息,表示请求成功
2xx : 响应成功
3xx : 响应需要重定向
4xx : 客户端错误
5xx : 服务端错误
常见响应码 : 200 成功
404 请求内容不存在
401 没有访问权限
500 服务器发生未知错误
503 暂时无法执行
响应头 : 对响应内容的具体描述
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Thu, 06 Sep 2018 09:11:18 GMT
空行
响应体 : 返回给请求端的具体内容
IO input output
在内存中存在数据交换的操作都可以认为是IO操作
和终端交互 : input print
和磁盘交互 : read write
和网络交互 : recv send
IO密集型程序 : 在程序执行过程中存在大量IO操作,而cpu运算操作较少。消耗cpu较少,运行效率较低
计算密集型程序(cpu密集型程序):在程序执行中cpu运算较多,IO操作相对较少。消耗cpu大,运行速度快
IO分类
阻塞IO 非阻塞IO IO多路复用
阻塞IO
阻塞IO是IO的默认形态,是效率较低的一种IO情形。
阻塞情况
* 因为某种条件没有达成造成的阻塞
e.g. accept input recv
* 处理IO数据传输时间较长形成的阻塞
e.g. 网络传输过程,文件读写过程
非阻塞IO
通过修改IO事件的属性,使其变为非阻塞状态。(让一些条件阻塞函数不再阻塞)
* 非阻塞IO往往和循环判断一起使用
s.setblocking(False)
将套接字设置为非阻塞状态
超时检测
将原本阻塞的函数设置一个最长阻塞时间。如果时间内条件达成则正常运行,如果仍然阻塞则视为超时,继续向下运行或产生异常
s.settimeout(sec)
设置套接字的超时时间
想要看更多的课程请微信关注SkrEric的编程课堂