HTTPWeb前端之路程序员

《图解HTTP》学习笔记

2017-10-31  本文已影响65人  d9fc24a0c9a9

网络基础知识

URL和URI

URI(Uniform Resource Idenifier)统一资源标识符。即由某个协议方案标识的资源定位标识符。协议方案是指访问资源所使用的的协议方案名称。使用HTTP协议时,协议方案就是http,此外还有ftp,telnet,file等。

URI用字符串标识某一互联网资源,而URL标识资源的地点(互联网上所处的位置)。可见URL是URI的子集。

URI的格式

绝对URI的格式如下:


HTTP协议基础

HTTP请求报文组成

请求报文是由请求方法,URI,协议版本,可选的请求首部和内容实体构成的。

HTTP响应报文组成

x响应报文是由协议版本,状态吗(表示请求结果的数字代码),用于解释状态码的原因短语可选的响应首部字段以及实体主体构成

HTTP是无状态协议

HTTP是一种不保存状态的协议,即无状态协议。HTTP协议自身部队请求和响应之间的通信状态保存,也就是说在HTTP这个级别,协议对于发送过的请求和响应都不做持久化处理。

HTTP的无状态是为了尽快地处理大量食物,确保协议的可伸缩性,但是为了实现期望的保持状态的功能,引入了Cookie技术来保存状态。

请求URI定位资源

当客户端请求访问资源而发起请求时,URI需要将作为请求报文中的请求URI包含在内,可以有以下三种方法指定请求的URI:

HTTP方法

HTTP1.1所支持的方法如下:

由于HTTP/1.1的PUT方法自身不带任何验证机制,任何人都可以上传文件,存在安全问题,因此一般WEB网站不适用该方法。

DELETE方法与PUT方法一样不带验证机制,因此存在安全问题。

在发送请求时,在Max_Forwards首部字段中填入数值,没经过一个服务器端该数字就减一,当数值刚好为零,就停止传输,最后接收到请求的服务器端则返回状态码200OK的响应。

主要是用SSL和TLS协议把通信内容加密后经网络隧道传输。

HTTP持久连接

为了解决HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接,HTTP/1.1和部分HTTP/1.0提出了持久连接,特点是:只要通信双方任意一端没有明确提出断开连接,则继续保持TCP连接状态

持久化连接的好处在于减少了TCP重复连接与断开所造成的开销,减轻了服务器端的负载

管线化

管线化就是即不用等待响应亦可直接发送下一个请求。


使用Cookie管理状态

Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。

Cookie会根据从服务器端发送的响应报文内的一个叫做Set_Cookie的首部信息,通知客户端保存Cookie。当客户端下次再往该服务器发送请求时,客户端会在请求报文中加入Cookie值后发送出去。

服务器端收到客户端发送过来的Cookie后,回去检查究竟是从哪一个客户端发来的请求信息,然后对比服务器上的记录,最后得到之前的状态信息。

HTTP报文内的HTTP信息

HTTP报文

HTTP报文大致可以分为报文首部报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常并不一定有报文主体。

请求报文与响应报文的结构

编码提升传输速率

HTTP传输数据时既可以按照数据原貌进行传输,也可以在传输过程中通过编码提升传输速率。

报文主体和实体主体的差异

报文主体和实体主体的差异:通常报文主体等于实体主体,当只有在传输中进行编码操作时,实体主体的内容发生变化时,才导致两者发生差异。

HTTP的状态码

状态码的的职责是当客户端向服务器发送请求时,描述返回的请求结果,状态码的类别如下表:。


image

  下面介绍比较常用的状态码:

2XX

2XX的响应结果表明请求被正常处理

随改状态码一起返回的信息回音方法的不同而发生改变。比如,使用GET方法时,对应请求资源的实体会作为响应返回。而使用HEADER方法时,对应请求资源的实体首部不随报文主体作为响应返回(响应中只返回首部,不返回实体的主体部分)。

一般在只需从客户端往服务器发送消息,而对客户端不需要发送新信息内容的情况下使用。

响应报文中包含由Content-Range指定范围的指定实体内容。

3XX重定向

3XX响应结果表明浏览器要执行某些特殊的梳理以正确处理请求。

302和301Moved Permanently状态码相似,但302状态码代表的资源不是被永久的移动,只是临时行的。换句话说,已经移动的资源对应的URI将来还有可能改变。

303状态码和302 Not Foud状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源。

当301,302,303响应状态返回码时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动发送。

304状态码返回时,不包含任何响应的主体部分。304被划分在3XX类别中,但是和重定向没有关系。该返回码通常用于请求报文中包含有If-Match,If-Modified-since,If-None-Match,If-Ranage,If-Unmodified-Since的附加请求条件。

4XX客户端错误

4XX的响应结果表明客户端是发生错误的原因所致

返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate的首部泳衣质询用户信息。当浏览器初次接受到401响应,会弹出认证用的对话窗口。

5XX 服务器错误

5XX响应结果表明服务器本身发生错误

WEB服务器

用单台虚拟主机实现多个域名

虚拟主机即物理层面有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。

在相同的IPP地址下,由于虚拟主机可以寄存多个不同的主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名和URI。

通信数据转发程序:代理,网关,隧道

代理不改变客户端请求的URI,直接将请求转发给前方持有资源实体的源服务器。从源服务器返回的响应通过代理服务器再转发给客户端,在多级代理服务器级联转发时,需要在附加首部字段via标记出经过的主机信息。

使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定的网站控制,以获取访问日志为主要目的
  代理使用方法的分类:(1)缓存代理;(2)透明代理。

网关的工作机制和代理十分相似,而网关能使通信线路上的服务器提供非HTTP协议服务,使用网关能提高通信的安全能性,可以在客户端与网关之间的通信线路加密以确保连接的安全。

隧道可按要求建立起一条与其它服务器通信的线路,届时使用SSL等加密通信手段。隧道的目的是确保客户端与服务器端进行安全的通信。

HTTP首部

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

HTTP首部字段

使用首部字段是为给了浏览器和服务器提供把报文主体的大小,所使用的的语言,信息认证等内容。

首部字段的结构

首部字段名: 字段值

例如,在HTTP首部字段中使用Content_Type这个字段来表示报文主体的类型。

Content_Type: text/html

4种类型的首部字段

Web网站为了管理用户的状态会通过Web浏览器,把一些临时数据写入用户的计算机内,接着当用户访问该Web网站时,可通过通信方式取回之前发放的Cookie。

  Cookie的首部字段如下表:


image
Set-Cookie: status=enable;expre= Tue,05 july 2011 07:32:26 GMT;path=/;domain.havk.jp;

  Set-Cookie的字段属性:

属性 说明
NAME=VALUE 赋予Cookie的名称和其值(必须项)
expire=DATE Cookie的有效期(若不指明则默认为浏览器关闭之前)
path=PATH 用于限制指定Cookie的发送范围的文档目录(若不制指定默认为文档所在的文件目录)
Domain 指定的域名可做到与结尾匹配一致
Secure 仅在HTTPS安全通信时才发送cookie
HttpOnly 加以限制,使Cooki不能被Javascript脚本访问
Cookie: status=enable

HTTPS

HTTP的缺点

解决HTTP缺点的HTTPS

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

image

HTTPS的实质

  HTTP是身披SSL外壳的HTTP
  HTTPS并不是一种新的协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Secure)协议代替。

通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通,SSL是独立于HTTP的协议,所以不光HTTP协议,其它应用层协议如SMTP和Telent都可以和SSL配合使用。

两种加密方式

以共享密钥方式加密时必须要将密钥发送给对方,如果通信被监听密钥可能会落入攻击者之手,那么加密就失去意义。

HTTPS采用混合加密方式

  HTTPS采用共享密钥加密公开密钥加密两者并用的混合加密机制。

在交换密钥(共享密钥)环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

image

证明公开密钥的正确性

  公开密钥加密方式存在一些问题,无法证实公钥真伪.为了解决这个问题,可以使用由数字证书认证机构(CA,certificate authority)和其相关颁发的公钥证书.


image

数字认证机构的公钥为了安全起见,会事先在客户端内部植入常用认证机构的公开密钥。

HTTPS的安全通信机制

image

  具体步骤:
1.客户端通过发送client hello报文开始SSL通信.报文中包含客户端支持的SSL指定版本,加密组件列表(所使用的加密算法 密钥长度等)
2.服务器可进行SSL通信时,会议Server Hello报文作文回应.报文中含SSL版本 加密组件.服务器的加密组件内容是从接受客户端加密组件内筛选出来的.
3.之后服务器发送certificate报文.报文中包好公开密钥证书.
4.服务器发送server hello done报文通知客户端.最初阶段握手协商部分结束.
5.SSL第一次握手结束后,客户端以client key exchange报文作为回应.报文包含通信加密中使用的随机密码串.该报文已用步骤3中的公钥加密;
6.客户端继续发送change cipher spec报文.该报文会提示想服务器,在此报文之后的通讯会采用pre-master secret密钥加密
7.客户端发送finished报文 该报文包含连接至今前部报文的整体校验值.这次握手协商是否成功,要以服务器是否能够正确解密该报文作文判定标准.
8.服务器同样发送change cipher spec报文
9.服务器同样发送finished报文
10.C&S finishe报文交换完毕之后,ssl连接就算建立完成.通信会受到SSL的保护.从此开始进行应用层的协议通信,即发送HTTP响应
11.应用层协议通信,即发送HTTP响应
12.最后客户端断开连接.断开连接时,发送close_notity报文.上图做了一些省略
在以上流程中,应用层发送数据时会附加一种叫做MAC(message authentication code)的报文摘要.MAC能够查知报文是佛遭到篡改.从而保护报文的完整性.

SSL的的缺点

  速度慢:(1)通信慢(2)大量消耗CPU及内存资源导致处理速度慢。

image

确认访问用户身份的认证

HTTP使用的认证方式

因为发送给对方的只是相应摘要以及知讯码产生的计算结果,所以比起BASIC认证,密码泄露的可能性较小。

image

SSL客户端认证是借由HTTPS的客户端证书完成的认证方式。凭借客户端整数认证,服务器可确认访问是否来自自己登陆的客户端。

image

SSL客户端采用双因素认证:第一个认证因素的SSL客户端证书用来认证客户端计算机,另一个认证因素的密码则用来确定这是用户本人的行为。


(完)

上一篇 下一篇

猜你喜欢

热点阅读