《图解HTTP》学习笔记

网络基础知识

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

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配合使用。

两种加密方式

  • 对称加密
      加密和解密使用同一个密钥的加密方式成为共享密钥加密,也叫做对称加密。

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

  • 非对称加密
      加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
    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及内存资源导致处理速度慢。

image

确认访问用户身份的认证

HTTP使用的认证方式

  • BASIC认证(基本认证)
      是Web服务器与同喜客户端之间进行的认证方式。
    image
  • DIGES认证(摘要认证)
      为了弥补BASIC不加密的缺点,DIGEST同样适用质询/响应的方式,但不会像BASIC直接发送明文。
    image

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

image
  • SSL客户端认证

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

image

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

  • From认证(基于表单认证)
      客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。

(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容