HTTP知识总结

HTTP简介

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是一个用于web的客户端与服务器之间的交互协议。其在TCP/IP协议栈中处于应用层,与其相关的还有DNS(域名与IP之间的转换协议)、TCP(传输层协议)、IP(网络层协议)。目前主流的版本是HTTP/1.1,同时HTTP/2.0也在推广。

HTTP协议

HTTP协议的最大特点是无状态,也就是说其自身不会请求和相应之间的通信状态进行保存(无持久化机制),无状态机制的优点在于HTTP可以快速的处理大量的请求,并立刻响应,而缺点在于其不能保存客户端的信息,无法知道请求的报文是否是同一个客户端发来的。但是Cookie技术也弥补了无状态的缺点。(在后面会介绍Cookie技术)
同时,HTTP还有协议有Keep-alive选项进行持久连接,持久连接意思是建立一次TCP连接后,可以发送多个HTTP报文,这样的好处在于可以提高传输效率,不需要多次重复TCP的建立与断开。在HTTP/1.1中所有的连接都是默认持久化的。

HTTP报文

HTTP报文就是HTTP协议传输过程中的数据组织格式。客户端发给服务器的叫做请求报文,服务器返回给客户端的称为相应报文。

HTTP请求报文格式

请求报文格式如下图所示。主要包括报文首部,空行,报文主体三个部分。其中报文首部又包括请求行,首部字段等内容。
在这里插入图片描述
利用curl -v可以看到发送给www.baidu.com的请求报文格式如下。
在这里插入图片描述

请求行

请求行包括HTTP请求方法、请求URL和HTTP版本号三个部分。HTTP请求方法主要包括下面几种。

请求方法说明
GET用于获取资源
POST传输实体的主体
PUT传输文件
HEAD获取首部报文
DELETE删除文件
OPTIONS询问服务器支持的方法
TRACE追寻路径
CONNECT要求用隧道协议连接代理(即与代理服务器建立通信隧道)

HTTP响应报文格式

响应报文格式如下图所示。和请求报文格式基本相同,区别在于报文首部中第一行是状态行,然后首部字段中有响应的字段。
在这里插入图片描述
利用curl命令及其参数可以看到www.baidu.com返回的HTTP响应报文。可以看到,状态行中主要包括状态码,原因短语和HTTP版本号。
在这里插入图片描述

状态码

这里是HTTP协议的一个重点,HTTP状态码负责表示客户端请求的HTTP报文的返回结果状态,可以通过其观察到服务器是否正常工作,请求的数据是否找到等信息。状态码可以分成五种类别,如下表格所示。

类别说明具体
1XX信息状态码接收的请求正在处理
2XX成功状态码请求正常处理完毕200 OK(客户端发来的请求被服务器正常处理)
204 No Content(请求被处理,但响应报文无主体部分)
206 Partical Content(客户端的请求是范围请求)
3XX重定向状态码需要进行附加操作以完成请求301 Moved Permanetly(永久性重定向,资源已经被分配新URL)
302 Found(临时性重定向,POST改成GET)
303 See Other(请求的对应资源在另一个URI中,应该使用GET方法进行请求)
304 Not Modified (请求报文中部分条件为满足)
307 Temporary Redirect (临时重定向,不需要从POST改成GET)
4XX客户端错误状态码服务器无法处理请求400 Bad Request(请求报文中存在语法错误)
401 Unauthorized(表示请求的HTTP请求需要有认证)
403 Forbidden(请求资源的访问被服务器权限拒绝)
404 Not Found(服务器没有找到对应资源)
5XX服务器错误状态码服务器处理请求错误500 Internal Server Error(服务器端在执行请求时候出现错误)
503 Service Unavailable (服务器正处于超负载或停机维护无法服务客户端)

HTTP首部字段

通用首部字段, 指的是请求报文和响应报文都可以使用的首部字段。

字段名称字段说明
Cache-Control控制缓存行为
Connection控制不再转发给代理的字段,持久连接的管理
Date报文的日期时间
Trailer报文末端的首部一览
Transfer-Encoding传输报文主体时候的编码方式
Upgrade升级为其他协议
Warning错误通知
Via代理服务器相关信息

请求首部字段,指的是只有请求报文可以使用的首部字段。

字段名称字段说明
Accept用户可处理的媒体类型(文本、图片、视频文件等)及优先级
Accept-Charset用户可处理的字符集
Accept-Encoding用户的编码方式
Accept-Language用户的语言
AuthorizationWeb认证信息
Expect期待的特定行为
From用户电子邮箱
Host请求的资源所在互联网主机名和端口号
Range在只需要获取部分信心的范围请求中用于指定请求资源范围
Proxy-Authorization代理服务器的客户验证
User-Agent创建请求的浏览器和用户代理等信息传给服务器

响应首部字段,指的是相应报文中使用的首部字段

字段名称字段说明
Accept-Ranges是否接收字节范围请求
Age资源创建经过的时间
ETag资源匹配信息
Location让客户端重定向的新URI
Server服务器的信息

实体首部字段,请求报文和响应报文中实体部分所用的首部,用于补充内容更新时间和实体相关信息。

字段名称字段说明
Allow资源可支持的HTTP方法
Content-Encoding主体编码方法
Content-Language主体语言
Content-Length主体长度
Content-Location主体对应URI
Content-Range主体位置范围
Content-Type主体资源类型
Expired过期时间
Last-Modified最后一次修改时间

HTTPS

HTTP协议的用处非常广,但是其也有很多缺点,主要的不足就是安全性太低,HTTP缺点如下:

  1. 通信使用明文,内容易被盗取。最简单的解决方式就是通信加密或者内容加密。
  2. 不验证通信双方身份,易被伪装攻击,可以用数字证书的方式对客户端进行身份验证。
  3. 无法保证明文的完整性,内容易被篡改,可以用数字签名的方式。

因为上述原因,提出HTTPS来弥补HTTP安全方面的考虑。HTTPS = HTTP + SSL,同时也可以说HTTPS = HTTP + 加密 + 认证 + 完整性保护,其主要思想就是通过加密的手法保证数据的安全性。HTTPS通过非对称加密方法(分成公钥和私钥,比如A要传数据给B,先用B的公钥加密,然后传给B,B就可以用B的私钥进行解密)交换密钥,然后在客户端和服务器都有密钥的时候,通过对称加密方式(只有一个密钥用于加解密)交换报文信息。同时会使用数字证书进行身份验证,数字证书是第三方机构颁发证书,用于证明通信双方的可靠性。
HTTPS协议也有缺点,由于SSL的以下缺点,使得其主要用于安全需求较高的地方:

  1. 传输速度较慢,由于安全性考虑,会使得通信过程变复杂,速度较慢
  2. 开销较大,因为有加解密的过程,需要消耗系统性能来进行处理。

Cookie和Session

Cookie机制主要用于客户端保持与服务器连接的状态。首先HTTP是无状态协议,也就是说服务器只会处理传来的请求并生成反馈,不会去保存连接的上下文信息,当连接断开以后,下次同样的客户端进行请求就会重新处理。而Cookie机制就是客户端保持连接信息的机制,Session是服务器端保持连接信息的机制。
Cookie的流程如下:

  1. 当第一次客户端与服务器进行交互的时候,服务器生成一个Cookie信息(or Session),同时设定Cookie类型和保存时间。
  2. 将Cookie的信息随着响应报文传回给客户端,客户端将其存储。
  3. 当客户端与服务器端再次通信的时候,服务器端就可以根据Cookie信息找到相应的客户端数据
    Cookie机制
    Session机制是服务器端保存客户端信息的方法,可以通过Cookie实现,也可以通过URL地址重写的方法。因为Cookie机制是客户端可以禁止的,URL地址重写的原理是将该用户Session的id信息重写到URL地址中,服务器能够解析重写后的URL获取Session的id,这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。

HTTP 1.0 与 HTTP 1.1区别

  1. 持久连接,HTTP1.0每个请求与响应都是一个新连接,HTTP1.1在一个TCP连接中可以同时传递多个HTTP请求与响应(keepalive机制),Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。
  2. 新增请求方法,HTTP1.1增加了OPTIONS,PUT, DELETE, TRACE, CONNECT这些请求方法

HTTP 2.0

HTTP2.0相比于HTTP1.x有了一些改进地方,其主要是基于Google开发的SPDY协议,主要改进如下:

  1. 新的二进制格式,HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  2. 多路复用有效降低延迟,即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
  3. header压缩,HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
  4. 服务端推送,服务端可以在客户端某个请求后,主动推送其他资源。

参考:

  1. 图解HTTP
  2. Cookie && Session
  3. HTTP2.0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值