1.0(1996) -> 1.1(1999) -> 2(2000)javascript
1.0php
每次都从新建立链接css
1.1 html
缺点:java
2.0nginx
GET
POST
PUT
DELETE
OPTION
查询请求的支持状况HEAD
只发送头部信息,确认URI的有效性和资源更新时间TRACE
追踪路径,让服务端返回以前发送的请求信息CONNECT
用隧道协议连接代理,进行加密传输web
200
表示从客户端发来的请求在服务器端被正常处理了204
该状态码表明服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分 , 通常在只须要从客户端往服务器发送信息,而对客户端不须要发送新信息内容的状况下使用。 206
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由 Content-Range指定范围的实体内容。 301
永久性重定向 302
临时性重定向 303
该状态码表示因为请求对应的资源存在着另外一个 ### URI,应使用GET方法定向获取请求的资源304
该状态码表示客户端发送附带条件的请求时,服务器端容许请求访问资源,但未知足条件的状况 (附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部 )307
临时重定向 , 会遵守浏览器标准,不会从 POST变成 GET400
该状态码表示请求报文中存在语法错误 , 浏览器 会像 ### 200 OK同样对待该状态码 401
该状态码表示发送的请求须要有经过 HTTP认证 403
404
500
服务器端在执行请求时发生了错误 503
服务器暂时处于超负载或正在进行停机维护,如今没法处理请求算法
在 HTTP/1.1 协议中浏览器
浏览器客户端在同一时间,针对同一域名下的请求有必定数量限制。超过限制数目的请求会被阻塞。
keep-alive是指服务器和客户端的多个请求响应共用一个TCP链接,而不是每次请求响应都新建一个链接完了后关闭缓存
HTTP/2 能够很容易的去实现多流并行而不用依赖创建多个 TCP 链接,
HTTP/2 把 HTTP 协议通讯的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息,
并行地在同一个 TCP 链接上, 下降了请求延迟。
Pragma和Expires
在 http1.0 时代,给客户端设定缓存方式可经过这两个字段来规范。虽然这两个字段早可抛弃,但为了作http协议的向下兼容,你仍是能够看到不少网站依旧会带上这两个字段
Cache-Control
区分对缓存机制的支持状况, 请求头和响应头都支持这个属性,报文中同时出现了 Expires 和 Cache-Control,则以 Cache-Control 为准。优先级 Pragma -> Cache-Control -> Expires
做为请求首部:
做为响应首部:
Last-Modified
服务器将资源传递给客户端时,会将资源最后更改的时间以“Last-Modified: GMT”的形式加在实体首部上一块儿返回给客户端.
客户端会为资源标记上该信息,下次再次请求时,会把该信息附带在请求报文中一并带给服务器去作检查,若传递的时间值与服务器上该资源最终修改时间是一致的,则说明该资源没有被修改过,直接返回304状态码,内容为空,这样就节省了传输数据量 。若是两个时间不一致,则服务器会发回该资源并返回200状态码,和第一次请求时相似。这样保证不向客户端重复发出资源,也保证当服务器有变化时,客户端可以获得最新的资源。一个304响应比一个静态资源一般小得多,这样就节省了网络带宽。
If-Modified-Since: Last-Modified-value
该请求首部告诉服务器若是客户端传来的最后修改时间与服务器上的一致,则直接回送304 和响应报头便可。当前各浏览器均是使用的该请求首部来向服务器传递保存的 Last-Modified 值
If-Unmodified-Since: Last-Modified-value
该值告诉服务器,若Last-Modified没有匹配上(资源在服务端的最后更新时间改变了),则应当返回412(Precondition Failed) 状态码给客户端.
Last-Modified 存在必定问题,若是在服务器上,一个资源被修改了,但其实际内容根本没发生改变,会由于Last-Modified时间匹配不上而返回了整个实体给客户端(即便客户端缓存里有个如出一辙的资源)。
ETag
为了解决上述Last-Modified可能存在的不许确的问题,Http1.1还推出了 ETag 实体首部字段。 服务器会经过某种算法,给资源计算得出一个惟一标志符(好比md5标志),在把资源响应给客户端的时候,会在实体首部加上“ETag: 惟一标识符”一块儿返回给客户端
客户端会保留该 ETag 字段,并在下一次请求时将其一并带过去给服务器。服务器只须要比较客户端传来的ETag跟本身服务器上该资源的ETag是否一致,就能很好地判断资源相对客户端而言是否被修改过了。
若是服务器发现ETag匹配不上,那么直接以常规GET 200回包形式将新的资源(固然也包括了新的ETag)发给客户端;若是ETag是一致的,则直接返回304知会客户端直接使用本地缓存便可。
If-None-Match: ETag-value
当前各浏览器均是使用的该请求首部来向服务器传递保存的 ETag 值。
Ctrl + F5 / Cmd+Shift+R 强制浏览器不使用缓存
引用1
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 5; gzip_types text/plain application/x-javascript text/css application/xml text/javascript; # 开启gzip gzip on; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 1k; # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明 gzip_comp_level 2; # 进行压缩的文件类型。javascript有多种形式。其中的值能够在 mime.types 文件中找到。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 是否在http header中添加Vary: Accept-Encoding,建议开启 gzip_vary on; # 禁用IE 6 gzip gzip_disable "MSIE [1-6]\.";
gzip
语法:gzip on/off
默认值:off
做用域:http, server, location
说明:开启或者关闭 gzip 模块,这里使用 on 表示启动
gzip_min_length
语法:gzip_min_length length
默认值:gzip_min_length 0
做用域:http, server, location
说明:设置容许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值是0,无论页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers
语法: gzip_buffers number size
默认值: gzip_buffers 4 4k/8k
做用域: http, server, location
说明:设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k 表明以 16k 为单位,按照原始数据大小以 16k 为单位的4倍申请内存。
gzip_comp_level
语法: gzip_comp_level 1..9
默认值: gzip_comp_level 1
做用域: http, server, location
说明:gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。这里设置为 5。
gzip_types
语法: gzip_types mime-type [mime-type ...]
默认值: gzip_types text/html
做用域: http, server, location
说明:匹配MIME类型进行压缩,(不管是否指定)"text/html" 类型老是会被压缩的。这里设置为 text/plain application/x-javascript text/css application/xml text/javascript。