跳到主要内容

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(证书固定),在客户端校验服务器证书的公钥或指纹,防止中间人伪造证书。可以在 URLSessionDelegateurlSession(_:didReceive challenge:) 中实现。

相关链接