1 GET 与 POST 区别
- 应用场景不同:GET 是幂等的(幂等的特点是任意次执行产生的影响与只执行一次的影响相同)。POST 不是幂等的。
- 是否缓存:浏览器一般自动缓存 GET 请求,很少对 POST 缓存
- 发送数据的方式:GET 请求的实体是空的,POST 请求实体就是要发送的数据
- 安全性:GET 请求可以将请求的参数放入 URL 地址发送,而 URL 会保存在浏览的历史记录中
- 参数类型:GET 会进行 URL 编码, GET 请求内参数只能出现 ASCII 字符,而 POST 支持更对的参数类型。
2 常见的 Content-Type
text/html
表示数据是 XML 格式文本数据application/json
表示数据是 json 数据application/x-www-form-urlencoded
是表单的默认提交方式。该种方式提交的数据放在 body 里面,数据按照key1=val1&key2=val2
的方式进行编码,key
和val
都进行了 URL 转码。- 对于中文,有多种编码方式,UTF-8,gbk 等等。中文编码不同,最终的 URL 编码也不同。一般浏览器是 UTF-8 编码中文,再转 URL 编码。以
我
字为例,它的 utf-8 编码是E6 88 91
,再转换为 URL 编码是%E6%88%91
- 对于中文,有多种编码方式,UTF-8,gbk 等等。中文编码不同,最终的 URL 编码也不同。一般浏览器是 UTF-8 编码中文,再转 URL 编码。以
multipart/form-data
通常表单上传文件时使用该种方式
3 HTTP 状态码 304
服务器为了提高网站访问速度,对之前访问的部分页面指定缓存机制,当客户端再次对这些页面进行请求,
服务器会根据缓存内容判断页面与之前是否相同,若相同便直接返回 304,此时客户端调用本地缓存内容,不必从服务器进对页面二次下载。
4 GET 方法的 URL 长度受限的原因
实际上 HTTP 协议规范并没有对 get 方法请求的 url 长度进行限制,这个限制是特定的 浏览器及服务器
对它的限制。 IE 对 URL 长度的限制是 2083 字节 (2K+35)。由于 IE 浏览器对 URL 长度的允许值是最小的,所以开发过程中,只要 URL 不超过 2083 字节
,那么在所有浏览器中工作都不会有问题。
nginx 默认是 8K 字节的请求头部大小
5 当在浏览器中输入 URL 并且按下回车之后发生了什么
- 解析 URL。分析传输协议和请求的资源路径。如果协议或者主机名不符合规范,会作为关键字进行搜索引擎搜索。如果包含中文等字符,会进行 URL 编码(chrome 对中文是先 UTF-8 再 URL 编码),转义后再进行下一过程。
- 缓存判断。浏览器判断请求资源是否再缓存,并且是否有效,存在且有效直接使用,否则向服务器发送请求。
- DNS 解析。目的是获取 URL 中的域名的 IP 地址。
- 判断本地是否有域名的 IP 地址缓存,有则使用
- 本地无缓存,向本地 DNS 服务器发送请求,有缓存则使用
- 本地 DNS 服务器检查是否有缓存,如果没有就会先向根域名服务器发起请求,获得负责的顶级域名服务器的地址后,再向顶级域名服务器请求,然后获得负责的权威域名服务器的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后,本地 DNS 服务器再将这个 IP 地址返回给请求的用户。
- 用户向本地 DNS 服务器发起请求属于递归请求
- 本地 DNS 服务器向各级域名服务器发起请求属于迭代请求
- 获取 MAC 地址。当浏览器得到 IP 地址后,数据传输还需要知道目的主机 MAC 地址
- 因为应用层下发数据给传输层中的 TCP 协议,TCP 需要指定源端口号和目的端口号,
- 然后下发给网络层。网络层会将本机地址作为源地址,获取的 IP 地址作为目的地址。
- 然后将下发给数据链路层,数据链路层的发送需要加入通信双方的 MAC 地址,本机的 MAC 地址作为源 MAC 地址,目的 MAC 地址需要分情况处理。
- 通过将 IP 地址与本机的子网掩码相与,可以判断是否与请求主机在同一个子网里,
- 如果在同一个子网里,可以使用 APR 协议获取到目的主机的 MAC 地址,
- 如果不在一个子网里,那么请求应该转发给网关,由它代为转发,此时可以通过 ARP 协议来获取网关的 MAC 地址,而前面需要的目的主机的 MAC 地址就是网关的地址。
- TCP 三次握手。
- HTTPS 握手
- 返回数据。当页面请求发送到服务器端后,服务器端会返回一个 html 文件作为响应,浏览器接收到响
应后,开始对 html 文件进行解析,开始页面的渲染过程 - 页面渲染。浏览器首先会根据 html 文件构建 DOM 树,根据解析到的 css 文件构建 CSSOM 树,如果遇到 script 标签,则判断是否含有 defer 或者 async 属性,要不然 script 的加载和执行会造成页面的渲染的阻塞。当 DOM 树和 CSSOM 树建立好后,根据它们来构建渲染树。渲染树构建好后,会根据渲染树来进行布局。布局完成后,最后使用浏览器的 UI 接口对页面进行绘制。这个时候整个页面就显示出来了
- TCP 四次挥手
6 HTTP 明文的缺点
- 窃听。明文内容会被窃听,账号信息容易泄漏,那你号没了。
- 冒充。无法验证通信双方身份,可能遇到伪装。访问假的淘宝、拼多多,那你钱没了。
- 篡改。无法保证报文完整性,可能遭到篡改。网页上植⼊垃圾广告,视觉污染,眼没了
7 HTTPS 如何解决上述问题?
HTTPS 在 HTTP 与 TCP 之间加入 SSL/TLS 协议。
- 防窃听:非对称和对称加密算法保证了信息被窃取也不会导致通信原文被泄露。
- 防篡改:摘要算法实现完整性,为数据生成唯一的指纹。
- 防冒充:将服务器公钥放入 CA 办法的数字证书中。第三方权威机构保证公钥不被篡改和信任度。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。