HTTP超超超详解

前言

web的应用层的协议是:超文本传输协议(HTTP),它是web的核心。http有服务端程序和客服端程序实现,它们在不同的端系统中,通过交换http报文进行会话。http定义了它们进行报文格式的方式,和报文结构。
相关术语web页面(文档)是由对象组成。一个对象只是一个文件(诸如HTML文件,JPEG图片)且它们通过一个url寻址。多数web页面含有一个HTML基本文件和几个对象。HTML基本文件通过url地址引用页面其他对象。url地址由两部分组成:存放对象的主机名和对象的路径名;一般格式<协议>://<主机>:<端口号>/<路径>

一、HTTP基本思想:

用户请求一个web页面(点击一个超链接)时,浏览器向服务器发出该页面所包含对象的HTTP请求报文,服务器接收到请求并用包含该对象的响应报文进行响应。
HTTP使用TCP作为支撑运输协议。HTTP客户端首先发起一个与服务端的tcp连接。一但连接建立,该浏览器和服务器进程就可以通过套接字接口访问tcp。客户端向它的套接字接口发送请求报文,从他的套接字接口接收响应报文。类似的,服务端也是。一旦客户向它的套接字接口发送请求报文,该报文就脱离客户控制进入tcp的控制。则tcp为http提供可靠数据传输服务。即http不用担心数据丢失,也不必关注tcp在网络中数据丢失和乱序故障的恢复细节,那是低层协议的工作。
服务器向客户发送请求的数据,而不存储关于该客户的状态信息。所以说HTTP是一种无状态的协议(引入cookie和session点击进入)

二、连接方式

1.非持久连接:

每个请求/响应对都是经一个单独的tcp连接发送。
但是可以并行,也可设置成串行。
往返时间(RTT):一个短分组从客户端到服务端,再从服务端返回客户端花费的时间。
缺点
第一:必须为每次请求的对象建立和维护一个全新的连接。对于这种连接。在客户端服务端都要分配tcp的缓冲区和保持tcp变量,给服务器带来严重的负担。
第二:每一个对象要经受两倍RTT的交付时延,一个RTT用于创建tcp,一个用于请求和接收一个对象。

2.持久连接:

所有请求及响应经相同的TCP连接发送
流水线:全部文件共用一条TCP连接,请求文件的过程是并行的
非流水线:全部文件共用一条TCP连接,但每个文件的请求文件过程不并行
但是所过一条连接经过一定的时间间隔(可配置)仍未使用,就会被关闭。

三、报文格式

1.请求报文:

在这里插入图片描述
请求行:三个字段:方法字段 url字段和http版本字段
方法:
GET: 对服务器资源的简单请求;实体体(请求数据)为空。

POST: 用于发送包含用户提交数据的请求;实体体不为空;常用于提交表单

HEAD:类似于 GET 请求,有响应中但不返回具体请求对象,在开发中一般用于调试跟踪,获取报头。

PUT:与web发行工具联合使用,允许用户上传对象到服务器指定的路径上去。

DELETE:允许用户或者应用程序删除服务端的对象。
在这里插入图片描述
首部行:
在这里插入图片描述

2、响应报文:

在这里插入图片描述
状态行:由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔
状态码
● 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:

1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

2xx:表示服务器已成功接收到请求并进行处理;

3xx:表示服务器要求客户端重定向;

4xx:表示客户端的请求有非法内容;

5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

● 状态码描述文本有如下取值:

200 OK:表示客户端请求成功;
  
301 Move Permanentky: 永久重定向,搜索引擎将删除源地址,保留重定向地址;

400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;

401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;

404 Not Found:请求的资源不存在,例如,输入了错误的URL;

500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;

503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

四、版本区别:

1. HTTP1.0和HTTP1.1的一些区别:

缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

Header头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

2、HTTP2.0和HTTP1.X相比的新特性

新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

五、补充

优缺点,https ,ssl点击进入

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值