【TCP/IP】15. 超文本传输协议

15. 超文本传输协议

  • 15. 超文本传输协议
    • 15.1 统一资源定位符(URL)
    • 15.2 超文本传输协议(HTTP)
    • 15.3 HTTP 信息的一般格式
    • 15.4 HTTP 请求报文
    • 15.5 HTTP 响应报文
    • 本章要点

15. 超文本传输协议

15.1 统一资源定位符(URL)

URL(Uniform Resource Locator)是标识 Web 资源位置的统一格式,俗称 “网址”,用于指定访问资源的方式和位置。

  1. URL 的完整格式
    格式:协议://主机域名(或IP地址):端口号/目录路径/文件名
    各组成部分说明:

    • 协议:指定访问资源的协议类型,常用协议及功能如下:

      协议名 功能描述
      http 超文本文件服务(默认)
      ftp 文件传输服务
      gopher Gopher 信息服务
      news Usenet 新闻组服务
      telnet 远程主机连接服务
      wais WAIS(广域信息服务)连接服务
    • 主机域名 / IP 地址:资源所在服务器的网络标识(如www.njust.edu.cn202.119.80.252)。

    • 端口号:服务器提供服务的端口(HTTP 默认 80,可省略;非默认需显式指定,如8080)。

    • 目录路径:资源在服务器中的存储路径,采用 UNIX 风格(如/courses/computer/)。

    • 文件名:具体资源的名称(如index.htm,默认可省略,服务器返回默认页面)。

  2. 示例

    • http://www.njust.edu.cn/(省略端口、路径和文件名,访问默认页面);
    • http://www.njust.edu.cn/indexchs2.htm(完整路径 + 文件名);
    • ftp://ftp.njust.edu.cn(FTP 协议访问);
    • http://202.119.80.20:8080(指定 IP 和非默认端口)。

15.2 超文本传输协议(HTTP)

HTTP 是应用层协议,用于实现本地浏览器与 Web 服务器之间的超文本传输,核心是 “请求 - 响应” 模式。

  1. 基本特性
    • 工作层:应用层,基于 TCP 协议(默认端口 80)。
    • 通信模式:客户 / 服务器模式(客户端发送请求,服务器返回响应)。
    • 早期版本特性:非持续连接(一次 TCP 连接处理一个请求,完成后断开);HTTP 1.1 支持持续连接(通过Connection: keep-alive保持连接,减少连接开销)。
  2. 常用 HTTP 服务器
    • Apache(跨平台共享软件)、Nginx(高性能)、Lighttpd(轻量级)、Tomcat(支持 Java)、IIS(微软产品,仅 Windows 平台)。
  3. 通信方式
    • 点对点方式:客户端与源服务器直接建立连接,无中间节点。
    • 中间服务器方式:通过中继服务器(如代理服务器)转发请求和响应,中继服务器充当通信桥梁。
    • 缓存方式:缓存服务器暂存近期请求及响应,对重复请求直接返回缓存结果,减少网络流量和服务器负载。
  4. 安全性
    • 主要通过安全套接字层(SSL) 实现加密和身份鉴别,URL 以HTTPS://标识。
    • SSL 工作流程:
      1. 客户端发送安全会话请求(含 SSL 版本、支持的加密算法等);
      2. 服务器返回响应(选定的加密算法、会话标识)及数字证书(含服务器公钥),可选请求客户端证书;
      3. 客户端验证服务器证书有效性,若服务器请求,客户端发送自身证书(或 “无证书” 警告);
      4. 客户端生成会话密钥(用服务器公钥加密),发送 “客户机密钥交换” 消息;若客户端发送证书,需附加 “证书验证” 消息(用私钥签名);
      5. 服务器返回 “已完成” 消息,SSL 握手结束,后续数据均加密传输。
  5. 核心特点
    • 简单性:客户端仅需传递请求方法和路径,常用方法为 GET、HEAD、POST,服务器实现简单、效率高。
    • 支持元信息:通过 “首部”(键值对)传递附加信息(如数据类型、缓存策略等)。
    • 无状态性:协议不记忆历史交互,服务器无法识别客户端状态。解决方式:
      • Cookie:服务器通过Set-Cookie首部让客户端保存状态信息(如登录凭证),后续请求自动携带;
      • Session:服务器存储会话信息,通过SessionId(传递给客户端)关联客户端与会话。

15.3 HTTP 信息的一般格式

HTTP 报文遵循 RFC 822 规范,由四部分组成:请求行 / 状态行、信息首部、空行、信息体。

  1. 结构组成

    请求行/状态行  
    信息首部(多行键值对)  
    空行(CRLF)  
    信息体(可选,二进制或文本数据)  
    
  2. 各部分详细说明

    • 请求行 / 状态行:
      • 请求行(客户端发送):格式为方法 URL HTTP版本(如GET /index.htm HTTP/1.1),用于指定请求类型、资源位置和协议版本。
      • 状态行(服务器返回):格式为HTTP版本 状态码 状态短语(如HTTP/1.1 200 OK),用于告知请求处理结果。
    • 信息首部:传递附加信息,分为 4 类:
      1. 一般首部:请求和响应均可使用,描述报文通用属性:
        • Cache-Control:控制缓存行为(如max-age=3600);
        • Connection:是否保持连接(keep-alive/close);
        • Date:报文生成时间;
        • Transfer-Encoding:报文编码方式(如chunked分块传输)。
      2. 请求首部:仅客户端请求使用,描述客户端需求:
        • Accept:可接受的媒体类型(如text/html, application/json);
        • Accept-Encoding:可处理的编码(如gzip, deflate);
        • Host:目标服务器主机名和端口(HTTP 1.1 必需);
        • Cookie:客户端发送的 Cookie 信息;
        • If-Modified-Since:条件请求(仅资源在指定时间后修改才返回)。
      3. 响应首部:仅服务器响应使用,描述服务器信息:
        • Server:服务器软件信息(如Nginx/1.21.0);
        • Location:重定向目标 URL;
        • Set-Cookie:服务器要求客户端保存的 Cookie;
        • Accept-Ranges:是否支持部分请求(如bytes)。
      4. 实体首部:描述信息体(资源)的属性,请求(POST/PUT)和响应均可使用:
        • Content-Type:信息体的媒体类型(如text/html; charset=utf-8);
        • Content-Length:信息体长度(字节数);
        • Last-Modified:资源最后修改时间;
        • Expires:资源过期时间(缓存失效依据)。
    • 空行:用于分隔首部和信息体(必需,确保接收方正确解析)。
    • 信息体:传递实际数据:
      • 请求报文中:POST/PUT 等方法发送的数据(如表单数据、文件内容);
      • 响应报文中:服务器返回的资源(如 HTML 页面、图片二进制数据)。

15.4 HTTP 请求报文

客户端向服务器发送的报文,用于请求资源或提交数据,核心是 “请求方法”。

  1. 报文格式

    方法 URL HTTP版本  
    信息首部(多行)  
    空行  
    信息体(可选)  
    
  2. 常用请求方法

    方法 功能描述 特点
    GET 请求获取 URL 指定的资源 最常用,信息体可选(通常无),参数附在 URL 后(有长度限制);支持 “条件 GET”(如If-Modified-Since,未更新则返回 304)。
    HEAD 请求获取资源的元信息(仅返回首部,无信息体) 用于检查资源是否存在、大小、最后修改时间等,不传输实际数据,节省带宽。
    POST 向服务器提交数据(如表单、JSON),服务器将数据作为新记录处理 数据放在信息体中(无长度限制),常用于提交表单、上传文件等。
    PUT 请求将信息体中的数据存储到 URL 指定位置(若资源存在则修改,不存在则创建) 与 POST 的区别:目标位置明确(URL 即为存储路径)。
    DELETE 请求删除 URL 指定的资源 受服务器安全设置限制,可能被拒绝。
    TRACE 用于测试,服务器返回收到的请求报文,验证请求传输是否正确 仅用于调试,不传输敏感数据。
    CONNECT 保留用于 SSL 隧道(如 HTTPS 连接建立时,客户端通过代理服务器建立 SSL 连接) 仅在代理场景使用。
    OPTIONS 请求服务器支持的 HTTP 方法和首部 用于跨域资源共享(CORS)预检请求。

15.5 HTTP 响应报文

服务器对客户端请求的回复,包含请求处理结果和资源数据。

  1. 报文格式

    HTTP版本 状态码 状态短语  
    信息首部(多行)  
    空行  
    信息体(可选)  
    
  2. 状态码与状态短语
    状态码为 3 位数字,分为 5 类,状态短语是其文字解释:

    • 1xx(信息类):请求已接收,继续处理(如100 Continue:客户端可继续发送请求体)。
    • 2xx(成功类):请求正常处理(如200 OK:请求成功,返回数据;204 No Content:成功但无数据)。
    • 3xx(重定向类):需客户端进一步操作(如301 Moved Permanently:资源永久迁移;302 Found:临时重定向;304 Not Modified:资源未修改,使用缓存)。
    • 4xx(客户端错误):请求有误,服务器无法处理(如400 Bad Request:请求格式错误;401 Unauthorized:需认证;403 Forbidden:拒绝访问;404 Not Found:资源不存在)。
    • 5xx(服务器错误):服务器处理请求时出错(如500 Internal Server Error:服务器内部错误;503 Service Unavailable:服务器暂时不可用)。
  3. HTTP 1.1 的新特性

    • 持续连接:通过Connection: keep-alive保持 TCP 连接,可处理多个请求(减少连接建立开销)。
    • 流水线技术:客户端可在收到前一个请求的响应前发送多个请求(提高效率)。
    • 主机标题(Host 首部):支持一个 IP 地址对应多个域名(虚拟主机),无需为每个域名配置单独 IP。
    • 部分请求:支持Range首部(如Range: bytes=0-499),实现断点续传。
    • 缓存优化:增强Cache-Control等首部,更灵活地控制缓存策略。

本章要点

  • HTTP 是应用层协议,用于 Web 浏览器与服务器之间的超文本传输,基于 TCP 80 端口(HTTPS 用 443 端口 + SSL 加密)。
  • URL 是资源的统一标识,格式为协议://主机:端口/路径/文件名,包含访问资源的所有必要信息。
  • HTTP 报文由请求行 / 状态行、信息首部、空行、信息体组成,首部用于传递元信息,支持缓存、连接管理等功能。
  • 常用请求方法:GET(获取资源)、HEAD(获取元信息)、POST(提交数据),HTTP 1.1 扩展了 PUT、DELETE 等方法。
  • 响应状态码分为 5 类,用于标识请求处理结果,核心成功码为 200,客户端错误码为 404,服务器错误码为 500。
  • HTTP 1.1 通过持续连接、流水线等特性优化性能,无状态性通过 Cookie 和 Session 解决,安全性依赖 SSL 实现。

你可能感兴趣的:(【TCP/IP】15. 超文本传输协议)