HTTP 整理

参考MDN/HTTP

HTTP是Hyper Text Transfer Protocol(超文本传输协议),是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型,本质是一个无状态的协议,但是使用cookies可以创建有状态的会话。

HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。

HTTP分为三部分:请求行、首部、实体(内容)
请求行包括了 请求方法 + URL + 协议版本
首部包括 请求首部和响应首部

1、HTTP1.0、HTTP1.1、HTTP2.0

  • HTTP1.0: 由于 HTTP/0.9 协议的应用十分有限,浏览器和服务器迅速扩展内容使其用途更广:
  • 协议版本信息现在会随着每个请求发送(HTTP/1.0被追加到了GET行)。
  • 状态码会在响应开始时发送,使浏览器能了解请求执行成功或失败,并相应调整行为(如更 新或使用本地缓存)。
  • 引入了HTTP头的概念,无论是对于请求还是响应,允许传输元数据,使协议变得非常灵活,更具扩展性。
  • 在新HTTP头的帮助下,具备了传输除纯文本HTML文件以外其他类型文档的能力(感谢Content-Type头)。
  • HTTP1.1: HTTP/1.1 消除了大量歧义内容并引入了多项改进:
  • 连接可以复用,节省了多次打开TCP连接加载网页文档资源的时间。
  • 增加管线化技术,允许在第一个应答被完全发送之前就发送第二个请求,以降低通信延迟。
  • 支持响应分块。
  • 引入额外的缓存控制机制。
  • 引入内容协商机制,包括语言,编码,类型等,并允许客户端和服务器之间约定以最合适的内容进行交换。
  • 感谢Host头,能够使不同域名配置在同一个IP地址的服务器上。
  • HTTP2.0: HTTP/2在HTTP/1.1有几处基本的不同:
  • HTTP/2是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。
  • 这是一个复用协议。并行的请求能在同一个链接中处理,移除了HTTP/1.x中顺序和阻塞的约束。
  • 压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
  • 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。

2、HTTP首部

1. 常用头部

  • cache-control: 控制缓存行为
    – 可设置的参数:public:表示任何缓存都可以缓存响应;private:表示响应仅供单个用户使用,不得由共享高速缓存存储;no-cache:强制缓存在发布缓存副本之前将请求提交到源服务器以进行验证。等

  • connection:连接的性质,如keep-alive
    – connection = keep-alive的意义:
    HTTP是基于TCP的,每一个HTTP请求都要进行三次握手。如果一个页面对同一个域名有多个请求,就会频繁的建立和断开连接,所以HTTP1.0中出现了keep-alive,用于建立长连接。

  • user-Agent:用户的信息

  • date:报文建立的时间

2. 常用请求首部

  • Accept : 能正确接收的媒体类型

  • Accept-XX(Accept-Charset/Accept-Encoding/Accept-Language):能正确接收的xx

  • Expect :期待服务端的指定行文

  • If-Match :两端资源标记比较

  • If-Modified-Since : 比较时间 未修改返回304 Not Modified

  • If-None-Match :比较标记 未修改返回304 Not Modified

3. 常用响应首部

  • Location: 定向到某个location
  • Server: 服务器的名称
  • Age: 响应存在的时间
  • Accept-Ranges: 可接受的范围类型

4.常见实体首部

  • Content-Type: 内容媒体类型
  • Expires: 内容过期时间
  • Last_modified: 内容最后修改时间
  • Allow: 资源正确的请求方式

3、HTTP请求方法(Request Methods)

方法名用途
GETGET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据.
POSTPOST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用.
PUTPUT方法用请求有效载荷替换目标资源的所有当前表示。
HEADHEAD方法请求一个与GET请求的响应相同的响应,但没有响应体.
DELETEDELETE方法删除指定的资源。
OPTIONSOPTIONS方法用于描述目标资源的通信选项。
TRACETRACE方法沿着到目标资源的路径执行一个消息环回测试。
CONNECTCONNECT方法建立一个到由目标资源标识的服务器的隧道。
PATCHPATCH方法用于对资源应用部分修改。

在这里插入图片描述

GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

4、状态码

1XX: 通知

100 Continue 客户端应重新发请求

101 Switching Protocols 改用协议 http换到https或者http1.1换到2.0之类

2XX:成功

200 OK 操作成功

201 Created按照客户端请求创建了一个新资源

202 Accepted 请求无法或不被实时处理

204 No Content 请求成功,但是报文不含实体的主体部分

No Content可能的情况:
1.服务器拒绝请求返回
2.Get资源存在但表示是空的

205 Reset Content 请求成功,但是报文不含实体主体部分,要求客户端重置内容

204和205的区别在于205要求了重置

206 Partial Content 进行范围请求

3XX:重定向

301 Moved Permanently永久性重定向,资源已经被分配到了新的URL

302 Found 临时重定向,资源临时分配了URL 实际上发部分客户端把它当成303处理

303 See Other 表示资源存在另一个URL。应用Get获取资源

307 Temporary Redirect 临时重定向,资源临时分配了URL,但是希望客户端能够保持方法不变请求新地址(解决302被当成303处理的问题)

304 Not Modified 允许访问资源,但实体主体为空(客户端已经有此数据,不需要再次发送)

4XX:客户端错误

400 Bad Request 请求报文语法错误

401 Unauthorized 发送的请求需要通过验证,客户端试图对一个受保护的资源操作但没有认证证书

403 Forbidden 请求资源存在但被拒绝,常用于一个资源只允许在特定时间段内访问(如果不想透露可以谎报404)

404 Not Found 找不到请求的资源

405 Method Not Allowed 不支持的请求方法,比如只支持Get,但是收到了Post请求

5XX:服务端错误

500 Internal Server Error 执行请求时发生错误(处理异常)

501 Not Implemented 不支持此请求方法(和405区别在于,405是访问的资源不支持,而501表示服务器不能操作此方法)

502 Bad Gateway 代理与上行服务器之间出现问题

503 Service Unavailable 服务器暂时处于超负荷或者维护中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值