浏览器如何发起一个完整的 HTTP 请求?
答:==应用层==的发送 http 请求,==DNS==将域名解析成 IP,然后到==传输层==通过==三次握手==建立==TCP/IP 请求==,再到==网络层==的 ip 寻址,再到==数据链路层==的封装成帧,最后到==物理层==的利用物理介质传输。
五层因特网协议栈
1 | 1.应用层(dns,http) DNS解析成IP并发送http请求 |
HTTP
超文本传输协议,Web 浏览器和 Web 服务器之间的通信,一般基于 TCP/IP 协议
DNS
Domain Name System,即域名系统。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 端口 53[1]。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。
可以理解为一个工具将域名和 IP 关联了起来,通过让快速访问到 IP,域名查询到 IP。
比较牛逼的网站可能会用 CDN 来进行均衡用户访问负载量。
CDN
Content Delivery Network,即内容分发网络。网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术。
通俗的讲就是在人多的地方放置更多的服务器,当访问量激增,CDN 可以通过全局负载技术将流量平均分配到不同的服务器中,保证流量均很,减少网络拥堵。一般域名查询时会用到 CDN,保证用户访问域名是能获得最快的访问速度
什么是 TCP/IP 协议?
TCP(传输控制协议)和 IP(网际协议)。
通俗的讲,我们所接触的绝大多数 HTTP 请求都是 TCP/IP 请求。
tcp 将 http 长报文划分为短报文,通过三次握手与服务端建立连接,进行可靠传输以及断开连接的四次握手。
什么是三次握手、四次握手?
- 三次握手
1 | 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 |
通俗的讲
1 | 1.客户端告诉服务端,请求建交 |
- 四次握手
1 | 第一次握手:TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。 |
通俗的讲
1 | 1.客户端告诉服务器,我要开始和你断交了 |
浏览器对于同一域名的 tcp/ip 并发是有数量限制的,一般是 2~10 个不等,就是 POST/GET 请求在同一域名下请求并发量是有限制的!
GET 和 POST 的区别
POST 会发送 2 个 TCP 的包,首先发起预请求,会向服务端发送 headers,如果的到 100 continue,则会发送 data 包,返回数据
GET 只会发送一个 TCP 的包,直接向服务端发送 header 和 data,返回数据。
后台处理流程
1 | 1.一般有的后端是有统一的验证的,如安全拦截,跨域验证 |
http 的报文接口
报文接口包含:通用头部,请求/响应头部,请求/响应体
通用头部
1 | Request Url:请求的web服务器地址 |
值得注意的是,在存在跨域问题的时候,可能是 method 为 options,状态码为 404/405 等
在这里主要归纳下状态码:
1 | 1XX——指示信息,表示请求已接收,继续处理 |
也就是 4XX 可能是客户端的问题,不单单是服务器端的问题,个人觉得应该优先排除客户端的容器问题(tomcat、iis 等)