11. 一次完整的 HTTP 请求过程
- 域名解析:通过 DNS 将域名转换为 IP 地址,如上述 DNS 的工作原理。
- 建立 TCP 连接:客户端向服务器发送 SYN 报文段,经过三次握手建立 TCP 连接。
- 发送 HTTP 请求:客户端向服务器发送 HTTP 请求报文,请求报文包括请求行(包含请求方法,如 GET、POST 等,请求的 URL 和 HTTP 协议版本)、请求头(包含客户端的一些信息,如浏览器类型、语言等)和请求体(对于 POST 请求,请求体中包含要提交的数据)。
- 服务器处理请求:服务器收到 HTTP 请求后,根据请求的内容进行处理。如果请求的是一个网页,服务器会查找相应的网页文件,并可能执行服务器端脚本(如 PHP、ASP 等)。
- 发送 HTTP 响应:服务器处理完请求后,向客户端发送 HTTP 响应报文。响应报文包括响应行(包含 HTTP 协议版本、状态码和状态消息,如 200 OK 表示请求成功)、响应头(包含服务器的一些信息,如服务器类型、内容类型等)和响应体(包含实际的响应内容,如网页的 HTML 代码)。
- 关闭 TCP 连接:客户端收到 HTTP 响应后,根据响应内容进行处理(如在浏览器中显示网页)。然后,客户端和服务器通过四次挥手关闭 TCP 连接。
12. Cookies 和 session 区别
- Cookies
- 定义:是由服务器发送给客户端浏览器,并保存在客户端本地的一小段文本信息。
- 工作机制
- 当用户第一次访问网站时,服务器可以在响应头中设置一个或多个 Cookies,浏览器收到响应后,会将 Cookies 保存起来。
- 下次用户再次访问该网站时,浏览器会在请求头中自动带上这些 Cookies,服务器根据收到的 Cookies 来识别用户的身份或获取用户的相关信息。
- 特点
- 存储在客户端,容易被篡改。
- 可以设置过期时间,在过期时间之前,每次访问网站都会带上 Cookies。
- Session
- 定义:是服务器端为了维护用户状态而创建的一种机制。
- 工作机制
- 当用户第一次访问网站时,服务器会为用户创建一个唯一的会话 ID,并将该会话 ID 通过 Cookies 或 URL 重写等方式传递给客户端。
- 客户端在后续的请求中带上会话 ID,服务器根据会话 ID 在服务器端找到对应的会话对象,会话对象中存储了用户的相关信息。
- 特点
- 会话信息存储在服务器端,相对安全。
- 通常需要依赖 Cookies 或其他机制来传递会话 ID,如果客户端禁用了 Cookies,可能需要采用其他方式(如 URL 重写)来传递会话 ID。
13. GET 和 POST 的区别(续)
- 安全性(续)
- POST:数据在请求体中,相对 GET 更安全一些,但如果没有采用加密传输(如 HTTPS),数据仍然可能被截获。
- 缓存
- GET:通常会被浏览器缓存,当用户再次访问相同的 URL 时,浏览器可能直接从缓存中获取数据,而不向服务器发送请求。
- POST:一般不会被浏览器缓存,每次提交 POST 请求都会向服务器发送数据。
- 幂等性
- GET:具有幂等性,多次执行相同的 GET 请求,对服务器资源的影响是相同的,即不会改变服务器资源状态。例如多次查询数据库中的数据,结果是相同的。
- POST:一般不具有幂等性,多次执行相同的 POST 请求可能会对服务器资源产生不同的影响,如多次提交订单会创建多个订单。
14. HTTPS 和 HTTP 的区别
- 数据传输安全性
- HTTP(Hypertext Transfer Protocol):数据以明文形式传输,在传输过程中容易被窃取、篡改。例如,用户在 HTTP 网站上输入的登录密码可能会被网络中的攻击者截获。
- HTTPS(Hypertext Transfer Protocol Secure):在 HTTP 的基础上加入了 SSL/TLS 协议进行加密传输。它使用公钥 - 私钥对数据进行加密和解密,确保数据在传输过程中的安全性。
- 端口号
- HTTP:默认端口号是 80。
- HTTPS:默认端口号是 443。
- 证书
- HTTP:不需要证书。
- HTTPS:需要 SSL 证书,证书由证书颁发机构(CA)颁发,用于验证网站的身份。当用户访问 HTTPS 网站时,浏览器会检查证书的有效性,如果证书无效或过期,浏览器会提示用户存在安全风险。
- 搜索引擎优化(SEO)
- HTTP:随着网络安全的重视,搜索引擎对 HTTP 网站的排名可能会逐渐降低。
- HTTPS:搜索引擎更倾向于对 HTTPS 网站进行更好的排名,因为它能提供更安全的用户体验。
15. session 的工作原理?
- 创建
- 当用户第一次访问网站时,服务器会创建一个新的会话(Session),并为该会话生成一个唯一的会话 ID(Session ID)。
- 存储
- 服务器会将会话相关的数据(如用户登录信息、购物车数据等)存储在服务器端的内存或其他存储介质(如数据库)中,以会话 ID 作为索引。
- 传递
- 服务器将会话 ID 传递给客户端,通常通过以下方式:
- Cookies:最常见的方式是将会话 ID 放在 Cookies 中发送给客户端,客户端在后续的每次请求中都会自动带上 Cookies 中的会话 ID。
- URL 重写:如果客户端禁用了 Cookies,服务器可以将会话 ID 附加在 URL 后面,如
http://example.com/page.jsp;jsessionid=123456
,这种方式需要对网站中的链接进行处理,确保会话 ID 能够正确传递。
- 服务器将会话 ID 传递给客户端,通常通过以下方式:
- 检索和使用
- 当客户端再次发送请求时,服务器根据收到的会话 ID 检索对应的会话数据,根据会话数据来处理用户的请求。例如,如果用户已经登录,服务器可以根据会话中的用户登录信息提供个性化的服务。
- 销毁
- 当用户退出登录、会话超时或服务器决定结束会话时,服务器会销毁对应的会话数据,并停止跟踪该用户的会话状态。
16. http 长连接和短连接的区别
- 短连接(HTTP Short - Connection)
- 定义:每次 HTTP 请求 / 响应完成后,客户端和服务器之间的 TCP 连接就会立即关闭。
- 工作过程
- 客户端向服务器发起 HTTP 请求,先建立 TCP 连接(通过三次握手)。
- 服务器处理请求并返回 HTTP 响应。
- 客户端收到响应后,通过四次挥手关闭 TCP 连接。
- 下次客户端有新的 HTTP 请求时,需要重新建立 TCP 连接。
- 应用场景:适用于对实时性要求不高、请求频率较低的场景,如简单的网页浏览,用户在不同页面之间切换时,每次重新建立连接对用户体验影响不大。
- 长连接(HTTP Long - Connection)
- 定义:在一次 TCP 连接中可以进行多次 HTTP 请求 / 响应,连接在一段时间内保持打开状态,直到达到预定的条件(如空闲时间过长、连接数量达到上限等)才会关闭。
- 工作过程
- 客户端向服务器发起 HTTP 请求,建立 TCP 连接。
- 服务器处理请求并返回 HTTP 响应,但 TCP 连接不关闭。
- 客户端可以在该连接上继续发起新的 HTTP 请求,服务器继续处理和响应,多次重复此过程。
- 当满足关闭条件时,通过四次挥手关闭 TCP 连接。
- 应用场景:适用于对实时性要求高、请求频繁的场景,如在线聊天、网页游戏等,避免了频繁建立和断开 TCP 连接带来的开销,提高了数据传输效率。