阻塞与非阻塞 和 同步与异步
典型的一次IP的两个阶段:数据就绪和数据读写
数据就绪:根据系统IO操作的就绪状态
系统就绪分为阻塞和非阻塞。
如果是阻塞操作,那么当前线程会被挂起,等待资源准备好。在此期间,CPU会切换到其他线程或程序去执行,直到资源可用,当前线程才会被唤醒并继续执行;
如果是非阻塞操作,当资源还未准备好时,线程不会被挂起,而是会立即返回一个错误或状态信息(例如“资源未就绪”)。线程可以继续执行其他任务,而不是等待资源准备好。这种方式可以让线程在等待资源的同时,去做其他有意义的工作。
数据读写:根据应用程序和内核的交互方式
数据读写分为同步和异步。
同步表示表示A向B请求调用网络接口IO的时候,数据的读写都是A自己完成的;
异步表示A向B请求调用一个网络IO接口时,只需要向B请求,A就可以进行自己的事情了,剩下的B会帮他完成。
在处理IO的时候,只有阻塞和非阻塞是同步IO,只有使用了特殊的API才是异步IO.
HTTP协议
http协议分为两部分:
http_28">http请求
包含请求行、请求头、空行、请求的数据 四个部分
http请求中有两种提交数据的方式,使用的提交方式是在请求行中指定
- 请求行
- 制定了提交数据的方式:post\get
- 请求头
- 多个键值对
- 客户端给服务器发送的数据描述符
- 空行 代表请求头已经结束了
- 请求的数据
- 如果post提交数据,该位置有
- 用get,该位置为空,请求的数据/提交的数据在请求行
get | post | |
---|---|---|
从请求资源分 | 请求静态资源,例如网页、图片、文件等 | 请求动态的,例如用户的登录信息、上传和下载文件 |
从操作数据量上分析 | 比较少,它请求的内容在请求行的第二部分,浏览器的地址栏存储数据需要缓存,缓存有上限,如果数据量太大,会造成数据丢失 | 可以操作大数据,post提交的数据不会显示在地址栏中 |
从安全性 | 容易泄露 | 不会泄露,提交数据看不见 |
http_54">http响应
服务端给客户端回复数据使用的一种数据格式
组成部分也是四个部分:状态行、响应头、空行、相应数据
- 状态行
- HTTP/1.1 200 ok
- HTTP/1.1 http协议的版本
- 200:状态码
- OK:对状态码的描述
- HTTP/1.1 200 ok
- 响应头(消息报头)
- content-type:服务器给客户端回复的数据块格式(对于第四部分的描述)
- content-length:服务器给客户端回复的数据块长度(对于第四部分的描述)
- 空行
- 响应数据
状态码:
1XX:指示信息,表示收到信息,继续处理
2XX:成功,理解,接受
3XX:重定向,默认进行新的请求自动做的
4XX:错误404、403