网络基础知识
URL和URI
URI(Uniform Resource Idenifier)统一资源标识符。即由某个协议方案标识的资源定位标识符。协议方案是指访问资源所使用的的协议方案名称。使用HTTP协议时,协议方案就是http,此外还有ftp,telnet,file等。
URI用字符串标识某一互联网资源,而URL标识资源的地点(互联网上所处的位置)。可见URL是URI的子集。
URI的格式
绝对URI的格式如下:
-
协议方案名
使用http或https等协议方案名获取访问资源时需要指定协议类型。不区分字母大小写,最后附加一个冒号(:)。 -
登录信息
指定用户名和密码作为从服务器端获取资源时必要的登录信息,此项是可选项。 -
服务器地址
使用绝对URI必须指定待访问的服务器地址。服务器地址可以是域名或IP地址。 -
服务器端口号
指定服务器连接的端口号,此项也是可选项,若省略则自动使用默认端口号。 -
带层次的文件路径
指定服务器上的文件路径来定位特定的资源。 -
查询字符串
针对已经指定的文件路径内的资源,可以使用查询字符串传入任意参数,此项可选。 -
片段标识符
使用片段标识符通常可标记出以获取资源中的子资源(文档内的某个位置),此项也是可选项。
HTTP协议基础
HTTP请求报文组成
请求报文是由请求方法,URI,协议版本,可选的请求首部和内容实体构成的。
HTTP响应报文组成
x响应报文是由协议版本,状态吗(表示请求结果的数字代码),用于解释状态码的原因短语可选的响应首部字段以及实体主体构成
HTTP是无状态协议
HTTP是一种不保存状态的协议,即无状态协议。HTTP协议自身部队请求和响应之间的通信状态保存,也就是说在HTTP这个级别,协议对于发送过的请求和响应都不做持久化处理。
HTTP的无状态是为了尽快地处理大量食物,确保协议的可伸缩性,但是为了实现期望的保持状态的功能,引入了Cookie技术来保存状态。
请求URI定位资源
当客户端请求访问资源而发起请求时,URI需要将作为请求报文中的请求URI包含在内,可以有以下三种方法指定请求的URI:
-
URI作为完整的请求URI
-在首部字段host中写明网络域名或IP地址
-
用(星号代替请求的URI)
除此之外,如果不是访问特定的资源而是对服务器本身发起请求,可以用一个*号来代替URI。
HTTP方法
HTTP1.1所支持的方法如下:
-
GET:获取资源
GET方法用来请求访问已被URI识别的资源。指定的资源经过服务器端解析后返回相应内容。
-
POST:传输实体主体
POST用来传输实体主体,与GET方法很相近,但是POST的主要目的并不是获取响应的主体内容。
-
PUT:传输文件
PUT方法用来传输文件,要求在请求报文的主体中包含主体中包含文件内容,然后保存到请求的URI指定的位置。
由于HTTP/1.1的PUT方法自身不带任何验证机制,任何人都可以上传文件,存在安全问题,因此一般WEB网站不适用该方法。
-
HEADE:获得报文头部
HEAD方法和GET方法一样,只是不返回报文主体部分,用于确认URI的有效性以及资源更新日期时间等。
-
DELETE
DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法安请求URI删除指定的资源。
DELETE方法与PUT方法一样不带验证机制,因此存在安全问题。
-
OPTIONS:询问支持的方法
OPIONS方法用来查询针对请求URI指定资的资源支持的方法。
-
TRAXE:追踪路径
TRACE方法是让WEB服务端将之前的请求通信环路回给客户端的方法。
在发送请求时,在Max_Forwards首部字段中填入数值,没经过一个服务器端该数字就减一,当数值刚好为零,就停止传输,最后接收到请求的服务器端则返回状态码200OK的响应。
-
CONNECT:要求用隧道协议代理代理
CONNECT方法要求在与代理服务器通信时家里隧道,使用隧道协议进行TCP通信。
主要是用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)来划分。通常并不一定有报文主体。
请求报文与响应报文的结构
-
请求行
包含用于请求的方法,请求URI和HTTP版本。 -
状态行
包含表明相应结果的状态码,原因短语和HTTP版本。 -
首部字段
包含表示请求和响应的各种条件和属性的个另类首部,主要有:通用首部,请求首部和实体首部。
编码提升传输速率
HTTP传输数据时既可以按照数据原貌进行传输,也可以在传输过程中通过编码提升传输速率。
报文主体和实体主体的差异
-
报文
报文是HTTP通信的基本单位,由8位组字节流组成通过HTTP通信传输。 -
实体
作为请求或响应的有效载荷数据(补充项)被传输,主要有实体首部和实体主题组成。
HTTP报文主体用于传输请求或响应的实体主体。
报文主体和实体主体的差异:通常报文主体等于实体主体,当只有在传输中进行编码操作时,实体主体的内容发生变化时,才导致两者发生差异。
HTTP的状态码
状态码的的职责是当客户端向服务器发送请求时,描述返回的请求结果,状态码的类别如下表:。
image
下面介绍比较常用的状态码:
2XX
2XX的响应结果表明请求被正常处理。
-
200 OK
表示从客户端发来的请求在服务器端被正常处理了。
随改状态码一起返回的信息回音方法的不同而发生改变。比如,使用GET方法时,对应请求资源的实体会作为响应返回。而使用HEADER方法时,对应请求资源的实体首部不随报文主体作为响应返回(响应中只返回首部,不返回实体的主体部分)。
-
204 Not Content
该状态码代表服务器接受的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。
一般在只需从客户端往服务器发送消息,而对客户端不需要发送新信息内容的情况下使用。
-
206 Partial Content
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分GET请求。
响应报文中包含由Content-Range指定范围的指定实体内容。
3XX重定向
3XX响应结果表明浏览器要执行某些特殊的梳理以正确处理请求。
-
301 Moved Permanently
永久重定向。该状态码表示请求的资源已经被重新分配了新的URI,以后应该使用资源现在所指的URI。
image -
302 Found
临时重定向。该状态码表示请求的资源已经被分配了新的URI,希望用户(本次)能使用新的URI访问。
image
302和301Moved Permanently状态码相似,但302状态码代表的资源不是被永久的移动,只是临时行的。换句话说,已经移动的资源对应的URI将来还有可能改变。
-
303 See Other
该状态码标识由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
image
303状态码和302 Not Foud状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源。
当301,302,303响应状态返回码时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动发送。
-
304 Not Modified
自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
304状态码返回时,不包含任何响应的主体部分。304被划分在3XX类别中,但是和重定向没有关系。该返回码通常用于请求报文中包含有If-Match,If-Modified-since,If-None-Match,If-Ranage,If-Unmodified-Since的附加请求条件。
-
307 Tempirary Rediret
临时重定向。该状态码与302 Found有着相同的含义,但该方法会遵守标准不允许将POST改为POST。
4XX客户端错误
4XX的响应结果表明客户端是发生错误的原因所致。
-
400 Bad Request
该状态码表示求情报文中存在语法错误,当错误发生时,需要修改请求的内容后再次发送请求。另外,浏览器会像200 OK一样对待该状态码。
image -
401 Unauthorized
该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。另外之前已经进行过1次请求,则表明用户认证失败。
image
返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate的首部泳衣质询用户信息。当浏览器初次接受到401响应,会弹出认证用的对话窗口。
-
403 Forbiden
该状态码表明地请求资源的访问被服务器拒绝了。服务器端没必要给出拒绝的详细理由。
image -
404 Not Found
该状态码表明服务器上无法找到请求的资源。除此之外,也可以以在服务器端拒绝请求并且不想说明理由时使用。
image
5XX 服务器错误
5XX响应结果表明服务器本身发生错误
-
500 Internal Sever Error
500 (服务器内部错误) 服务器遇到错误,无法完成请求.另外也可能是Web应用存在Bug或某些临时的故障。
image -
501 Service Unavaiable
该状态码表明服务器暂时处于超载或正在进行停机维护,现在无法完成请求。
image
WEB服务器
用单台虚拟主机实现多个域名
虚拟主机即物理层面有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。
在相同的IPP地址下,由于虚拟主机可以寄存多个不同的主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名和URI。
通信数据转发程序:代理,网关,隧道
-
代理
代理是一种具有转发功能的应用程序,它扮演了位于服务器和客户端之间的中间人角色,接受由客户端发送的请求并转发给服务器,同时也接受服务器端返回的响应并转发给客户端。
代理不改变客户端请求的URI,直接将请求转发给前方持有资源实体的源服务器。从源服务器返回的响应通过代理服务器再转发给客户端,在多级代理服务器级联转发时,需要在附加首部字段via标记出经过的主机信息。
使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定的网站控制,以获取访问日志为主要目的。
代理使用方法的分类:(1)缓存代理;(2)透明代理。
-
网关
网关是转发其它服务器通信数据的服务器。
网关的工作机制和代理十分相似,而网关能使通信线路上的服务器提供非HTTP协议服务,使用网关能提高通信的安全能性,可以在客户端与网关之间的通信线路加密以确保连接的安全。
-
隧道
隧道是相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序。
隧道可按要求建立起一条与其它服务器通信的线路,届时使用SSL等加密通信手段。隧道的目的是确保客户端与服务器端进行安全的通信。
HTTP首部
HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
HTTP首部字段
使用首部字段是为给了浏览器和服务器提供把报文主体的大小,所使用的的语言,信息认证等内容。
首部字段的结构
首部字段名: 字段值
例如,在HTTP首部字段中使用Content_Type这个字段来表示报文主体的类型。
Content_Type: text/html
4种类型的首部字段
-
通用首部字段
请求报文和响应报文都会用到的首部。
image -
请求首部字段
从客户端向服务器端发送请求报文时使用的首部,补充了请求的附加内容,客户端信息,响应内容相关优先级等信息。
image -
响应首部字段
从服务器向客户端返回响应报文时用的首部字段。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
image -
实体首部字段
针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等于实体相关的信息。
image -
为Cookie服务的首部字段
Cookie的工作机制是用户状态识别及管理。虽然没被编入标准化的HTTP/1.1的RFC2616中,但在WEB方面得到了广泛的应用。
Web网站为了管理用户的状态会通过Web浏览器,把一些临时数据写入用户的计算机内,接着当用户访问该Web网站时,可通过通信方式取回之前发放的Cookie。
Cookie的首部字段如下表:
image
- Set-Cookie
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
Cookie: status=enable
HTTPS
HTTP的缺点
- 通信使用明文(不加密),内容可以被窃听;
- 不验证通信方的身份,因此可能遭遇伪装;
-
无法验证报文的完整性,所以报文有可能被篡改;
image
image
解决HTTP缺点的HTTPS
HTTP+加密+认证+完整性保护=HTTPS
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配合使用。
两种加密方式
-
对称加密
加密和解密使用同一个密钥的加密方式成为共享密钥加密,也叫做对称加密。
以共享密钥方式加密时必须要将密钥发送给对方,如果通信被监听密钥可能会落入攻击者之手,那么加密就失去意义。
-
非对称加密
加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
image
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及内存资源导致处理速度慢。
确认访问用户身份的认证
HTTP使用的认证方式
-
BASIC认证(基本认证)
是Web服务器与同喜客户端之间进行的认证方式。
image -
DIGES认证(摘要认证)
为了弥补BASIC不加密的缺点,DIGEST同样适用质询/响应的方式,但不会像BASIC直接发送明文。
image
image因为发送给对方的只是相应摘要以及知讯码产生的计算结果,所以比起BASIC认证,密码泄露的可能性较小。
- SSL客户端认证
imageSSL客户端认证是借由HTTPS的客户端证书完成的认证方式。凭借客户端整数认证,服务器可确认访问是否来自自己登陆的客户端。
SSL客户端采用双因素认证:第一个认证因素的SSL客户端证书用来认证客户端计算机,另一个认证因素的密码则用来确定这是用户本人的行为。
-
From认证(基于表单认证)
客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。
(完)
网友评论