HTTP基础

HTTP1.0与HTTP1.1的区别

  1. 长连接
  2. 节约带宽
  3. HOST头部
  4. 分块传输

长连接:HTTP1.0需要使用Conection: keep-alive 来告知服务器端建立一个长连接,而HTTP1.1默认支持长连接,HTTP协议是架构在TCP/IP协议之上的,TCP建立连接需要三次握手,如果每次请求都需要重新建立连接,效率不高,因此可以维护一个长连接,用来发送多个请求。虽然HTTP1.1支持管道传输,即在同一个TCP连接中发起多个请求,但是服务端却必须按照请求到达的顺序返回相应的结果,以保证客户端能够区分每次请求的内容,要是服务器回应第一个到达的请求非常缓慢,则会阻塞后面的请求,这就是“队头阻塞”,为了解决这个问题,浏览器允许同时打开多个TCP连接,一般同域可支持6~8个资源并行下载;

节约带宽:HTTP1.1加入了一个新的状态码100(continue),客户端事先发送只带
头域的信息到server端,若服务端返回100,则在传送带body的完整请求,若返回401,则就不用再传了。

HOST:head中增加了host属性,支持多个虚拟站点共享同一个ip

分块传输:HTTP1.1可使用 Transfer-Encoding: chunked 来说明server端的响应 由数量未定的数据块组成;每个非空的数据块之前,会有一个16进制的数值,表示这个块的长度。最后是一个大小为0的块,就表示本次回应的数据发送完了

HTTP1.1与HTTP2.0的区别

  1. 多路复用
  2. 二进制分帧
  3. 首部压缩
  4. 服务器推送

所有的HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流,并发请求数量相比HTTP1.1要高几个数量级
每个数据流以消息的形式发送,而消息由一或多个帧组成。这些帧可以乱序发送,然后再根据每个帧头部的流标识符(stream id)重新组装。
举个例子,每个请求是一个数据流,数据流以消息的方式发送,而消息又分为多个帧,帧头部记录着stream id用来标识所属的数据流,不同属的帧可以在连接中随机混杂在一起。接收方可以根据stream id将帧再归属到各自不同的请求当中去。
另外,多路复用可能会导致关键请求被阻塞。HTTP2.0里每个数据流都可以设置优先级和依赖,优先级高的数据流会被服务器优先处理和返回给客户端,数据流还可以依赖其他的子数据流。
可见,HTTP2.0实现了真正的并行传输,它能够在一个TCP上进行任意数量HTTP请求。而这个强大的功能则是基于“二进制分帧”的特性。

二进制分帧:HTTP2.0在应用层和传输层之间加了一个二进制分帧层,用来突破HTTP1.1的性能瓶颈,提高传输性能

头部压缩:在HTTP1.1中,头部是以文本的形式传输的,且很多都是重复发送的,HTTP2.0通过压缩头部大小,且缓存一份header fields表,既减小了传送的体积,也避免重复发送

服务器推送:服务器除了对最初请求的响应外,服务器还可以额外的向客户端推送资源,而无需客户端明确的请求

HTTP缓存机制

强制缓存:在缓存数据未失效的情况下,可以直接使用缓存数据,不必在与服务器发生交互。那如何判断缓存是否过期呢?

在HTTP1.0是通过Expires的值,Expires的值表示资源的过期时间,当下一次请求时间小于到期时间,则直接取缓存数据。但由于客户端与服务端的时间难免存在误差,所以HTTP1.1采用Cache-Control替代

Cache-Control 是最重要的规则。常见的取值有private、public、no-cache、max-age,no-store,默认为private。
private: 客户端可以缓存
public: 客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)
max-age=xxx: 缓存的内容将在 xxx 秒后失效
no-cache: 需要使用对比缓存来验证缓存数据(后面介绍)
no-store: 所有内容都不缓存

对比缓存:浏览器第一次请求数据时,服务器会将缓存标识和数据一同返回给客户端,客户端将二者缓存起来,当第二次发送请求时,客户端先将缓存标识发送给服务器,由服务器根据标识判断缓存数据是否可用,如可用,则返回304状态码,通知客户端缓存可用

两种缓存标识的介绍

  1. Last-Modified / If-Modified-Since
  2. Etag / If-None-Match (优先级比前者高)

Last-Modified:在服务器响应请求时,在Respone Headers 中返回,用来告诉浏览器资源的最后修改时间

If-Modified-Since: 再次请求时,通过此属性通知服务器上次请求时,服务器返回的资源最后修改时间,服务器接收到If-Modified-Since头后,则与被请求资源的最后修改时间作比较,若资源的最后修改时间大于If-Modified-Since,说明资源又被改动过,则响应整片资源内容,返回状态码200;
若资源的最后修改时间小于或等于If-Modified-Since,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的cache

Etag:服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)

If-None-Match:再次请求服务器时,通过此字段通知服务器客户段缓存数据的唯一标识。
服务器收到请求后发现有头If-None-Match 则与被请求资源的唯一标识进行比对,
不同,说明资源又被改动过,则响应整片资源内容,返回状态码200;
相同,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的cache

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Http1.1超文本传输协议中文版,目录如下: 1 引论 7 1.1 目的 7 1.2 要求 8 1.3 术语 8 1.4 总体操作 12 2 符号习惯和一般语法 13 2.1 扩充的BNF(扩充的 巴科斯-诺尔范式) 14 2.2基本规则 (basic rule) 15 3 协议参数 18 3.1 HTTP版本 18 3.2 统一资源标识符(URI) 19 3.2.1一般语法 19 3.2.2 http URL 19 3.2.3 URI 比较 19 3.3 日期/时间格式(Date/Time Formats) 20 3.3.1完整日期 (Full Date) 20 3.3.2 Delta Seconds 22 3.4 字符集 22 3.4.1丢失的字符集(Missing Charset) 22 3.5 内容编码(Content Codings) 23 3.6 传输编码 (Transfer Codings) 24 3.6.1块传输编码(Chunked Transfer Coding) 25 3.7 媒体类型(Media Type) 27 3.7.1规范化和文本缺省 27 3.7.2多部分类型(Multipart type) 28 3.8 产品标记 (product Tokens) 29 3.9 质量值(Quality Values) 29 3.10 语言标签 (Language Tags) 30 3.11 实体标签 30 3.12 范围单位(Range Units) 31 4 HTTP消息 31 4.1 消息类型(Message Types) 31 4.2 消息头 32 4.3 消息主体 33 4.4 消息的长度(Message Length) 34 4.5 常用头域(General Header Fields) 35 5 请求 35 5.1 请求行 36 5.1.1方法 36 5.1.2请求URL(Request-URI) 37 5.2请求的资源 38 5.3请求报头域 39 6 响应 40 6.1 状态行 (Status-Line) 41 6.1.1状态码与原因短语 41 6.2响应头域 44 7 实体(Entity) 45 7.1 实体报文域(Entity Header Fields) 45 7.2 实体主体(Entity Body) 46 7.2.1类型(Type) 46 7.2.2实体主体长度(Entity Length) 46 8 连接 46 8.1 持续连接(Persistent Connection)。 46 8.1.1目的 47 8.1.2总体操作 47 8.1.3代理服务器 (Proxy Servers) 48 8.1.4实际的考虑 (Practical Considerations) 48 8.2 消息传送要求(Message Transmission Requirements) 49 8.2.1持续连接与流量控制 (Persistent Connections and Flow Control) 49 8.2.2监视连接中出错状态的消息 49 8.2.3 100状态码的用途 50 8.2.4服务器过早关闭连接时客户端的行为 51 9 方法定义(Method Definitions) 52 9.1 安全和等幂(Idempotent)方法 52 9.1.1安全方法(Safe Methods) 52 9.1.2等幂方法(Idempotent Mehtods) 52 9.2 OPTIONS(选项) 53 9.3 GET 54 9.4 HEAD 54 9.5 POST 54 9.6 PUT 55 9.7 DELETE(删除) 56 9.8 TRACE 56 9.9 CONNECT(连接) 57 10.状态码定义 57 10.1 通知的 1xx 57 10.1.1 100 继续 (Continue) 57 10.1.2 101转换协议 58 10.2 成功 2xx 58 10.2.1 200 OK 58 10.2.2 201 已创建(Created) 58 10.2.3 202 接受(Accepted) 59 10.2.4 203 非权威信息(Non-Authoritative information) 59 10.2.5 204 无内容 (No Content) 59 10.2.6 205 重置内容(Reset Content) 59 10.2.7 206 部分内容(Partial Content) 60 10.3 重新定向 3xx. 60 10.3.1 300 多个选择.(Multiple Choices) 61 10.3.2 301 永久移动 (Moved Permanently) 61 10.3.3 302 发现(Found) 61 10.3.4 303 见其他(See Other) 62 10.3.5 304 没有被改变(Not Modified) 62 10.3.6 305 使用代理服务器 (User Proxy) 63 10.3.7 306没有使用的(unused) 63 10.3.8 307临时重发(Temporary Redirect) 63 10.4 客户错误 4xx 63 10.4.1 400 坏请求(Bad Request) 64 10.4.2 401 未授权的 (Unauthorized) 64 10.4.3 402 必需的支付 (Payment Required) 64 10.4.4 403 禁用 (Forbidden) 64 10.4.5 404 没有找到(Not Found) 64 10.4.6 405 不被允许的方法(Method Not Allowed) 65 10.4.7 406 不接受的 (Not Acceptable) 65 10.4.8 407 代理服务器授权所需(Proxy Authentication Required) 65 10.4.9 408 请求超时(Request Timeout) 65 10.4.10 409 冲突 (Confilict) 65 10.4.11 410 不存在(gone) 66 10.4.12 411 必需的长度 (Length Required) 66 10.4.13 412 先决条件失败 (Precondition Failed) 66 10.4.14 413 请求实体太大 66 10.4.15 414 请求URI太长(Request-URI Too Long) 67 10.4.16 415 不被支持的媒体类型(Unsupported Media Type) 67 10.4.17 416 请求范围不满足 (Requested Range Not Satisfiable) 67 10.4.18 417 期望失败 67 10.5 服务器错误 5xx (Server Error) 67 10.5.1 500 服务器内部错误 (Internal Server Error) 67 10.5.2 501 不能实现 (Not Implemented) 68 10.5.3 502 坏网关 (Bad Gateway) 68 10.5.4 503 难以获得的服务.(Service Unavailable) 68 10.5.5 504 网关超时(Gateway Timeout) 68 10.5.6 505 HTTP版本不支持 (HTTP version Not Supported) 68 11.入口验证(Access Authentication) 68 12.内容协商 (Content Negotiation) 69 12.1 服务器驱动协商(Server-driven Negotiation) 69 12.2 代理驱动协商 (Agent-driven Negotiation) 70 12.3 透明协商(Transparent Negotiation) 70 13 HTTP中的缓存 71 13.1.1缓存正确性(Cache Correctness) 72 13.1.2警告信息(Warnings) 72 13.1.3缓存控制机制 (Cache-control Mechanism) 73 13.1.4显示的用户代理警告(Explicit User Agent Warnings) 73 13.1.5规则和警告的例外情况 74 13.1.6由客户控制的行为(Client-controlled Behavior) 74 13.2 过期模型 (Expiration Model) 75 13.2.1 服务器指定模型(Server-Specified Expiratiion) 75 13.2.2 启发式过期 75 13.2.3 年龄(Age)计算 76 13.2.4 过期计算(Expiration Calculations) 78 13.2.5澄清过期值(Disambiguation Expiration Values) 79 13.2.6澄清多个响应(Disambiguating Multiple Response) 79 13.3 验证模型(Validation Model) 80 13.3.1最后修改日期 (Last-Modified Dates) 80 13.3.2 实体标签缓存验证器(Entity Tag Cache Validators) 80 13.3.3 强,弱验证器 (Weak and Strong Validators) 81 13.3.4 关于何时使用实体标签和最后修改时间的规则 83 13.3.5非验证条件(Non-validating Conditionls) 84 13.4 响应的可缓存性(Response Cacheability) 84 13.5 从缓存里构造响应 85 13.5.1End-to-end和Hop-by-hop头域 85 13.5.2不可更改的头域 86 13.5.3联合头域(Combining Headers) 87 13.5.4联合字节范围 88 13.6 缓存协商响应 88 13.7 共享和非共享缓存 (Shared and Non-Shared Caches) 89 13.8 错误和不完全的响应缓存行为 89 13.9 GET 和 HEAD 的副作用(Side Effects of GET and HEAD) 90 13.10 在更新或删除后的无效性 90 13.11 强制写通过( Write-Through Mandatory) 91 13.12 缓存替换 (Cache Replacement) 91 13.13 历史列表 (History Lists) 91 14 头域定义 92 14.1 Accept 92 14.2 Accept-Charset 94 14.3 Accept-Encoding 95 14.4 Accept-Language 96 14.5 Accept-Range 97 14.6 Age 97 14.7 Allow 98 14.8 Authorization (授权) 98 14.9 Cache-Control 99 14.9.1什么是可缓存的 101 14.9.2什么能被缓存保存 102 14.9.3对基本过期机制的改进 102 14.9.4缓存重验证和加载控制(Cache Revalidation and Reload Controls) 104 14.9.5 No-Transform缓存控制指令 106 14.9.6缓存控制扩展(Cache control Extendions) 107 14.10 Connection 107 14.11 Content-Encoding 108 14.12 Content-Language 109 14.13 Content-Length 109 14.14 Content-Location 110 14.15 Content-MD5 111 14.16 Content-Range 112 14.17 Content-Type 114 14.18 Date 114 14.18.1没有时钟的源服务器运作 115 14.19 ETag 115 14.20 Expect 116 14.21 Expires 116 14.22 From 117 14.23 Host 118 14.24 If-Match 118 14.25 If-Modified-Since 119 14.26 If-None-Match 120
HTTP(HyperText Transfer Protocol)是一种用于在网络中传输超文本的协议。它是客户端和服务器之间进行通信的规则集。下面是一些HTTP协议的基础知识: 1. HTTP通信是无状态的:HTTP协议本身不保留任何关于先前请求或响应的信息。每个HTTP请求都是独立的,服务器不会记住之前的请求。 2. 请求方法:HTTP定义了不同的请求方法,常用的有GET、POST、PUT、DELETE等。GET用于获取资源,POST用于提交数据,PUT用于更新资源,DELETE用于删除资源。 3. URL:统一资源定位符(URL)是用于标识和定位资源的地址。它由协议类型(如http://)、主机名、可选的端口号、路径和查询参数组成。 4. 请求头:HTTP请求包含一些元数据,称为请求头。请求头包含了一些关于请求的附加信息,如User-Agent、Accept-Language等。 5. 响应状态码:HTTP响应包含一个状态码,用于表示请求的处理结果。常见的状态码包括200(成功)、404(未找到)和500(服务器内部错误)等。 6. 响应头:HTTP响应也包含一些元数据,称为响应头。响应头包含了一些关于响应的附加信息,如Content-Type、Content-Length等。 7. 实体:HTTP请求和响应中的有效载荷称为实体。通常,在请求中,实体是要发送给服务器的数据;在响应中,实体是服务器返回的数据。 这些是HTTP协议的一些基础知识,希望对你有帮助!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值