HTTP1.0/1.1

1、HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理
  HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
  HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent  connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).
  在1.0时的会话方式:
 1. 建立连接
 2. 发出请求信息
 3. 回送响应信息
 4. 关掉连接
  HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
  请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。  HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。
  2.HTTP 1.1增加host字段
  在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
  HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
  3、100(Continue) Status(节约带宽)
  HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。
  4、HTTP/1.1中引入了Chunked transfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。

  HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
  HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent  connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).
  在1.0时的会话方式:
 1. 建立连接
 2. 发出请求信息
 3. 回送响应信息
 4. 关掉连接
  HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
  请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。  HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。
  2.HTTP 1.1增加host字段
  在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
  HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
  3、100(Continue) Status(节约带宽)
  HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。
  4、HTTP/1.1中引入了Chunked transfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。

  5、HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。

HTTP1.1 HTTP 2.0主要区别

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

关于多路复用,可以参看学习NIO

数据压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

服务器推送
意思是说,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。
 

 

 

请求头

 

Accept:text/html,image 用于告诉服务器, 客户机支持的数据类型

Accept-Charaset:ISO-8859-1 客户机支持的编码

Accept-Encoding:gzip 客户机支持的数据压缩格式

Accept-Language: zh-cn 客户机支持的语言

Host:www.t381.org 告诉服务器,想访问的主机名

Referer:http://www.ti23.org 从哪个资源访问服务器(常用于防盗链)

User-Agent:Mozilla 4.0 告诉客户机的软件环境

Cookie:可以带给服务器客户端的数据

Connection:close/Keep-Alive 请求后是关闭,还是保持连接

Date: Tue, 11 Jul 2000 18:30:30 GMT 请求时间

响应头 HTTP/1.1 200 OK 状态行,200是状态码表示一切OK

Location: http://www.aaa.net 配合http302状态码实现重定向,告诉客户机应该找谁

Server: Microsoft-IIS/5.0  告诉浏览器服务器的类型

Content-Encoding:gzip 数据的压缩格式

Content-Length:告诉浏览器,回送数据的长度

Content-Type: text/html; charset=utf-8 告诉浏览器,回送数据的类型

Transfer-Encoding:告诉浏览器数据的传送格式

Refresh:多长时间之后刷新一次

Last-Modified: 告诉浏览器当前资源的缓存时间点

Content-Disposition:"attachment;filename=mother.jpg" 控制让浏览器用下载的方式访问资源

Connection:close/Keep-Alive

Date: Sun, 23 Sep 2012 13:03:14 GMT

Expires:告诉浏览器把回送的资源缓存多长时间。-1或0,则表示不缓存,单位为毫秒,如缓存1小时:

        response.setDateHeader("Expires", System.currentTimeMillis()+1000*3600);

Cache-Contorl: no-cache或max-age=1800 控制浏览器的缓存

Pragma: no-cache 

注意:后三个都可以实现是否缓存以及缓存多久,但是不同浏览器对其支持不同,所以如果想要不缓存,则可以三者都设置一下,以支持所有浏览器

 

4. HTTP状态码(最好结合使用场景,比如在缓存命中时使用哪个)  1**(信息类):表示接收到请求并且继续处理  100——客户必须继续发出请求  101——客户要求服务器根据请求转换HTTP协议版本

2**(响应成功):表示动作被成功接收、理解和接受  200——表明该请求被成功地完成,所请求的资源发送回客户端  201——提示知道新文件的URL  202——接受和处理、但处理未完成  203——返回信息不确定或不完整  204——请求收到,但返回信息为空  205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件  206——服务器已经完成了部分用户的GET请求

3**(重定向类):为了完成指定的动作,必须接受进一步处理

  300——请求的资源可在多处得到 

301——本网页被永久性转移到另一个URL 

302——请求的网页被转移到一个新的地址,但客户访问仍继续通过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。 

303——建议客户访问其他URL或访问方式 

304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用 

305——请求的资源必须从服务器指定的地址得到  306——前一版本HTTP中使用的代码,现行版本中不再使用  307——申明请求的资源临时性删除

 

        详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

4**(客户端错误类):请求包含错误语法或不能正确执行 

400——客户端请求有语法错误,不能被服务器所理解 

401——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用  HTTP 401.2 - 未授权:服务器配置问题导致登录失败    HTTP 401.3 - ACL 禁止访问资源    HTTP 401.4 - 未授权:授权被筛选器拒绝  HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败 

402——保留有效ChargeTo头响应 

403——禁止访问,服务器收到请求,但是拒绝提供服务  HTTP 403.1 禁止访问:禁止可执行访问    HTTP 403.2 - 禁止访问:禁止读访问    HTTP 403.3 - 禁止访问:禁止写访问    HTTP 403.4 - 禁止访问:要求 SSL    HTTP 403.5 - 禁止访问:要求 SSL 128    HTTP 403.6 - 禁止访问:IP 地址被拒绝    HTTP 403.7 - 禁止访问:要求客户证书    HTTP 403.8 - 禁止访问:禁止站点访问    HTTP 403.9 - 禁止访问:连接的用户过多    HTTP 403.10 - 禁止访问:配置无效    HTTP 403.11 - 禁止访问:密码更改    HTTP 403.12 - 禁止访问:映射器拒绝访问    HTTP 403.13 - 禁止访问:客户证书已被吊销    HTTP 403.15 - 禁止访问:客户访问许可过多    HTTP 403.16 - 禁止访问:客户证书不可信或者无效  HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效 

404——一个404错误表明可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。eg:输入了错误的URL 

405——用户在Request-Line字段定义的方法不允许 

406——根据用户发送的Accept拖,请求资源不可访问 

407——类似401,用户必须首先在代理服务器上得到授权 

408——客户端没有在用户指定的饿时间内完成请求

 409——对当前资源状态,请求不能完成

 410——服务器上不再有此资源且无进一步的参考地址 

411——服务器拒绝用户定义的Content-Length属性请求 

412——一个或多个请求头字段在当前请求中错误 

413——请求的资源大于服务器允许的大小 

414——请求的资源URL长于服务器允许的长度 

415——请求资源不支持请求项目格式 

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段 

417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。

5**(服务端错误类):服务器不能正确执行一个正确的请求 

HTTP 500 - 服务器遇到错误,无法完成请求    HTTP 500.100 - 内部服务器错误 - ASP 错误    HTTP 500-11 服务器关闭    HTTP 500-12 应用程序重新启动    HTTP 500-13 - 服务器太忙    HTTP 500-14 - 应用程序无效    HTTP 500-15 - 不允许请求 global.asa    Error

501 - 未实现  HTTP

502 - 网关错误  HTTP

503:由于超载或停机维护,服务器目前无法使用,一段时间后可能恢复正常 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值