名称 | 功能 | 常用协议 |
应用层 | 通信类型:电子邮件,文件传输,客户端/服务器 | HTTP,FTP等 |
表示层 | 加密,数据转换:AsCII到EBCDIC,BCD到二进制等 | |
会话层 | 启动、停止会话,维持秩序 | |
传输层 | 确保传递整个文件或消息 | TCP,UDP等 |
网络层 | 根据网络地址将数据路由到不同的LAN和WAN | IP等 |
数据链路(MAC)层 | 根据站地址从节点到节点传输数据包 | |
物理层 | 电信号和布线 |
HTTP请求三次握手与四次挥手
- 建立连接:三次握手
- 客户端 > 服务器 [SYN]:在么
- 服务器 > 客户端 [SYN,ACK]:在
- 客户端 > 服务器 [ACK]:OK
- 关闭连接:四次挥手
- 客户端 > 服务器 [FIN]:我要关连接了
- 服务器 > 客户端 [ACK]:先等我把数据发完
- 服务器 > 客户端 [FIN]:我发完了,可以关闭了
- 客户端 > 服务器 [ACK]:知道了
SYN:synchronization(同步)
ACK:acknowledgement(确认:告知已收到)
FIN:finish(结束)
HTTP请求/响应报文
- HTTP请求报文组成:请求行+请求头+请求体
- 请求行:请求方法(HEAD/GET/POST)+请求URL+HTTP协议版本
- 请求头:比如客户端的Cookie和User-Agent就放在这里。
- 请求体:比如客户端POST的数据就放在这里(对比:GET的数据放在请求行的URL里).
- HTTP响应报文组成:响应行+响应头+响应体
- 响应行:HTTP协议版本+状态码+状态码描述
- 响应头:比如服务器的Set-Cookie和Server信息就放在这里.
- 响应体:比如服务器返回的HTML和JSON数据就放在这里.
HTTP状态码
- 1xx:信息
- 2xx:成功
- 200:请求成功
- 3xx:重定向
- 4xx:客户端错误
- 400:语法格式有误,服务器无法理解请求
- 403:对被请求页面的访问被禁止
- 404:服务器无法找到被请求的页面
- 405:请求中指定的方法不被允许(GET,POST等等)
- 415:由于媒介类型不被支持,服务器不会接受请求(Content-Type类型错误)
- 5xx:服务器错误
- 500:服务器遇到不可预知的情况(一般情况是代码报错,抛出了未处理异常)