计算机网络面试题—HTTP请求方式有哪些?

105 阅读4分钟

Author: Cyan_RA9
Source: 【卡码笔记】网站
Question: HTTP请求方式有哪些?

【简要回答】

  • HTTP/1.1 最初定义了 8种核心请求方法(RFC 2616, 1999):
    1. GET:获取资源,参数在URL中,对于服务器安全,且幂等。
    2. POST:提交数据(如表单数据),可能修改服务器状态。
    3. PUT:全量更新资源,幂等。
    4. DELETE:删除资源,幂等。
    5. HEAD:类似GET,仅返回响应头。
    6. OPTIONS:查询服务器支持的请求方法。
    7. TRACE:回显请求(因安全风险通常禁用)。
    8. CONNECT:建立代理隧道(如HTTPS)。
  • 注意事项
    1. PATCH 是后续通过 RFC 5789(2010)添加的扩展方法,不属于 HTTP/1.1 最初定义的方法

【详细回答】

HTTP/1.1 最初定义的 8种核心请求方法

  1. GET
    • 作用:请求指定资源,参数通过URL传递。
    • 特点安全(不修改服务器资源)、幂等(多次请求结果一致)、可缓存(响应可被浏览器或代理缓存)。
    • 场景:数据查询、页面加载。
  2. POST
    • 作用:提交数据(通过请求体携带数据)。
    • 特点不安全(可能修改服务器状态,eg: 新增订单)、不幂等(重复提交可能产生不同结果,eg: 多次创建订单)。
    • 场景:表单提交、触发业务逻辑。
  3. PUT
    • 作用:全量更新资源(客户端需提供完整数据)。
    • 特点幂等(多次更新结果一致,如重复更新同一资源)、不安全(可能覆盖其他用户的修改)。
    • 场景:用户信息全量更新。
  4. DELETE
    • 作用:删除指定资源。
    • 特点幂等(多次删除同一资源效果相同,如资源不存在时返回相同状态)、不安全(直接修改服务器状态)。
    • 场景:删除文章、用户等资源。
  5. HEAD
    • 作用:与GET类似,但服务器不返回响应体,仅返回响应头。
    • 特点轻量(节省带宽,用于检查资源是否存在或是否更新,如Last-Modified)、安全幂等
    • 场景:检查资源是否存在或更新,eg: 验证链接有效性、资源缓存状态。
  6. OPTIONS
    • 作用:查询服务器支持的请求方法,或检查跨域请求权限。
    • 特点预检请求:浏览器自动发送OPTIONS请求进行CORS验证。
    • 场景:跨域API调用前的预检请求。
  7. TRACE
    • 作用:回显客户端请求(用于调试)。
    • 特点易引发安全风险(如XST攻击),通常禁用。
  8. CONNECT
    • 作用:建立代理隧道(如HTTPS)。
    • 特点:由服务器/代理处理,不直接暴露给业务层

扩展方法(非HTTP/1.1原生)

  1. PATCH
    • 说明:来自RFC 5789(2010),注意,RFC 5789(2010)是独立扩展规范,仅新增PATCH方法,需显式支持,不涉及HTTP版本更新。
    • 作用:局部更新资源,需定义数据格式(如JSON Patch),客户端仅提交需修改的字段。
    • 特点非幂等(多次局部更新可能导致不同结果)、灵活(需定义数据格式)。
    • 场景:修改用户的部分信息(如昵称)。

【知识拓展】

HTTP请求方式的发展历程

  • As the following picture: http_methods.jpg

为什么 HttpServlet 源码中只定义了七种方法?

  1. HttpServlet 基于 HTTP/1.1(RFC 2616, 1999) 设计,而 原始规范RFC 2616 定义的8种方法中,TRACECONNECT默认不推荐开发者直接使用,原因如下:
    • TRACE因安全风险(如XST攻击)通常被禁用。
    • CONNECT由服务器底层(如Tomcat)处理,无需业务代码干预。
  2. 因此,HttpServlet仅暴露了 GET、POST、PUT、DELETE、HEAD、OPTIONS 这6个常用方法,加上TRACE7种

不同HTTP版本支持的请求方法

  1. HTTP/1.0(RFC 1945, 1996):GET、POST、HEAD。
  2. HTTP/1.1(RFC 2616, 1999):GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT。
  3. HTTP/1.1(RFC 7231, 2014):同 RFC 2616(1999),目前HTTP/1.1的核心规范。
  4. HTTP/2(RFC 7540, 2015):兼容HTTP/1.1方法,未新增。
  5. HTTP/3(RFC 9114, 2022):同样兼容,未新增方法。