网络之-HTTP与HTTPS

HTTP与HTTPS

HTTP

HTTP简介

http是一个无状态无连接的基于tcp的应用层协议。

​ *无连接:无状态是指两次请求服务器不会清楚你请求过一次是一个老用户,但cookie可以解决此问题。

HTTP报文结构

请求报文

请求行:包含用于请求的方法,请求URIHTTP版本

​ 例如:GET /image HTTP/1.1

响应报文

状态行:包含HTTP版本,表明响应结果的状态码原因短语

​ 例如:HTTP/1.1 200 OK

首部字段

​ 包含表示请求和响应的各种条件和属性。

其他

​ 包含HTTP的RFC中未定义的首部(cookie等)。

请求方法

方法说明支持的HTTP版本
GET获取资源1.0/1.1
POST传输实体主体1.0/1.1
PUT传输文件1.0/1.1
DELETE删除文件1.0/1.1
HEAD获得报文首部1.0/1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和资源之间的联系1.0
UNLINK断开连接关系1.0
GET与POST的区别

区别一:
● get重点是从服务器上获取资源。
● post重点是向服务器发送数据。

区别三:
● get传输数据是通过URL传输数据,以field(字段) = value的形式,置于URL后,并用“?”连接,多个请求数据间用“&”连接,这个过程用户是可见的。
● post传输数据是通过将字段和对应值封存在请求实体中发送给服务器。这个过程用户是不可见的。

区别三:
● get传输数据量小,受URL长度限制。
● post可以传输大量数据,所以上传文件时用post。

区别四:
● get是不安全的,URL是可见的,可能会泄漏私密信息。
● post 较get安全性高。

状态码

状态码类别原因短语
1XXInformational接受的请求正在处理
2XXSuccess请求正常处理完毕
3XXRedirection需要进行附加操作
4XXClient Error服务器无法处理请求
5XXServer Error服务器处理请求出错
2XX成功
状态码原因短语解释
200OK请求正常处理
204No Content请求成功,不返回数据
206Partial Content返回请求的范围内的数据
3XX重定向
状态码原因短语解释
301Moved Permanently永久性重定向,请求不从POST变为GET
302Found临时重定向,请求不从POST变为GET
303See Other用GET去请求新的URI
304Not Modified不满足请求报文中的条件,不携带数据
307Temporary Redirect临时重定向,请求不从POST变为GET
4XX客户端错误
状态码原因短语解释
400Bad Request请求报文存在语法错误
401Unauthorized提示浏览器需要认证或上次认证失败
403Forbidden拒绝访问此资源
404Not Found没找到此资源
5XX服务端错误
状态码原因短语解释
500Internal Server Error服务端出现错误
503Service Unavailable服务端正忙

首部字段

首部字段由字段名和字段值构成。多个字段值用’ , '分割。->首部字段名: 字段值, 字段值

通用首部字段
首部字段名说明
Cache-Control控制缓存行为
Connection逐跳首部、连接、持久连接的管理
Date创建报文的日期时间
Pragma报文指令
Trailer报文末端的首部一览
Transfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器的相关信息
Warning错误通知
请求首部字段
首部字段名说明
Accept用户代理可处理的媒体类型
Host请求资源所在的服务器
Range实体的字节范围请求
Accpet-Language优先的语言
Accpet-Encoding优先的内容编码
Accept-Charset优先的字符集
From用户的电子邮箱地址
Expect期待服务器的特定行为
If-Match比较实体标记(ETag)
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记(与If-Match相反)
If-Range资源未更新时发送实体Byte的范围请求
If-Unmodified-Since比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards最大传输逐跳数
Proxy-Authorization代理服务器要求客户端的认证信息
AuthorizationWeb认证信息
Referer对请求中URI的原始获取方
TE传输编码的优先级
User-AgentHTTP客户端程序的信息
响应首部字段
首部字段名说明
Accept-Ranges是否接受字节范围内的请求
Age推算资源创建的经过时间
ETag资源的匹配信息
Location令客户端重定向至指定URI
Proxy-Authenticate代理服务器对客户端的认证信息
Retrty-After对再次发起请求的时机要求
ServerHTTP服务器的安装信息
Vary代理服务器缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息
实体首部字段
首部字段名说明
Allow资源可支持的HTTP方法
Content-Encoding实体主体适用的编码方式
Content-Language实体主体的自然语言
Content-Length实体主提体的大小(单位:字节)
Content-Location替代对应资源的URI
Content-MD5实体主体的报文摘要
Content-Range实体主体的位置范围
Content-Type实体主体的媒体类型
Expires实体主体过期的日期时间
Last-Modified资源的最后修改日期时间
Cookie首部字段
首部字段名说明首部类型
Set-Cookie开始状态管理传送给客户端的Cookie信息响应首部字段
Cookie从服务器接收到的Cookie信息请求响应字段

持久连接/管线化

每进行一次HTTP请求,就会有一次TCP连接,通信完成后,就会断开。持久连接就是一次连接,保持连接状态,减少TCP建立和断开的开销。
connect:keep-alive
以前,发送下一个请求,必须要等待上一个请求收到响应后,才能发送。现在,有管线化技术,可以同时并行发送多个请求。

HTTP1.0、1.1、2.0之间的区别

SPDY技术

2012年google提出了SPDY的方案,优化了HTTP1.X的请求延迟,解决了HTTP1.X的安全性:

  1. 降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。

  2. 请求优先级,多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。

  3. header压缩,前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。

  4. 基于HTTPS的加密协议传输,大大提高了传输数据的可靠性。

  5. 服务端推送,采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。

SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议(将HTTP1.x的内容封装成一种新的frame格式),同时使用已有的SSL功能。

HTTP1.0与1.1
  1. 缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  2. 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  3. 错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  4. Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  5. 长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
HTTP1.1与2.0
  • 新的二进制格式,HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  • 多路复用,即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
  • header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
  • 服务端推送,同SPDY一样,HTTP2.0也具有server push功能。

HTTPS

HTTPS 协议是由 HTTP 加上SSL/TLS协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书,加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

HTTP+加密+认证+完整性保护=HTTPS

工作原理

  1. 客户端通知服务端其支持的加密方式列表,服务端从中选出本次使用的并通知回客户端。
  2. 服务端向客户端传输公开密钥证书,之后发送最初SSL握手结束报文。
  3. 客户端将公开密钥证书利用浏览器内置的证书发布机构的公开密钥来解析出证书中的公开密钥,并使用密钥对生成的随机密钥pre-mastersecret进行加密,将加密后的密钥传输给服务端。
  4. 双方互相确认以后使用此密钥通信,以互相发送的finsh报文是否可以解析为准。
  5. 建立连接结束开始进行基于SSL保护的HTTP通信。

总结

HTTP虽然比传统的HTTP在安全上更有优势,但其加密解密、建立加密通信带来了性能上的降低,以及证书的办理必须在证书认证机构处缴费,使得HTTPS只有在特别需要安全的数据通信时才会使用。

URI和URL的区别

URI,统一资源标识符,用来唯一的标识一个资源。

  • Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
  • URI一般由三部组成:
  • ①访问资源的命名机制
  • ②存放资源的主机名
  • ③资源自身的名称,由路径表示,着重强调于资源。

URL,统一资源定位器,是一种具体的URI,URL可以用来标识一个资源,而且还指明了如何locate这个资源。

  • URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
  • 采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:
  • ①协议(或称为服务方式)
  • ②存有该资源的主机IP地址(有时也包括端口号)
  • ③主机资源的具体地址。如目录和文件名等

URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。

  • 采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:
  • ①协议(或称为服务方式)
  • ②存有该资源的主机IP地址(有时也包括端口号)
  • ③主机资源的具体地址。如目录和文件名等

URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值