面试题之http
面试题之http
2Chaos浏览器从输查找缓存
合成 URL
浏览区会判断用户输入是否为合法 URL(Uniform Resource Locator,统一资源定位器)。如果用户输入的是搜索关键词,默认的搜索引擎会合成新的 URL。如果符合 URL 规则,会根据 URL 协议,在这段内容加上协议合成合法的 URL。
查找缓存
网络进程获取到 URL,先去本地缓存中查找是否有缓存资源,如果有则拦截请求,直接将缓存资源返回给浏览器进程;否则,进入网络请求阶段。
DNS 解析(域名系统 Domain Name System)
DNS 查找数据缓存服务中是否缓存过当前域名信息,有则直接返回;否则,会进行 DNS 解析返回域名对应的 IP 和端口号,如果没有指定端口号,http 默认 80 端口,https 默认 443。如果是 https 请求,还需要建立 TLS 连接(传输层安全性协议 Transport Layer Security)。
TCP 连接
建立 TCP 连接:
TCP 三次握手与服务器建立连接,然后进行数据的传输;
发送 HTTP 请求:
浏览器首先会向服务器发送请求行,它包含了请求方法、请求 URI(统一资源标识符 Uniform Resource Identifier)和 HTTP 协议的版本;还会发送请求头,告诉服务器一些浏览器的相关信息,比如浏览器内核,请求域名;
服务器处理请求:
服务器首先返回响应头+响应行,响应行包括协议版本和状态码。
页面渲染
查看响应头的信息,做不同的处理,比如重定向,存储 cookie;看看 content-type 的值,根据不同的资源类型来用不同的解析方式。
断开 TCP 连接
数据传输完成,正常情况下 TCP 将四次挥手断开连接。
HTTP 和 HTTPS 区别
HTTP的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头。HTTP无法加密,而 HTTPS 对传输的数据进行加密,安全。HTTP标准端口是 80 ,而 HTTPS 的标准端口是 443。- 在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 的安全传输机制工作在传输层。
HTTPS 是密文传输数据,HTTP 是明文传输数据。HTTPS 协议 = HTTP 协议 + SSl/TLS 协议。用 SSL/TLS 对数据进行加密和解密。SSL 的全称是 Secure Sockets Layer,即安全套接层协议。TLS 的全称是 Transport Layer Security,即安全传输层协议。对数据进行对称加密,对对称加密所要使用的秘钥进行非对称加密传输。
服务端的公钥和私钥,用来进行非对称加密。客户端生成的随机秘钥,用来进行对称加密。
GET 和 POST 发送请求
HTTP 协议中的两种发送请求的方法。
异同
同:GET 和 POST 本质上就是 TCP 链接。
异:
- 数据包数量:GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。(并不是所有浏览器都会在 POST 中发送两次包,Firefox 就只发送一次。)
- 过程:
- 对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);
- 对于 POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)。
对于 POST 请求方式,可以将请求数据打包在请求体中,并通过 Headers 头部信息里的 “Content-Type” 字段指定请求体的数据类型为 JSON,并且在服务端返回相应头信息的时候也指定返回类型为 JSON。
应用
在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。在网络环境差的情况下,两次包的 TCP 在验证数据包完整性上,有非常大的优点。因为 GET 一般用于查询信息,POST 一般用于提交某种信息进行某些修改操作(私密性的信息如注册、登陆),所以 GET 在浏览器回退不会再次请求,POST 会再次提交请求。
因为 GET 在浏览器回退不会再次请求,POST 会再次提交请求,所以 GET 请求会被浏览器主动缓存,POST 不会,要手动设置。
GET 请求参数会被完整保留在浏览器历史记录里,POST 中的参数不会。
因为 GET 请求参数会被完整保留在浏览器历史记录里,所以 GET 请求在 URL 中传送的参数是有长度限制的,而 POST 没有限制。
因为 GET 参数通过 URL 传递,POST 放在 Request body 中,所以 GET 参数暴露在地址栏不安全,POST 放在报文内部更安全。
HTTP 状态码
状态码是由 3 位数组成,第一个数字定义了响应的类别,且有五种可能取值:
- 1xx Informational(信息状态码):接受请求正在处理
- 2xx Success(成功状态码):请求正常处理完毕
- 3xx Redirection(重定向状态码):需要附加操作已完成请求
- 4xx Client Error(客户端错误状态码):服务器无法处理请求
- 5xx Server Error(服务器错误状态码):服务器处理请求出错
常见状态码
- 200 响应成功
- 204 返回无内容
- 301 永久重定向(请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。)
- 302 临时重定向(服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。)
- 304 资源缓存(自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。)
- 400 错误请求(请求格式错误,服务器不理解请求的语法。)
- 422 无法处理(请求格式正确,但是由于含有语义错误,无法响应)
- 401 未授权(请求要求身份验证。)
- 403 服务器禁止访问
- 404 服务器找不到请求的网页
- 500、502 服务器内部错误
- 504 服务器繁忙







