HTTP协议

10 小时前
/ ,
2

HTTP协议

HTTP请求特性

幂等

如果同样的请求被执行一次与连续执行多次,对服务器的预期影响是相同的,那么称这个 HTTP 方法是幂等的。幂等性只考虑服务器的状态,每次请求返回的响应可以不同。
幂等的 HTTP 方法
GET:它是用来获取资源的,不会改变服务器的状态,所以多次执行不会产生不同的结果。
HEAD:类似于 GET,但只返回响应头,不包括资源的主体内容,也不会改变服务器状态。
PUT:用来更新资源,每次发送相同的数据,都会使资源的状态保持一致。即使你多次执行,资源的最终状态依然是相同的。
DELETE:用来删除资源。虽然多次执行 DELETE 请求可能返回不同的状态码(如第一次返回 200,之后返回 404),但资源的最终状态是一致的:它已被删除。

非幂等的 HTTP 方法
POST:用来提交数据或执行操作。多次发送 POST 请求通常会产生不同的结果(例如,提交多个表单数据时会在数据库中插入多条记录),因此它不是幂等的。
PATCH:用于对资源进行部分更新,每次执行可能会带来不同的效果,因此也不是幂等的。

安全(Safe)

如果一个 HTTP 方法被认为是“安全的”,意味着这个方法:

  • 不会修改服务器的状态或数据。
    它仅仅是获取资源或提供信息,而不会对服务器上的数据产生任何影响。
  • 是只读操作。
    这些方法的执行并不会改变服务器的资源内容或状态,只是请求数据并返回

安全:
GET、HEAD、OPTIONS
非安全:
POST、PUT、DELETE、PATCH、CONNECT、TRACE

HTTP请求方法

  1. GET: 请求指定的资源。
  2. HEAD: 请求资源的标头信息,并且这些标头与 HTTP GET 方法请求时返回的一致。该请求方法的一个使用场景是在下载一个大文件前先通过 HEAD 请求读取其 Content-Length 标头的值获取文件的大小,而无需实际下载文件,以此可以节约带宽资源。
  3. OPTIONS: 请求通常用于查询服务器上某个 URL 或者整个服务器允许哪些 HTTP 方法;在跨域请求时,浏览器通常会先发起一个 OPTIONS 请求,称为 预检请求,来检查服务器是否允许当前跨域请求。
  4. POST: 发送数据给服务器。请求主体的类型由 Content-Type 标头指定。PUT 和 POST 方法的区别是,PUT 方法是幂等的,PUT 调用一次与连续调用多次效果是相同的,没有副作用。

  5. PUT: 创建一个新的资源或替换有效当前有效资源,方法是幂等的。在响应中,如果目标资源没有,并且 PUT 方法成功创建了资源,那么源服务器必须返回 201(Created)来通知用户代理资源已创建。如果目标资源已经存在,并且成功进行了更新,那么,源服务器必须返回 200(OK)或 204(No Content)来表示请求成功完成。
  6. TRACE: 服务器会将收到的请求内容原封不动地返回给客户端,客户端可以借此验证请求在传输过程中是否被修改或损坏,可以查看请求经过代理服务器时发生了什么变化,帮助识别哪些头部信息被添加、修改或删除。

HTTP响应状态码

  • 200(OK): GET-请求成功,将资源添加到响应主体中;POST-操作成功,响应描述请求的结果;HEAD-与GET相同,但是没有消息主体;TRACE-响应主体包含服务器接收到的请求信息。
  • 201(Created):代表请求成功处理,并且创建了新资源。
  • 202(Accepted):表示请求已被接受处理,但处理尚未完成或可能尚未开始。该请求的实际处理结果并不受保证——当服务器尝试处理时,相关任务或操作仍可能失败或被拒绝。
  • 301(Moved Permanmently): 说明请求的资源已经被移动到了由 Location 头部指定的 url 上,是固定的不会再改变。搜索引擎会根据该响应修正。
  • 302(Found):表示请求的资源已临时移动到 Location 标头中的 URL。
  • 304(Not Modified):说明说明无需再次传输请求的内容,也就是说可以使用缓存的内容。通常在协商缓存阶段缓存还未失效情况下服务器会返回此状态码。(标头 If-None-Match、If-None-Match)
  • 307(Temporary Redirect):同302,状态码 307 与 302 之间的唯一区别在于,当发送重定向请求的时候,307 状态码可以确保请求方法和消息主体不会发生变化。如果使用 302 响应状态码,一些旧客户端会错误地将请求方法转换为 GET。
  • 400(Bad Request):服务器因某些被认为是客户端错误的原因(例如,请求语法错误、无效请求消息格式或者欺骗性请求路由),而无法或不会处理该请求。
  • 401(Unauthorized):缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
  • 403(Forbidden): 指的是服务器端有能力处理该请求,但是拒绝授权访问。
  • 404(Not Found):指的是服务器无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link)。
  • 405(Method Not Allowed):表面服务器禁止了当前HTTP请求的方法
  • 406(Not Acceptable):客户端在请求头里通过 Accept、Accept-Charset、Accept-Encoding、Accept-Language 等字段告诉服务器期望拿到的资源表现形式;服务器发现自己手里的所有版本(内容类型、字符集、编码、语言等)没有一项能满足这些条件,于是返回 406。

面试高频问点

301和302状态码的区别?

语义: 301 Moved Permanently 表示资源永久迁移;302 Found 表示临时迁移(以后可能还会变回原地址)。
缓存与 SEO :301 通常会被浏览器/中间缓存更积极地缓存,搜索引擎也会把权重逐步转到新 URL;302 一般不长期缓存,搜索引擎更多认为是短期跳转,权重通常不转或转得更保守。
请求方法是否会被改写(坑点): 历史上很多客户端遇到 302 会把 POST 变成 GET 再跳转;301 也可能发生类似行为(取决于客户端实现)。如果你需要“明确保持原方法/请求体”,用 307 Temporary Redirect(临时)或 308 Permanent Redirect(永久)更准确。
实践建议: 域名换新、HTTP→HTTPS、路径永久调整用 301/308;临时活动页、灰度、短期维护跳转用 302/307。

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...