一、HTTP与HTTPS的核心区别是什么?
- 端口不同:HTTP默认使用80端口,HTTPS使用443端口
- 安全性差异:HTTPS通过SSL/TLS协议加密传输数据,HTTP为明文传输
- 证书要求:HTTPS需CA证书验证服务器身份,HTTP无证书机制
- 连接方式:HTTPS建立连接需TLS握手,HTTP直接通过TCP三次握手
二、GET和POST请求的本质区别是什么?
- 数据位置:GET参数暴露在URL中,POST数据在请求体
- 安全性:POST更适合传输敏感数据(如密码),GET易被缓存/历史记录泄露
- 幂等性:GET是幂等操作,POST可能改变服务器状态
- 数据限制:GET有URL长度限制(一般2KB),POST理论上无限制
三、HTTP方法的幂等性和安全性如何定义?
- 幂等方法:多次执行效果相同(如GET、PUT、DELETE),非幂等方法如POST
- 安全方法:不修改服务器资源的操作(如GET、HEAD、OPTIONS)
- PUT vs POST:PUT用于替换指定资源(幂等),POST用于创建新资源(非幂等)
四、HTTP/2的核心优化特性有哪些?
- 多路复用:单连接并行传输多个请求,解决队头阻塞
- 头部压缩:HPACK算法减少重复头部数据传输
- 服务器推送:主动推送关联资源(如CSS/JS)减少请求次数
- 二进制分帧:将报文分解为二进制帧传输,提升解析效率
五、HTTP状态码的分类及典型场景?
分类 | 范围 | 示例 | 场景 |
---|---|---|---|
1xx | 信息类 | 100 | 请求头已接收,等待发送Body |
2xx | 成功类 | 201 | 资源创建成功(如POST返回) |
3xx | 重定向 | 304 | 资源未修改,使用本地缓存 |
4xx | 客户端错误 | 401 | 未授权访问资源 |
5xx | 服务端错误 | 503 | 服务器过载或维护 |
六、HTTP持久连接如何提升性能?
- 减少握手次数 :通过
Connection: keep-alive
复用TCP连接 - 管线化技术:无需等待响应即可发送后续请求(HTTP/1.1特性)
- 超时机制 :通过
Keep-Alive: timeout=60
设置空闲连接保持时间
七、HTTP报文结构包含哪些核心部分?
-
请求报文:
- 请求行(方法+URI+协议版本)
- 头部字段(如Content-Type、Authorization)
- 空行分隔符
- 请求体(POST/PUT方法携带数据)
-
响应报文:
- 状态行(协议版本+状态码+描述)
- 头部字段(如Server、Cache-Control)
- 空行分隔符
- 响应体(HTML/JSON等实际数据)
八、跨域请求为何会触发OPTIONS预检?
-
安全策略:浏览器对非简单请求(如带自定义Header的POST)要求预检
-
预检流程:
- 浏览器先发送OPTIONS请求验证服务器是否允许跨域
- 服务器响应
Access-Control-Allow-*
头部声明允许的源/方法/Header
-
缓存优化 :通过
Access-Control-Max-Age
减少重复预检请求
九、HTTP缓存机制如何实现?
-
强缓存:
Cache-Control: max-age=3600
(优先级高于Expires)Expires: Wed, 10 Mar 2025 08:00:00 GMT
(绝对时间)
-
协商缓存:
Last-Modified
+If-Modified-Since
(时间戳验证)ETag
+If-None-Match
(哈希值验证,精度更高)
十、Cookie和Session如何解决HTTP无状态问题?
-
Cookie机制:
- 服务端通过
Set-Cookie
头部下发标识,客户端后续请求自动携带 - 属性包括Domain(作用域)、HttpOnly(防XSS)、Secure(仅HTTPS)
- 服务端通过
-
Session机制:
- 服务端存储会话数据,通过Cookie中的SessionID关联用户
- 分布式场景可通过Redis等中间件共享Session数据