HTTP(HyperText Transfer Protocol,超文本传输协议)是基于可靠传输的应用层协议,在互联网上应用很是普遍。绝大部分网络请求都是基于HTTP,乃至当前应用普遍的音视频传输,也有很大一部分是基于HTTP。缓存
当前使用状况:听说,HTTP/1.0仍旧在一些古老的网络设备(尤为是代理服务器)上使用;HTTP/1.1的使用在互联网应用中占据了大部分,在服务器上的部署尤其普遍;HTTP/2的使用主要是在网页请求上,有统计数据称截至2018年大约40%~50%的网站使用了HTTP/2。安全
HTTP/1.1规定了8种请求方法(其中GET/HEAD两种为服务器必须支持的),以下所示。“请求request”是指由客户端向服务器发起的一种通讯方式。此外,服务器能够扩展自定义方法:服务器
方法名称 | 注释 |
---|---|
GET | 向服务器上指定的资源发出“显示”请求,只用于读取数据。服务器会返回HEADER和BODY【必须实现】 |
HEAD | 向服务器上指定资源发出“显示”请求,仅用于读取。服务器只返回元数据,不包括资源的本文部分【必须实现】 |
POST | 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会建立新的资源或修改现有资源,或两者皆有 |
PUT | 向指定资源位置上传其最新内容 |
DELETE | 请求服务器删除Request-URI所标识的资源 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
OPTIONS | 使服务器传回该资源所支持的全部HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,能够测试服务器功能是否正常运做 |
CONNECT | HTTP/1.1协议中预留给可以将链接改成管道方式的代理服务器。一般用于SSL加密服务器的连接(经由非加密的HTTP代理服务器) |
全部的状态码都是三位数字,有对应的状态消息。除了RFC 2616中规定的状态消息,开发人员仍能够自定义某个状态码对应的消息内容,不过服务端和客户端须要约定好。网络
具体状态码信息——红色和橙色为错误状态码,加粗为经常使用状态码oop
状态码 | 状态消息(缘由) | 备注 |
---|---|---|
100 | Continue | 继续 |
101 | Switching Protocols | 协议切换,服务端建议客户端更换协议 |
102 | Processing | 处理中,防止客户端超时 |
200 | OK | 成功返回 |
201 | Created | 当前请求已经被实现且有一个新资源已经根据请求须要被创立 |
202 | Accepted | 服务器已接受请求,但还没有处理。最终该请求可能会也可能不会被执行,而且可能在处理发生时被禁止 |
203 | Non-Authoritative Information | 未认证信息,服务器是一个转换代理服务器,以200 OK状态码为起源,但回应了原始响应的修改版本 |
204 | No Content | 服务器成功处理请求,没有返回任何内容 |
205 | Reset Content | 服务器成功处理了请求,但没有返回任何内容。与204响应不一样,此响应要求请求者重置文档视图 |
206 | Partial Content | 服务器已经成功处理了部分GET请求。用于断点续传之类的 |
207 | Multi-Status | 表明以后的消息体将是一个XML消息,而且可能依照以前子请求数量的不一样,包含一系列独立的响应代码 |
208 | Already Reported | DAV绑定的成员已经在(多状态)响应以前的部分被列举,且未被再次包含 |
226 | IM Used | 服务器已经知足了对资源的请求,对实体请求的一个或多个实体操做的结果表示 |
300 | Multiple Choices | 被请求的资源在服务器上有一系列可供选择的资源,除非请求为HEAD请求,不然响应实体中应包括资源特性及地址的列表。服务器亦能够指定首选的资源。响应可缓存 |
301 | Moved Permanently | 资源被永久移动到新位置。除非是HEAD请求,不然响应实体中应包含新URI的超连接及简短说明。若是不是GET/HEAD请求,浏览器应禁止自动重定向。响应可缓存 |
302 | Found | 临时重定向(本次)。除非是HEAD请求,不然响应实体内应包含新的URI及简短说明。若是不是GET/HEAD请求,浏览器应禁止自动重定向。响应通常不可缓存 |
303 | See Other | 对应请求的响应能够重定向到另外一个URI,相似302,主要为了容许由脚本激活的POST请求输出重定向到新资源。303响应禁止被缓存 |
304 | Not Modified | 表示资源在由请求头中的If-Modified-Since或If-None-Match参数指定的这一版本以后,不曾被修改 |
305 | Use Proxy | 被请求的资源必须经过指定的代理才能被访问 |
306 | Switch Proxy | 目前新规范不使用该状态码 |
307 | Temporary Redirect | 在这种状况下,本次请求应该用另外一个URI重复,但后续的请求应仍使用原始的URI。与302相反,当从新发出原始请求时,不容许更改请求方法 |
308 | Permanent Redirect | 本次请求和后续请求都应用另外一个URI重复或替换 |
400 | Bad Request | 客户端错误致使错误的请求 |
401 | Unauthorized | 用户的请求未经过认证(所请求资源需认证) |
402 | Payment Required | 通常不用。预留用来让请求人员付费的 |
403 | Forbidden | 服务器已理解请求但拒绝执行,能够在响应实体中描述拒绝缘由。不建议重复该请求 |
404 | Not Found | 请求失败,或所请求资源未在服务器上发现,但容许后续请求 |
405 | Method Not Allowed | 请求方法与所对应的资源不匹配。好比用GET请求某个需POST的表单资源 |
406 | Not Acceptable | 请求的资源的内容特性没法知足请求头中的条件,于是没法生成响应实体,该请求不可接受 |
407 | Proxy Authentication Required | 客户端需先在代理服务器上进行身份验证 |
408 | Request Timeout | 请求超时,超过服务器等待时间 |
409 | Conflict | 存在冲突没法处理该请求,好比多个同步更新的编辑请求 |
410 | Gone | 通常不用,表示该资源再也不可用 |
411 | Length Required | 客户端请求未标明Content-Length |
412 | Precondition Failed | 服务器在验证在请求的头字段中给出先决条件时,没能知足其中的一个或多个 |
413 | Request Entity Too Large | 因为请求提交的实体数据大小超服务器预期,因此拒绝响应。若允许客户端重试,响应中应携带Retry-After |
414 | Request-URI Too Long | 因为请求的URI长度超出服务器解释长度而拒绝响应 |
415 | Unsupported Media Type | 请求中提交的某资源格式,不符合服务器指定的格式 |
416 | Requested Range Not Satisfiable | 服务器未涵盖客户端请求所要求的资源范围 |
417 | Expectation Failed | 请求中期待的资源没法被服务器知足 |
420 | Enhance Your Caim | Twitter Search与Trends API在客户端被限速的状况下返回 |
421 | Misdirected Request | 服务器没法产生响应(例如由于链接重用) |
422 | Unprocessable Entity | 请求格式正确但有语义错误 |
423 | Locked | 当前资源被锁定 |
424 | Failed Dependency | 因为以前某个请求错误,致使当前请求失败 |
425 | Unordered Collection | 目前未使用的状态码 |
426 | Upgrade Required | 客户端应当切换到TLS/1.0,并在HTTP/1.1 Upgrade header中给出 |
428 | Precondition Required | 原服务器要求该请求知足必定条件,防止“未更新”,即客户端所操做资源与第三方改写发生冲突 |
429 | Too Many Requests | 客户端在某段时间内发送请求过多 |
431 | Request Header Fields Too Large | 请求头部中一个或多个字段过大 |
444 | No Response | Nginx上HTTP扩展,服务端主动关闭链接 |
450 | Blocked by Windows Parental Controls | Microsoft扩展,用于信息和测试 |
451 | Unavailable For Legal Reasons | 该访问因法律的要求而被拒绝 |
494 | Request Header Too Large | 431码提出前用于Nginx服务器 |
500 | Internal Server Error | 服务器发生不可预期的错误 |
501 | Not Implemented | 服务器不支持当前请求所须要的某个功能 |
502 | Bad Gateway | 做为网关或者代理工做的服务器尝试执行请求时,从上游服务器接收到无效的响应 |
503 | Server Unavailable | 服务器临时维护或过载致使没法处理请求,暂时的,响应中应包含Retry-After |
504 | Gateway Timeout | 做为网关或者代理工做的服务器尝试执行请求时,未能及时从上游服务器或辅助服务器收到响应 |
505 | HTTP Version Not Supported | 服务器不支持当前请求中的HTTP版本 |
506 | Variant Also Negotiates | 服务器存在内部配置错误 |
507 | Insufficient Storage | 服务器没法存储完成请求所必须的内容。这个情况被认为是临时的 |
508 | Loop Detected | 服务器在处理请求时陷入死循环 |
510 | Not Extended | 服务器未支持获取该请求资源时所需策略 |
511 | Network Authentication Required | 客户端须要进行身份验证才能得到网络访问权限,旨在限制用户群访问特定网络 |
单独把缓存机制做为一个模块列出来,是由于在HTTP请求和响应中,使用缓存技术实在太常见&&重要了!!HTTP中的缓存主要为了(在合理场景下)尽量减小发送请求和发送完整的响应,这对于减轻服务器的负载以及节省客户端带宽有很重要的做用。测试
HTTP中缓存机制须要下降语义透明性要求。但这要求在整个请求——缓存——响应的结构中,客户端始终可以发现任何语义透明性的潜在放松规则。(总之就是,无论下降语义透明性是由客户端/缓存/服务器中任意一方执行,最终客户端都知道。)设计HTTP缓存机制中各端的时候,必须严格遵照。优化