HTTP协议 HTTP状态码
1. http请求过程
-
先判断地址需不需要 Redirect
-
查看App Cache 中是否有缓存
-
查找该域名对应的 IP 地址进行 DNS 解析
DNS 解析过程:浏览器缓存、hosts 文件 、路由器缓存、ISP 解析服务器 、递归查询
-
TCP 连接建立需要经历三次握手(SYN -> SYN+ACK -> ACK)
-
浏览器给Web服务器发送一个HTTP请求
-
服务器接收请求,ngin处理请求,如php文件,python文件
-
服务器返回响应,浏览器开始显示HTML,获取html,js,css,img等
2. 网络模型
- 物理层:物理传输设备。如中继器,集成器、网线等
- 数据链路层:通信的实体间建立数据链路连接。如网卡、网桥、二层交换机
- 网络层:为数据在结点之间传输创建逻辑链路。如路由器,交换机
- 传输层:提供应用进程之间的通信逻辑。如TCP、UDP
- 会话层:提供访问验证和回话管理。如服务器验证登录
- 表示层:数据格式转换。如URL加密、口令加密
- 应用层:访问网络服务接口。如Telnet、FTP、Http
3. Http协议历史
4. TCP协议:Transmission Control Protocol传输控制协议
Http 请求需要在 Tcp 链接基础上传输数据
客户端与服务器通过 Http 请求发送过程中需要创建 Tcp
Tcp 链接中可以发送多个 Http 请求,不同的 Http 版本请求数不同
每次建立 Tcp 链接都需要三次握手
-
历史Http Tcp 建立过程
http1.0 创建 Tcp 链接 请求完成时候关闭
http1.1 声明 Tcp 链接保持,不需要三次握手的开销
http2.0 http 请求可以并发
-
TCP 三次握手过程
-
为什么要开启TCP链接
网络延迟导致服务器开销的问题,过滤创建无用的链接
5. UDP协议: User Datagram Protocol 用户数据报协议
和TCP协议一样用于处理数据包
无连接协议
不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠
面向报文传输,不处理接收的数据,直接塞进数据报中
没有拥塞控制
支持一对多,多对多,多对一的方式发送
不需要和 TCP一样在发送数据前进行三次握手建立连接的
6. URI、URL、URN
URI:Uniform Resource Identifier / 统一资源标志符
- 用来标识互联网上的信息资源,包含URL和URN
URL:Uniform Resource Locator / 统一资源定位器
- 类似于住址,它告诉你一种寻找目标的方式
URN:Universal Resource Name / 永久统一资源定位符
- 用来唯一标识一个实体
7. 状态码
100 => 'Continue', // 继续
101 => 'Switching Protocols', // 交换协议
102 => 'Processing', // 处理
103 => 'Early Hints', // 提前暗示
200 => 'OK', // 成功
201 => 'Created',
202 => 'Accepted', // 认可的
203 => 'Non-Authoritative Information', // 非授权信息
204 => 'No Content', // 无内容
205 => 'Reset Content', // 重置内容
206 => 'Partial Content', // 部分内容
207 => 'Multi-Status', // 多状态
208 => 'Already Reported', // 已经播报
226 => 'IM Used', // 异步使用
300 => 'Multiple Choices', // 多选
301 => 'Moved Permanently', // 永久重定向, 请求的资源已永久移动到了一个新的Url
// 重新更新Url链接
302 => 'Found', //临时重定向, 请求的资源已临时移动到了一个新的URL,但未来可能会恢复到原始Url
303 => 'See Other', // 当前响应在另一个 URI 上被找到
304 => 'Not Modified', // 服务端已经执行了GET,但文件未变化
305 => 'Use Proxy', // 请求只能使用代理服务器
307 => 'Temporary Redirect', // 临时跳转
308 => 'Permanent Redirect', // 永久跳转
400 => 'Bad Request', // 无效请求
401 => 'Unauthorized', // 未授权请求
402 => 'Payment Required', // 请求不允许
403 => 'Forbidden', // 请求被禁止,当服务器接收到请求,但由于某些原因拒绝提供请求的资源或操作
// 被列入黑名单,被防火墙拒绝,没有权限,Ip被封锁,资源不存在
404 => 'Not Found', // 请求对象不存在, 页面、资源不存在
405 => 'Method Not Allowed', // 方法不允许
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required', // 需要代理身份验证
408 => 'Request Timeout', // 请求超时
409 => 'Conflict', // 冲突
410 => 'Gone', // 请求丢失
411 => 'Length Required',
412 => 'Precondition Failed', // 先决条件失败
413 => 'Payload Too Large', // 负载太大
414 => 'URI Too Long', // url太长
415 => 'Unsupported Media Type', // 媒体类型不支持
416 => 'Range Not Satisfiable', // 范围不适合
417 => 'Expectation Failed', // 预期失败
418 => 'I\'m a teapot',
421 => 'Misdirected Request', // 误导请求
422 => 'Unprocessable Entity', // 无法处理的实体
423 => 'Locked',
424 => 'Failed Dependency',
425 => 'Reserved for WebDAV advanced collections expired proposal', //保留用于WebDAV高级集合过期提案
426 => 'Upgrade Required',
428 => 'Precondition Required', // 要求先决条件
429 => 'Too Many Requests',
431 => 'Request Header Fields Too Large', // 请求头字段太大
451 => 'Unavailable For Legal Reasons', // 因法律原因无法获得
499 => 'Client has closed connection', // 客户端主动关闭连接
500 => 'Internal Server Error', // 内部服务器错误
501 => 'Not Implemented', // 服务器无法满足客户端请求。 检查请求方法是不是get post
502 => 'Bad Gateway', // 接收到了无效的响应。 通常出现在网络架构中的代理服务器、反向代理服务器或负载均衡器中
503 => 'Service Unavailable', // 无法提供请求的服务。 表示服务器过载、维护、故障或其他暂时的问题
504 => 'Gateway Timeout', // 请求超时
505 => 'HTTP Version Not Supported', // http 版本不支持
506 => 'Variant Also Negotiates', // 服务器存在内部配置错误
507 => 'Insufficient Storage', // 远程服务器返回错误
508 => 'Loop Detected',
510 => 'Not Extended',
511 => 'Network Authentication Required', // 客户端需要进行身份验证以获得网络访问。