文章目录
输入网址回车,后面发生了什么
- 浏览器从地址栏的输入中获得服务器的 IP 地址和端口号;
- 浏览器用 TCP 的三次握手与服务器建立连接;
- 浏览器向服务器发送拼好的报文;
- 服务器收到报文后处理请求,同样拼好报文再发给浏览器;
- 浏览器解析报文,渲染输出页面。
浏览器从地址栏的输入中获得服务器的 IP 地址和端口号
输入 WWW.优快云.cn 后,DNS的运行流程
- 先检查本地的DNS缓存是否存在这个域名记录
- 不存在找本地的hosts文件是否存在对应的记录
- 不存在继续交给网卡的配置的DNS服务进行转发解析,常见的“8.8.8.8;114.114.114.114”;
- 不存在去顶级域名服务com 找前缀XXX再找二级域名等等;
- 返回结果IP请求
浏览器用 TCP 的三次握手与服务器建立连接
- 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
- 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;
- 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
HTTP报文长相
-
请求行组成有三部分,空格分割
- 请求方法
- 请求目标
- 版本号
-
服务器响应状态行
HTTP/1.1 200 OK
- 版本号
- 状态码
- 原因,数字状态码补充;
HTTP/1.1 404 Not Found
-
头部字段常用的分为三大类
- 通用字段:在请求头和响应头里都可以出现
- 请求字段:仅能出现在请求头里,进一步说明请求信息或者额外的附加条件;
- 响应字段:仅能出现在响应头里,补充说明响应报文的信息;
- 实体字段:它实际上属于通用字段,但专门描述 body 的额外信息。
常见的八种请求类型
- GET:获取资源,读取或者下载数据
- HEAD:获取资源的元数据
- 请求后只会传回响应头
- 使用场景:不需要响应数据,只获取响应头,避免body浪费
- POST:写入或者上传数据
- PUT:类似post
- post类似于新建,put类似于update的操作
- DELETE:删除操作
- CONNECT:建立特殊的链接隧道
- OPTIONS:列出可对资源实行的方法
- TRACE:追踪请求
安全与幂等
-
安全
- GET 和 HEAD 方法是“安全”的,因为请求很多次,服务器上的数据都是“安全的”;
- POST/PUT/DELETE 会操作服务器上的资源,所以建立为不安全
-
幂等
- 操作多少次,结果都一样则成为“幂等”
- post非幂等、delete、get、put、head 等都是幂等
响应状态码
常见的五类响应状态码
- 1xx:提示信息,处理处于中间状态,需要后续操作
- 2xx:成功,报文正确处理
- 200 ok- 请求成功
- 204 No Content- 请求成功,但是body为空
- 206 Partial Content- 断点续传,body有数据,但是不是全部
- 3xx:重定向,资源位置发生变动想,向服务器重新发送请求
- 301 Moved Permanently- 永久重定向
- 302 Found- 零时重定向,有时候接口后面未加/ 会帮忙加上后重新302
- 304 Not Modified- 缓存重定向
- 4xx:客户端错误,报文有误,服务器无法处理
- 400 Bad Request- 请求报文有错误
- 404 NOT FOUND- 金泰资源丢失位置啊到
- 403 Forbidden- 无权限
- 405 Method Not Allowed- post get 操作使用不当
- …
- 5xx:服务器错误
- 500 Internal Server Error- 服务器内部错误
- 502 Bad Gateway- 网关错误
- 503 Service Unavailable-服务器忙碌