《图解HTTP》自问自答

231 阅读6分钟

1. TCP/IP协议族分层?

  • 应用层:向用户提供应用服务时的通信活动,如FT、DNS、HTTP。
  • 传输层:为应用层提供处于网络连接中的两台计算机之间的数据传输,如TCP、UDP。
  • 网络层:在网络中选择一条传输路线,并把数据包传送给对方,如IP。
  • 数据链路层:处理连接网络的硬件部分,如设备驱动、光纤、网卡。

2. 有哪些协议方案?

  • HTTP、HTTPS、FTP、telnet、file、mailto。

3. HTTP方法有哪些?

  • GET:获得资源
  • POST:传输实体主体
  • PUT:传输文件(因不含验证机制,存在安全问题)
  • HEAD:获得报文首部
  • DELETE:删除文件(因不含验证机制,存在安全问题)
  • http/1.1特有方法如下
  • OPTIONS:询问支持的方法
  • TRACE:追踪路径(但易引发跨站追踪攻击)
  • CONNECT: 主要使用HTTPS建立隧道

4. HTTP/1.1升级的特性有哪些?

  • 持久连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态
  • 管线化:同时并行发送多个请求,而不需一个接一个等待响应。

5. HTTP报文格式是什么?

  • 报文首部
  • 空行
  • 报文主体(可选)

6. HTTP传输编码方式有哪些?

  • gzip
  • compress
  • deflate
  • identity

7. HTTP多部分对象集合有哪些?

  • multipart/form-data: 上传表单文件
  • multipart/byteranges: 状态码为206,响应报文包含了多个范围内容时使用

8. 范围请求的返回值有哪些?

  • 206: Partial Content
  • 200: 完整实体

9. 内容协商有哪几种,协商依据是什么?

  • 服务器驱动协商
  • 客户端驱动协商
  • 透明协商
    • 依据:语言、字符集、编码方式

10. HTTP状态码有哪些?

  • 200: 成功
  • 204: 成功,但响应报文中不含实体的主体部分
  • 206: 范围请求成功
  • 301: 分配了新的URI,浏览器书签要更换
  • 302: 临时重定向
  • 303: 同302,但应使用GET方法
  • 304: 条件请求未满足,响应不包含主体
  • 307: 同302,但不允许POST变为GET
  • 400: 请求报文语法错误
  • 401: 首次时表明需有通过HTTP认证的信息/再次时表明用户认证失败
  • 403: 被服务器拒绝
  • 404: 找不到资源/服务器拒绝且不想说明理由
  • 500: 服务器执行错误/Web应用存在Bug
  • 503: 服务器超载/停机维护

11. 为什么必须在HOST首部内完整指定主机或域名的URI?

  • 当一个主机上有多个虚拟Web站点时,请求到达至服务器,已是IP形式,需用HOST中的URI做区分。

12. 什么是代理、网关、隧道?

  • 代理:利用缓存技术减少网络带宽流量或控制特定网络的访问权限;会附加Via首部字段以标记出经过的主机信息。
  • 网关:类似代理,网关能使通信线路上的服务器提供非HTTP协议服务。
  • 隧道:通过加密手段通信。

13. 通用首部字段有哪些?

  • Date: 创建HTTP报文的日期和时间
  • Warning: 告知用户问题警示
  • Cache-Control: 控制缓存
  • Trailer: 应用于HTTP/1.1分块传输编码中,事先说明报文主体后记录的首部
  • Transfer-Encoding: 规定了传输报文主体采用的编码方式
  • Upgrade: 检测是否可使用更高版本进行通信,与Connection配合使用
  • Pragma: 为了兼容HTTP/1.0; Cache-Control: no-cache; Pragma: no-cache
  • Connection: 不再转发首部/持久连接控制:close/Keep-Alive

14. Cache-Control的值有哪些?

  • no-cache: 不允许缓存
  • no-store: 不进行缓存
  • max-age: 缓存的最大时间/在HTTP/1.1中,max-age优先于Expires
  • only-if-cached: 用于请求,客户端仅在缓存服务器本地缓存目标资源的情况下,才要求其返回。
  • public:用于响应,可向任意方提供响应的缓存
  • private:用于响应,会针对特定用户提供缓存
  • must-revalidate:用于响应,代理需向源服务器验证缓存有效性
  • proxy-revalidate:用于响应,所有缓存代理服务器需再次验证缓存有效性

15. 请求首部字段有哪些?

  • Accept: 客户端支持的媒体类型(;q默认为1.0, 取值0-1,3位小数点)
  • Accept-Charset: 客户端支持的字符集
  • Accept-Encoding: 客户端支持的内容编码
  • Accept-Language: 客户端支持的自然语言集
  • Authorization: Web认证信息
  • User-Agent: 创建请求的浏览器和用户代理名称等信息,可追加
  • Proxy-Authorization: 代理服务器的认证所需信息
  • From: 用户电子邮箱
  • Host: 请求资源所在服务器名称,名称没有时则置为空值
  • If-Match: 与ETag值一致,服务器才接受请求
  • If-None-Match: 与If-Match相反
  • If-Modified-Since: 更新资源时间满足条件,则响应
  • If-Unmodified-Since: 在指定时间后未更新,则响应
  • Range: 范围请求
  • If-Range: 值与ETag或更新日期时间匹配一致,则作为范围请求处理,否则返回全部资源
  • Max-Forwords: 判断传输路径通信状况

16. 响应首部字段有哪些?

  • Accept-Ranges: 是否接受子节范围请求
  • ETag: 与资源匹配的标记
  • Location: 可将响应接收方引导至某个与请求URI位置不同的资源
  • Proxy-Authenticate: 把代理服务器所要求的认证信息发送给客户端
  • WWW-Authenticate: 服务器对客户端的认证信息
  • Server: HTTP服务器安装信息
  • Retry-After: 告知客户端在多久之后再次发送请求

17. 实体首部字段有哪些?

  • Content-Encoding: 实体的内容编码方式
  • Content-Language: 实体的自然语言
  • Content-Length: 实体主体的大小
  • Content-Location: 报文主体返回资源对应的URI
  • Content-MD5: 客户端会对接收的报文主体执行相同的MD5算法,然后与首部字段Content-MD5字段值比较,以检查报文主体在传输过程中是否保持完整及确认传输到达。
  • Expires: 资源失效日期
  • Last-Modified: 资源最终修改的时间

18. Set-Cookie的值有哪些?

  • expires: cookie有效期,默认浏览器关闭前,即Session
  • secure: 仅在HTTPS安全通信时才发送Cookie
  • httpOnly: 不允许Cookie被脚本访问,防止跨站脚本攻击

19. HTTP缺点有哪些?

  • 明文传输
  • 不验证通信方身份

20. HTTPS通信时的加密方式是什么?

  • SSL+TLS建立连接时是公开密钥加密,也称非对称加密
  • 建立通信交换阶段时是共享密钥加密,也称对称加密

21. HTTP/1.1有哪些认证方式?

  • SSL+TLS客户端认证
  • FormBase认证,即服务器验证客户端输入的登录信息

22. WebSocket全双工通信的优点?

  • 推送: 可以实现服务器向客户端推送
  • 减少通信量: 建立起WebSocket连接后会一直保持连接状态/且WebSocket首部信息很小