跳到主要内容

HTTP/HTTPS 协议

问题​

HTTP 和 HTTPS 的区别?iOS 中如何处理 HTTPS?

答案​

HTTP 请求方法​

方法幂等用途
GET✅获取资源
POST❌创建资源
PUT✅替换资源
PATCH❌部分更新
DELETE✅删除资源

常见状态码​

范围含义示例
2xx成功200 OK、201 Created、204 No Content
3xx重定向301 永久重定向、304 Not Modified
4xx客户端错误400 Bad Request、401 Unauthorized、404 Not Found
5xx服务端错误500 Internal Error、502 Bad Gateway、503 Unavailable

HTTPS = HTTP + TLS​

App Transport Security(ATS)​

iOS 9+ 默认要求所有网络请求使用 HTTPS:

<!-- Info.plist:允许特定域名 HTTP -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
不要关闭 ATS
<!-- ❌ 不推荐:禁用所有 ATS → App Store 审核可能被拒 -->
<key>NSAllowsArbitraryLoads</key>
<true/>

常见面试问题​

Q1: HTTP/1.1、HTTP/2、HTTP/3 的区别?​

答案:

  • HTTP/1.1:文本协议,Keep-Alive 复用连接,但有队头阻塞
  • HTTP/2:二进制分帧、多路复用(一个 TCP 连接并发多个请求)、头部压缩、服务器推送
  • HTTP/3:基于 QUIC(UDP),解决 TCP 层队头阻塞

URLSession 在 iOS 15+ 自动支持 HTTP/3。

Q2: HTTPS 中间人攻击如何防御?​

答案:使用 SSL Pinning(证书固定),在客户端校验服务器证书的公钥或指纹,防止中间人伪造证书。可以在 URLSessionDelegate 的 urlSession(_:didReceive challenge:) 中实现。

相关链接​