图解HTTP读书笔记

笔记

第一章

1.1 Web

1、Web浏览器根据指定的url从Web服务器端获取文件资源等信息,显示出界面
2、通过发送请求获取服务器资源的Web浏览器都叫客户端,提供响应的一端叫服务器
3、Web使用http,超文本传输协议,通信

1.2 HTTP分层与传输

1、HTTP是TCP/IP的一个子集,TCP/IP是与互联网相关联的一个协议总称
2、TCP/IP分层:应用层,传输层,网络层,数据链路层
3、应用层:用户提供应用服务时候的通信活动,包括FTP文件传输协议,DNS域名系统,HTTP超文本传输协议
4、传输层:为上层提供网络连接中的两台计算机之间的数据传输,包括TCP传输控制协议,UDP用户数据报协议
5、网络层:处理数据包,网络传输的最小数据单位,选择传输路线,把数据包给对方,包括IP协议
6、数据链路层:处理连接网络的硬件部分
7、顺序:发送端从应用层往下走,接收端从链路层往上走
8、步骤:发送端在应用层(HTTP)发送想看某web界面的HTTP请求,在传输层(TCP)把在应用层收到的请求HTTP报文分割,在各报文上打上标记序号和端口号后转发给网络层(IP),网络层增加座位通信目的地的MAC地址后转发给链路层。接收端反向接收
顺序

9、封装:将数据包装,发送端每经过一层会打上这一层的首部信息,接收端是消去。
10、应用层:HTTP报文:HTTP数据;传输层:TCP报文:TCP首部,HTTP数据;网络层:IP报文:IP首部,TCP首部,HTTP数据;链路层:以太网首部,IP首部,TCP首部,HTTP数据
数据封装过程

1.3 HTTP相关协议

1、IP:网络层,把数据包给对方,两个重要的条件是 IP 地址和 MAC 地址。IP地址:节点被分配到的地址可变,MAC地址:网卡所属固定地址不可变,两者可进行配对
2、ARP:解析地址的协议,双方在同一局域网的情况很少,一般通过多个计算机和网络设备中转连接,下一个设备的MAC地址就是中转目标,根据IP地址查MAC,路由器是中转设备,发送端根据IP转MAC地址查到很多路由器,中转几次后会传到该IP地址的接收端
3、TCP:可靠的字节流服务,一定会向对方确认是否成功送达,传输层,将大数据分割为报文段
4、三次握手:发送端发一个带SYN标志的数据包给对方,接收端返回一个带SYN\ACK标志数据包表示产大确认信息,发送端返回带ACK标志的数据包表示握手结束。若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送
相同的数据包。
三次握手

5、DNS:域名到IP地址的解析服务,应用层,可查IP或者通过IP反查域名

1.4 各协议与HTTP协议关系

1、发送端告诉DNS域名,DNS告诉发送端IP地址
2、HTTP协议生成针对目标Web服务器的HTTP请求报文
3、TCP协议将HTTP请求报文按序号分割成报文段,将每个报文段可靠的传给对方,方便通信
4、IP协议搜索对方地址,一边中转一边传送,通过路由器
6、TCP协议在接收端接收报文并按序号重组
7、HTTP协议对请求内容进行处理
8、TCP\IP协议向用户回传请求结果到制定IP地址的服务器
各协议作用

1.5 URL与URI

1、URL:统一资源定位符,URI用字符串标识某一互联网资源,URL表示资源的地点,是URI的子集
2、URI:某个协议方案表示的资源的统一资源标识符,协议方案是访问资源所使用的协议类型名称,采用HTTP协议的时候,协议方案就是http,还有ftp、mailto、telnet、file等
3、URI表示:绝对URI,相对URL:从浏览器中基本URI处指定的URL,如/img/logo.gif,和绝对URL

1.6 绝对URI表示
http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1

绝对URI

1、http:(//)为协议方案明,使用其获取部分大小写,加冒号,也可以使用data:或javascript:脚本程序方案名
2、user:pass(@)为登录信息(认证),可选项
3、www.example.jp(:)为服务器地址必选项,可以使域名或者ipv4、ipv6地址
4、80为服务器端口号,省略则为默认端口号,可选项
5、/dir/index.htm为带层次的文件路径,来定位特定的资源
6、?uid=1为查询字符串,可选项
7、(#)ch1为片段标识符,标记已获取资源中的子资源,可选项

第二章 简单HTTP协议

2.1 请求报文

1、服务器端在没收到请求前不会发送响应
2、请求报文由请求方法、请求URI、协议版本、可选请求首部字段和内容实体构成
请求报文

POST /form/entry HTTP1.1

首部字段:

Host:hackr.jp
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Content-Length:16

内容实体

name=ueno&age=37
2.1 响应报文构成

服务器协议版本,请求的处理结果状态码,原因短语,创建响应的日期时间,是首部字段的一个属性,一行空格,资源实体的主体
响应报文

HTTP/1.1 200 OK
Date:Tue,10 Jul 2012 06:50:15 GMT
Content-Length:362

<html>...//主体
2.3 无状态

1、HTTP是无状态协议,不保存请求和响应之间的通信状态,不记录之前发的,不做持久化处理,为了快速处理大量事务,确保协议的可伸缩性,因此引入Cookie管理状态

2.4 请求URI定位资源

1、HTTP用URI让客户端定位到资源,发送请求时,URI需要将作为请求报文中的URI包含其中
URI在报文中

GET http://hackr.jp/index.htm HTTP1.2

或者

GET /index.htm HTTP1.2
Host: hackr.jp

若非访问特定资源,只是对服务器本身发送请求,可用*代替URI

OPTIONS * HTTP1.2
2.5 告知服务器意图的HTTP 方法

1、GET:请求访问已被URI识别的资源,指定资源经过服务器解析后返回响应结果,如CGI程序,返回执行后的输出结果
GET请求与响应
2、POST:传输实体的主体
POST
3、PUT:传输文件,就像 FTP 协议的文件上传一样,请求报文的主体中包含文件内容,保存到请求URI指定位置,不带验证机制,不太使用
PUT
4、HEAD:获取报文首部,不返回报文主体部分,用于确认URI 的有效性及资源更新的日期时间等。
HEAD

5、DELETE:根据请求URI删除指定资源,不带验证机制,与PUT相反
DELETE
6、OPTIONS:查询针对请求 URI 指定的资源支持的方法
OPTIONS

7、TRACE:追踪路径,让服务器将之前的请求返回给服务端,在Max-Forwards首部字段填入数值,每经过一个服务器数字减1,减到0停止继续传输,最后接收到请求的服务器返回200OK响应,用于查询发送出去的请求怎么被篡改(代理中转),不怎么用
TRACE

8、CONNECT:与代理服务器通信时建立隧道,用隧道协议进行TCP通信,SSL和TLS协议将内容加密,要求有代理服务器名称和端口号
CONNECT

2.6 持久连接节省通信量

1、每次HTTP请求要断开一次TCP连接,因此keep-alive,没有明确的断开连接则保持TCP连接状态
2、管线化:不用等待响应就直接发送下一个请求

2.7 Cookie

1、从服务器端发送的响应报文内Set-Cookie的首部字段信息,通知客户端保存Cookie,下一次客户端发送请求自动在报文中加入Cookie值,服务器端接收并检查是哪个客户端发的,对比服务器上的记录,得到之前的状态信息
第一次客户端到服务器端没有,第一次服务器端到客户端
Cookie的生成
携Cookie的报文

<Set-Cookie sid=777>

第二次客户端到服务器端

Get ...
Host ...
Cookie: sid=777

第三章 HTTP报文

3.1 构成

1、构成:报文首部、空行、报文主体(不一定有)
2、报文首部构成:请求/状态行,请求/状态首部字段,通用首部字段,实体首部字段
3、请求行:方法、URI、HTTP版本
4、状态行:状态码、原因短语、HTTP版本
5、首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般四种为通用首部、请求首部、响应首部和实体首部
HTTP报文构成
请求和响应报文
实例

3.2 编码提升传输速率

1、报文:HTTP通信基本单位,8位字节流组成,主体传输请求或响应的实体主体
2、实体:请求或响应的有效载荷数据,包括实体首部和主体
3、当编码后,实体主体变化,才导致上述两者不一样,一般是一样的
4、压缩传输的内容编码:内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。常用:gzip、compress、deflate、identity
内容编码的过程
5、分块传输编码:实体主体分块,由接受的客户端解码。请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。
每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。
分块传输编码过程

3.3 MIME 发送多种数据的多部分对象集合

1、发送多种数据的多部分对象集合:邮件多附件:MIME机制,要在首部字段加Content-type。
使用 boundary 字符串来划分多部分对象集合指明的各类实体。在boundary 字符串指定的各个实体的起始行之前插入“–”标记(例如:–AaB03x、–THIS_STRING_SEPARATES),而在多部分对象集合对应的字符串的最后插入“–”标记(例如:–AaB03x–、--THIS_STRING_SEPARATES–)作为结束。
multipart/byteranges
2、multipart/formdata,表单文件上传时候使用,用boundary字符串划分实体,boundary=“mm”,该实体起始行加–,--mm,结束后面也要加–,--mm–
3、multipart/byteranges,状态码206(Partial Content,部分内容)响应报文包含多个范围内容时候使用

3.4 获取部分内容的范围请求

1、谓恢复是指中断处恢复下载。要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请求叫做范围请求。
2、写法

Range: byte=5001-10000
Range: byte=5001-
Range: byte=0-30005001,000

3、响应码会返回206 Partial Content,首部字段Content-Type标明multipart/byterangs
4、服务器无法响应,返回200 OK和完整的实体内容

3.5 内容协商

1、返回最合适的内容,同一界面不同语言
2、首部字段是判断依据

Accept
Accept-Charset//字符集
Accept-Encoding//编码
Accept-Language//语言
Content-Language

3、三种类型:服务器驱动协商,客户端驱动协商(用户自行选择)、透明协商(两者结合)

第四章 HTTP状态码

4.1 状态码

1、从服务端返回的请求结果

2、1XX:信息性状态码,接受的请求正在处理

4.2 2XX成功

1、200 OK
2、204 No Content,请求成功处理,返回的响应报文不(允许)包含实体的主体部分,浏览器界面不更新,应用:给服务器发东西但是客户端自己不更新内容
3、206 Partical Content,范围请求,Content-Range指定范围的实体内容

4.3 3XX重定向

1、浏览器需要附加操作以完成请求
2、301 Moved Permanently永久性定向,请求资源被分配了新的URI,如加了书签,应按Local首部字段提示的URI重新保存
后面忘记加斜杠

http://example.com/sample

3、302 Not Found临时性重定向,已移动资源的URI未来还会发生改变
4、303 See Other 请求对应的资源存在另一个URI,应用GET定向获取
5、304 Not Modified 发送附带条件的请求,但未满足条件,不包含响应的主体
6、307 Temporary Redirect 临时重定向,与 302同,不会从POST变成GET,但浏览器不会这样

4.4 4XX客户端错误

1、400 Bad Request 请求报文中语法错误
2、401 Unauthorized 第一次弹验证框,第二次说明认证失败
3、403 Forbidden 被服务器拒绝,可在实体说明理由
4、404 Not Found 无法找到请求资源,或者不想说明理由

4.5 5XX服务器错误

1、500 Internal Server Error服务器执行请求发生错误,也有可能是 Web 应用存在的 bug 或某些临时的故障。
2、503 Service Unavailable 服务器超负载或停机,解决时间写入Retry-after首部字段

第五章 HTTP协作的Web服务器

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

1、一台HTTP服务器可搭建多个Web站点,如提供Web托管服务的供应商,用一台服务器给每位用户持有的域名运行不同的网站,用到的是虚拟主机的功能
2、虚拟主机约等于多台服务器,一台服务器IP同,域名不同,收到请求需要判断究竟是要访问哪个域名,所以要在Host首部完整指定主机或域名的URI

5.2 通信数据转发程序

1、代理:转发功能的应用程序,客户端和服务器的中间人
2、网关:转发其他服务器的服务器,它就像自己拥有资源的源服务器一样对请求进行处理。
3、隧道:客户端和服务器隔得特别远

5.3 代理

1、代理服务器:Via首部字段标记经过的主机信息,缓存服务器是代理服务器的一种,会向源服务器确认缓存资源的有效性,判断缓存失败从源服务器上获取新资源。
代理服务器
2、缓存代理:转发响应时,缓存代理会预先将资源的副本保存在代理服务器上,再次受到相同资源的请求时就不从源服务器获取资源,将之前的缓存资源返回。缓存服务器是代理服务器的一种,并归类在缓存代理类型中。
3、缓存:代理服务器或客户端本地磁盘内保存的资源副本。客户端的缓存:又称临时网络文件,当判定缓存过期后,会向源服务器确认资源的有效性。若判断浏览器缓存失效,浏览器会再次请求新资源。
3、透明代理:不对报文内容做任何加工的代理

5.4 网关

1、能使服务器提供非HTTP服务,可以加密,提高通信安全,可以连数据库查询数据

5.5 隧道

1、建立通信线路,不解析HTTP请求,请求保持原样中转给之后的服务器,双方断开连接时结束

第六章 HTTP首部

6.1 首部字段

通用
请求
请求
在这里插入图片描述
实体

6.2 通用首部字段
6.2.1 Cache-Control: 值说明

Cache-Control写法
请求
请求
请求
响应

6.2.1.1 表示是否能缓存的指令

1、private/public:响应只以特定的用户作为对象,这与 public 指令的行为相反
2、no-cache:(就是缓存服务器不缓存过期资源了,缓存会向源服务器进行有效期确认后处理资源,只经手)。防止从缓存中返回过期的资源。客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接收缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器。如果服务器返回的响应中包含 no-cache 指令,那么缓存服务器不能对资源进行缓存,源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。但是客户端可以使用缓存。无参数值的首部字段可以使用缓存,只能在响应指令中指定该参数。
服务器返回响应

服务器返回的响应中若指令带了参数值,客户端在接收到这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存。换言之,无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数。

6.2.1.2 控制可执行缓存的对象的指令

1、no-strore:暗示请求(和对应的响应)或响应中包含机密信息。不缓存。缓存不能在本地存储请求或响应的任一部分。

6.2.1.3 指定缓存期限和认证的指令

1、s-maxage(=xx(s)):与max-age的不同为是 s-maxage指令只适用于供多位用户使用的公共缓存服务器 ,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。直接忽略对 Expires 首部字段及 max-age 指令的处理
2、max-age(=xx(s)):0就是缓存服务器通常需要将请求转发给源服务器。
max-age
当客户端发送的请求中包含 max-age 指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源。当服务器返回的响应中包含 max-age 指令时,缓存服务器将不对资源的有效性再作确认,而 max-age 数值代表资源保存为缓存的最长时间。
3、min-fresh(=xx(s)):要求缓存服务器返回至少还未过指定时间的缓存资源。
4、only-if-cached:(只让缓存服务器返回缓存)客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回,缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码 504 Gateway Timeout。
5、must-revalidate:代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效,无法则504。忽略请求的 max-stale 指令。
6、no-transform:缓存不能改变实体主体的媒体类型,防止缓存或代理压缩图片。

6.2.1.4 扩展

cache-extension token
cache-extension 标记(token),可以扩展 Cache-Control 首部字段内的指令,仅对能理解它的缓存服务器来说是有意义的。

6.2.2 Connection

1、(Connection: 不再转发的首部字段名):控制不再转发给代理的首部字段
2、(Connection: close):默认持久连接,如果加上这一条就说明服务器明确想断开连接。
3、(Connection: Keep-Alive):一般都是这样。

6.2.3 Date

表明创建 HTTP 报文的日期和时间。
Date格式1
Date格式2
Date格式2

6.2.4 Trailer

用在分块编码传输,会事先说明在报文主体后记录了哪些首部字段
Trailer
指定首部字段 Trailer 的值为 Expires,在报文主体之后(分块长度 0 之后)出现了首部字段 Expires。

6.2.5 Transfer-Encoding

Transfer-Encoding:chunked规定了传输报文主体时采用的编码方式为分块传输编码。

6.2.6 Upgrade

检测 HTTP 协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议,需额外指定 Connection:Upgrade。

6.2.4 Via

1、追踪客户端与服务器之间的请求和响应报文的传输路径,可避免请求回环的发生。报文经过代理或网关时,会先在首部字段 Via 中附加该服务器的信息,然后再进行转发。
Via首部每次添加自身服务器信息
图中1.0 gw.hackr.jp(Squid/3.1)”, 1.0 是指接收请求的服务器上应用的 HTTP 协议版本
2、常和 TRACE 方法一起使用,代理服务器接收到由 TRACE 方法发送过来的请求(其中 Max-Forwards: 0)时,代理服务器就不能再转发该请求了。这种情况下,代理服务器会将自身的信息附加到 Via 首部后,返回该请求的响应。

6.2.5 Warining

告知用户一些与缓存相关的问题的警告
格式:
格式
实例:
实例
警告码

6.3 请求首部字段
6.3.1 Accept

可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。
媒体类型:
媒体类型
若想要给显示的媒体类型增加优先级,则使用 q= 来额外表示权重值 1,用分号(;)进行分隔。权重值 q 的范围是 0~1(可精确到小数点后 3位),且 1 为最大值。不指定权重 q 值时,默认权重为 q=1.0。
实例

6.3.2 Accept-Charset

用于内容协商机制的服务器驱动协商,来通知服务器用户代理支持的字符集及字符集的相对优先顺序。
实例

6.3.3 Accept-Encoding

来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次性指定多种内容编码。
内容编码格式
实例
可添加权重。
TE和他很像,但用于传输编码,可加Tailers作为分块传输编码方式
实例
实例

6.3.4 Accept-Language

来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。
实例

6.3.5 Authorization

告知服务器,用户代理的认证信息(证书值)。通常,想要通过服务器认证的用户代理会在接收到返回的 401 状态码响应后,把首部字段 Authorization 加入请求中。
实例

6.3.6 Expect

告知服务器,期望出现的某种特定行为。因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码 417 Expectation Failed。
实例
等待状态码 100 响应。

6.3.7 From

告知服务器使用用户代理的用户的电子邮件地址

6.3.8 Host

告知服务器,请求的资源所处的互联网主机名和端口号,区分运行在同一个 IP 上的虚拟主机。

6.3.9 If-

条件请求,只有判断指定条件为真时,才会执行请求。
1、If-Match:跟 ETag 值匹配一致时,服务器才会接受请求,否则412 Precondition Failed。If-Match:*,只要资源存在就处理请求。
实例
2、If-Modified-Since:如果在 If-Modified-Since 字段指定的日期时间后,资源发生了更新,服务器会接受请求(字段值与服务器 ETag 值一致),否则304 Not Modified。用于确认代理或客户端拥有的本地资源的有效性。(If-Unmodified-Since同If-Modified-Since,否则412 Precondition Failed)
实例
3、If-None-Match:与If-Modified-Since相反
4、If-Range:它告知服务器若指定的 If-Range字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。
实例

6.3.10 Max-Forwards

指定可经过的服务器最大数目
实例
实例

6.3.11 Proxy-Authorization

实例

告知服务器认证所需要的信息,认证行为发生在客户端与代理之间,客户端与服务器之间的认证,使用首部字段 Authorization 可起到相同作用。

6.3.12 Range

实例

只需获取部分资源的范围请求,告知服务器资源的指定范围,服务器在处理请求之后返回状态码为 206 Partial Content 的响应。无法处理该范围请求时,则会返回状态码 200 OK 的响应及全部资源。

6.3.13 Referer

实例

告知服务器请求的原始资源的 URI

6.3.14 User-Agent

传达浏览器的种类,将创建请求的浏览器和用户代理名称等信息传达给服务器。
实例

6.4 响应首部字段

1、Accept-Ranges:bytes处理范围请求,以指定获取服务器端某个部分的资源;none不能处理范围请求。
2、Age:x(s),告知客户端,源服务器在多久前创建了响应。若创建该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上首部字段 Age。
3、ETag:“xxxxxxx”,告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值。当资源更新时,ETag 值也需要更新。
强Etag:不论实体发生多么细微的变化都会改变其值;弱URI:只用于提示资源是否相同,只有资源发生了根本改变才会改变 ETag 值。值最开始处附加 W/。
4、Location:http:xxx.com。将响应接收方引导至某个与请求 URI 位置不同的资源,会配合 3xx :Redirection 的响应,提供重定向的 URI。
5、Proxy-Authenticate:Basic realm=“Usagidesign Auth”。把由代理服务器所要求的认证信息发送给客户端。
6、Retry-After:x(s)。告知客户端应该在多久之后再次发送请求。配合状态码 503 Service Unavailable 响应,或 3xx Redirect 响应一起使用。
7、Server:Apache/2.2.17 (Unix)。告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。
8、Vary:Accept-Language。当代理服务器接收到带有 Vary 首部字段指定获取资源的请求时,如果使用的 Accept-Language 字段的值相同,那么就直接从缓存返回响应。反之,则需要先从源服务器端获取资源后才能作为响应返回
实例
9、WWW-Authenticate:Basic realm=“Usagidesign Auth”。告知客户端适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)和带参数提示的质询(challenge)。状态码 401 Unauthorized 响应中,肯定带有首部字段 WWW-Authenticate。realm 字段的字符串是为了辨别请求 URI 指定资源所受到的保护策略

6.5 实体首部字段

1、Allow:GET, HEAD。当服务器接收到不支持的 HTTP 方法时,会以状态码 405 Method Not Allowed 作为响应返回通知客户端能够支持 Request-URI 指定资源的所有HTTP 方法。
2、Content-Encoding::gzip。告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行的压缩。内容编码方式:
内容编码
3、Content-Language:zh-CN。告知客户端,实体主体使用的自然语言。
4、Content-Length: 15000。表明了实体主体部分的大小(单位是字节)。对实体主体进行内容编码传输时,不能再使用 Content-Length。
5、Content-Location: http://www.hackr.jp/index-ja.html。给出与报文主体部分相对应的 URI。和首部字段 Location 不同,Content-Location 表示的是报文主体返回资源对应的 URI。
6、Content-MD5:“md5某值”。客户端会对接收的报文主体执行相同的 MD5 算法,然后与首部字段 Content-MD5 的字段值比较。
对报文主体执行 MD5 算法获得的 128 位二进制数,再通过 Base64 编码后将结果写入 Content-MD5 字段值。由于 HTTP 首部无法记录二进制值,所以要通过 Base64 编码处理。为确保报文的有效性,作为接收方的客户端会对报文主体再执行一次相同的 MD5 算法。计算出的值与字段值作比较后,即可判断出报文主体的准确性。
7、Content-Range:bytes 5001-10000/10000。能告知客户端作为响应返回的实体的哪个部分符合范围请求。
8、Content-Type:text/html; charset=UTF-8。说明了实体主体内对象的媒体类型。
9、Expires:Wed, 04 Jul 2012 08:26:05 GMT。将资源失效的日期告知客户端。缓存服务器在接收到含有首部字段 Expires 的响应后,会以缓存来应答请求,在 Expires 字段值指定的时间之前,响应的副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求资源。
源服务器不希望缓存服务器对资源缓存时,最好在 Expires 字段内写入与首部字段 Date 相同的时间值。
当首部字段 Cache-Control 有指定 max-age 指令时,比起首部字段 Expires,会优先处理 max-age 指令。
10、Last-Modified: Wed, 23 May 2012 09:59:55 GMT。 指明资源最终修改的时间。

6.6 为 Cookie 服务的首部字段

在这里插入图片描述

6.6.1 Set-Cookie

实例
字段属性
1、省略 expires 属性时,其有效期仅限于维持浏览器会话(Session)时间段内。这通常限于浏览器应用程序被关闭之前。一旦 Cookie 从服务器端发送至客户端,服务器端就不存在可以显式删除 Cookie 的方法。但可通过覆盖已过期的 Cookie,实现对客户端 Cookie 的实质性删除操作。
2、不会发生 Cookie 回收行为。当省略 secure 属性时,不论 HTTP 还是 HTTPS,都会对 Cookie 进行回收。
3、防止跨站脚本攻击(Cross-site scripting,XSS)对 Cookie 的信息窃取。
实例

6.6.2 Cookie

实例
首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。接收到多个 Cookie时,同样可以以多个 Cookie 形式发送。

6.7 其他首部字段
6.7.1 X-Frame-Options:

HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。
1、DENY :拒绝
2、SAMEORIGIN :仅同源域名下的页面(Top-level-browsingcontext)匹配时许可。

6.7.2 X-XSS-Protection:

HTTP 响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。
1、0:将 XSS 过滤设置成无效状态。
2、1:将 XSS 过滤设置成有效状态。

6.7.3 DNT:

用于 HTTP 请求首部,拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。
1、0:同意被追踪。
2、1:拒绝被追踪。

6.7.3 P3P:

用于 HTTP响应 首部,将个人隐私变成一种仅供程序可理解的形式。

6.8 首部字段分类

缓存代理和非缓存代理的行为对应两种类型
1、端到端首部:会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,它必须被转发。
2、逐跳首部:对单次转发有效,会因通过缓存或代理而不再转发,需提供Connection 首部字段。
逐跳首部
除这些外都是端到端首部。

第七章 确保 Web 安全的 HTTPS

7.1 HTTP局限
7.1.1 通信用明文不加密,内容可能会被窃听

解决方案:
1、通信加密,通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用,加密 HTTP 的通信
内容。用 SSL 建立安全通信线路之后,就可以在这条线路上进行 HTTP通信了。与 SSL 组合使用的 HTTP 被称为 HTTPS(HTTP Secure,超文本传输安全协议)。
2、内容加密,对报文主体加密。

7.1.2 不验证通信方的身份,可能遭遇伪装

解决方案:
SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。

7.1.3 无法证明报文完整性,可能已遭篡改

问题:
请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)
解决方案:
常用的是 MD5 和 SHA-1 等散列值校验的方法,以及用来确认文件的数字签名方法。
提供文件下载服务的 Web 网站也会提供相应的以 PGP(Pretty Good Privacy,完美隐私)创建的数字签名及 MD5 算法生成的散列值。PGP 是用来证明创建文件的数字签名,MD5 是由单向函数生成的散列值。不论使用哪一种方法,都需要操纵客户端的用户本人亲自检查验证下载的文件是否就是原来服务器上的文件。

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

1、不再用 http://,而是改用 https://,会出现一个带锁的标记
2、不是新协议,HTTP 通信接口部分用SSL和 TLS协议代替而已
3、HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了
4、HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
5、

7.2.2 SSL

1、SSL 采用一种叫做公开密钥加密(Public-key cryptography)的加密处理方式,近代的加密方法中加密算法是公开的,而密钥却是保密的,所以可以保持加密方法的安全性,加密和解密都会用到密钥。
2、加密和解密同用一个密钥的方式称为共享密钥加密、对称密钥加密。但这样容易在通信过程中密钥被攻击者窃听。
3、公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
4、公开密钥加密方式无法证明公开密钥本身就是货真价实的公开密钥,可以使用由数字证书认证机构(CAy)和其相关机关颁发的公开密钥证书。
5、数字证书认证机构的业务流程:服务器的运营人员向数字证书认证机构提出公开密钥的申请,数字证书认证机构对已申请的公开密钥做数字签名,分配这个已签名的公开密钥并将该公开密钥放入公钥证书后绑定在一起。
服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接称为证书。
接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证。
整个流程
6、可证明组织真实性的 EV SSL 证书
7、HTTPS 中还可以使用客户端证书。在登录网银时不仅要求用户确认输入 ID 和密码,还会要求用户的客户端证书,以确认用户是否从特定的终端访问网银。只能用来证明客户端实际存在,而不能用来证明用户本人的真实有效性。
8、如果使用 OpenSSL 这套开源程序,每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。但该服务器证书在互联网上不可作为证书使用。
9、SSL 慢。一种是指通信慢。另一种是指由于大量消耗 CPU及内存等资源,导致处理速度变慢。可使用SSL 加速器。

7.2.3 HTTPS 的安全通信机制

步骤
步骤 1: 客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
步骤 2: 服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证书。
步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。
步骤 5: SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
步骤 7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤 8: 服务器同样发送 Change Cipher Spec 报文。
步骤 9: 服务器同样发送 Finished 报文。
步骤 10: 服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。当然,通信会受到 SSL 的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。
步骤 11: 应用层协议通信,即发送 HTTP 响应。
步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP的通信。
在以上流程中,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。
流程

第八章 确认访问用户身份的认证

8.1 认证

1、核对信息:密码,动态令牌(仅限本人持有的设备内显示的一次性密码),数字证书(仅限本人(终端)持有的信息),IC卡(仅限本人持有的信息),生物认证:(指纹和虹膜等本人的生理信息)。
2、认证方式:BASIC 认证(基本认证),DIGEST 认证(摘要认证),SSL 客户端认证,FormBase 认证(基于表单认证),Windows 统一认证(Keberos 认证、NTLM 认证)。

8.2 BASIC认证

BASIC
步骤 1: 当请求的资源需要 BASIC 认证时,服务器会随状态码401 Authorization Required,返回带 WWW-Authenticate 首部字段的响应。该字段内包含认证的方式(BASIC) 及 Request-URI 安全域字符串(realm)。
步骤 2: 接收到状态码 401 的客户端为了通过 BASIC 认证,需要将用户 ID 及密码发送给服务器。发送的字符串内容是由用户 ID 和密码构成,两者中间以冒号(:)连接后,再经过 Base64 编码处理。(例子:假设用户 ID 为 guest,密码是 guest,连接起来就会形成 guest:guest 这样的字符串。然后经过 Base64 编码,最后的结果即是Z3Vlc3Q6Z3Vlc3Q=。把这串字符串写入首部字段Authorization 后,发送请求。)

步骤 3: 接收到包含首部字段 Authorization 请求的服务器,会对认证信息的正确性进行验证。如验证通过,则返回一条包含 Request-URI 资源的响应。

8.3 DIGEST认证

DIGEST
步骤 1: 请求需认证的资源时,服务器会随着状态码 401 Authorization Required,返 回带 WWW-Authenticate 首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(随机数,nonce)。
首部字段 WWW-Authenticate 内必须包含 realm 和 nonce 这两个字段的信息。客户端就是依靠向服务器回送这两个值进行认证的。
nonce 是一种每次随返回的 401 响应生成的任意随机字符串。该字符串通常推荐由 Base64 编码的十六进制数的组成形式,但实际内容依赖服务器的具体实现。
步骤 2: 接收到 401 状态码的客户端,返回的响应中包含 DIGEST 认证必须的首部字段 Authorization 信息。
首部字段 Authorization 内必须包含 username、realm、nonce、uri 和response 的字段信息。
其中,realm 和 nonce 就是之前从服务器接收到的响应中的字段。
username 是 realm 限定范围内可进行认证的用户名。
uri(digest-uri)即 Request-URI 的值,但考虑到经代理转发后 Request-URI 的值可能被修改,因此事先会复制一份副本保存在 uri 内。
response 也可叫做 Request-Digest,存放经过 MD5 运算后的密码字符串,形成响应码。
步骤 3: 接收到包含首部字段 Authorization 请求的服务器,会确认认证信息的正确性。认证通过后则返回包含 Request-URI 资源的响应。并且这时会在首部字段 Authentication-Info 写入一些认证成功的相关信息。

8.4 SSL 客户端认证

SSL 客户端认证则可以避免用户 ID 和密码被盗第三方冒充。需要事先将客户端证书分发给客户端,且客户端必须安装此证书。采用双因素认证(证书+密码)。
步骤 1: 接收到需要认证资源的请求,服务器会发送 Certificate Request报文,要求客户端提供客户端证书。
步骤 2: 用户选择将发送的客户端证书后,客户端会把客户端证书信息以 Client Certificate 报文方式发送给服务器。
步骤 3: 服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始 HTTPS 加密通信。

8.4 SSL 基于表单认证(常用)

1、不是在 HTTP 协议中定义的。通过服务器端的 Web 应用,将客户端发送过来的用户 ID 和密码与之前登录过的信息做匹配来进行认证。
2、一般会使用 Cookie 来管理Session(会话)
Cookie流程
步骤 1: 客户端把用户 ID 和密码等登录信息放入报文的实体部分,通常是以 POST 方法把请求发送给服务器。
步骤 2: 服务器会发放用以识别用户的 Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与 SessionID 绑定后记录在服务器端。向客户端返回响应时,会在首部字段 Set-Cookie 内写入 Session ID。为减轻跨站脚本攻击(XSS)造成的损失,建议事先在 Cookie内加上 httponly 属性。
步骤 3: 客户端接收到从服务器端发来的 Session ID 后,会将其作为Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以 Session ID 也随之发送到服务器。服务器端可通过验证接收到的 Session ID 识别用户和其认证状态。

第九章 基于 HTTP 的功能追加协议

9.1 HTTP 的瓶颈

1、一条连接上只可发送一个请求。
2、请求只能从客户端开始。客户端不可以接收除响应以外的指令。
3、请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。
4、发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
5、可任意选择数据压缩格式。非强制压缩发送。

9.2 Ajax

Ajax(Asynchronous JavaScript and XML, 异 步 JavaScript 与 XML 技术)是一种有效利用 JavaScript 和 DOM(Document Object Model,文档对象模型)的操作,以达到局部 Web 页面替换加载的异步通信手段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输的数据量会因此而减少。
Ajax 的核心技术是名为 XMLHttpRequest 的 API,通过 JavaScript 就能和服务器进行 HTTP 通信。

9.3 Comet

一旦服务器端有内容更新了,Comet 不会让请求等待,而是直接给客户端返回响应这是一种通过延迟应答,模拟实现服务器端向客户端推送(Server Push)的功能。Comet 会先将响应置于挂起状态。

9.4 SPDY

SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。SPDY 规定通信中使用 SSL。
SPDY
1、多路复用流、赋予请求优先级:通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。所有请求的处理都在一条 TCP 连接上完成,因此 TCP 的处理效率得到提高。给请求逐个分配优先级顺序,解决因带宽低而导致响应变慢的问题。
2、压缩 HTTP 首部
3、推送功能:支持服务器主动向客户端推送数据的功能,服务器可直接发送数据,而不必等待客户端的请求。
4、服务器提示功能:服务器可以主动提示客户端请求所需的资源,避免发送不必要的请求。

9.4 WebSocket

Web 浏览器与 Web 服务器之间全双工通信标准,建立在 HTTP 基础上的协议。具备推送功能,减少通信量。
WebSocket

9.5 Web 服务器管理文件的 WebDAV

对 Web 服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。
功能:创建、删除文件等基本功能,它还具备文件创建者管理、文件编辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的版本控制功能。

第十章 构建 Web 内容的技术

10.1 HTML\JS\DOM

1、DHTML:动态HTML(超文本标记语言,为了发送Web 上的超文本),通过调用客户端脚本语言 JavaScript对 DOM(Document Object Model,文档对象模型,操作 HTML 文档和 XML 文档的 API,可指定欲发生动态变化的 HTML 元素)进行操作,实现对HTML的 Web 页面的动态改造。

10.2 Web 应用

1、CGI,通用网关接口,Web 服务器在接收到客户端发送过来的请求后转发给程序(作用于动态内容)的一组机制。
2、Servlet,在服务器上创建动态内容的程序
区别

10.3 数据发布的格式及语言
10.3.1 XML(可扩展标记语言)

适用于记录数据结构,对于多种程序。用的是用标签分割而成的树形结构。

10.3.2 RSS(简易信息聚合,聚合内容)、Atom

发布新闻或博客日志等更新信息文档的格式的总称,两者都用到了 XML。

10.3.1 JSON(轻量级)

能够处理的数据类型有false/null/true/ 对象 / 数组 / 数字 / 字符串,这 7 种类型。

第十一章 Web 的攻击技术

11.1 攻击模式

1、以服务器为目标的主动攻击:攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。SQL 注入攻击和 OS 命令注入攻击。
2、以服务器为目标的被动攻击:利用陷阱策略执行攻击代码的攻击模式,攻击者不直接对目标 Web 应用访问发起攻击。

11.2 因输出值转义不完全引发的安全漏洞

实施 Web 应用的安全对策包括客户端的验证、Web 应用端(服务器端)的验证。Web 应用端(服务器端)的验证包括输入值验证和输出值转义。
验证

11.2.1 XSS(跨站脚本攻击)

XSS,通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML 标签或 JavaScript 进行的一种攻击。被动攻击。
其利用利用虚假输入表单骗取用户个人信息或脚本窃取用户的 Cookie 值。

11.2.2 SQL 注入攻击

针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。

11.2.3 OS 命令注入攻击

通过 Web 应用,执行非法的操作系统命令达到攻击的目的。

11.2.4 HTTP 首部注入攻击

攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
向首部主体内添加内容的攻击称为 HTTP 响应截断攻击。

11.2.5 邮件首部注入攻击

攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击。

11.2.6 目录(路径)遍历攻击

对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。

11.2.7 远程文件包含漏洞

当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的 URL 充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。

11.3 因设置或设计上的缺陷引发的安全漏洞
11.3.1 强制浏览

从安置在 Web 服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。

11.3.2 不正确的错误消息处理

Web 应用的错误信息内包含对攻击者有用的信息。包括Web 应用抛出的错误消息,数据库等系统抛出的错误消息。

11.3.3 开放重定向

对指定的任意 URL 作重定向跳转的功能,用户就会被诱导至那个 Web 网站。

11.4 因会话管理疏忽引发的安全漏洞

会话管理是用来管理用户状态的必备功能,指攻击者通过某种手段拿到了用户的会话ID。可通过窃听或 XSS 攻击,或过会话固定攻击(Session Fixation)强行获取(强制用户使用攻击者指定的会话 ID,被动攻击),话 ID 而接受。

11.5 其他安全漏洞

1、密码破解:穷举法与字典攻击(事先收集好的候选密码经过各种组合方式后存入字典)。对已加密密码的破解可用上二进行类推或者使用彩虹表(明文密码及与之对应的散列值构成的一张数据库表)、加密算法漏洞、拿密钥。
2、点击劫持:利用透明的按钮或链接做成陷阱,覆盖在Web 页面之上,也称界面伪装(iframe 页面)。
3、DoS 攻击:让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对象不仅限于 Web 网站,还包括网络设备及服务器等。多台计算机发起的 DoS 攻击称为 DDoS 攻击,通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
两种方式:通过攻击安全漏洞使服务停止。集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。
4、后门程序:开发设置的隐藏入口,可不按正常步骤使用受限功能。
三种类型:开发阶段作为 Debug 调用的后门程序、开发者为了自身利益植入的后门程序、攻击者通过某种方法设置的后门程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值