图解HTTP学习笔记

很早就被推荐这本书了,但是一直没看,后来发现才200多页,于是下定决心花几天时间看完,同时做备忘。

http不难,难的是要主动去学习

本书讲的是HTTP/1.1

该版本具有的方法有如下

方法说明支持的http版本个人注释
GET获取资源1.0    1.1客户端想要服务器的数据请求
POST传输实体主体1.0    1.1客户端向服务器发送数据
PUT传输文件1.0    1.1客户端向服务器发送文件
HEAD获得报文首部1.0    1.1客户端想要服务器的首部信息,即通信状态
DELETE删除文件1.0    1.1客户端想要删除某个文件
OPTIONS询问支持的方法1.1客户端询问服务器支持哪些方法
TRACE追踪路径1.1询问客户端到服务器的路径信息,是否有代理之类的
CONNECT要求用隧道协议连接代理1.1要求用隧道进行连接
LINK建立和资源之间的联系1.0
UNLINE断开连接关系1.0

HTTP报文由报文首部,报文主体组成,用空行隔开(CR+LF),报文主体不是必须的

HTTP状态码,一共有60多种,只介绍重要的14种

首先将其分类

1XX信息性,接收到的请求正在处理
2XX成功,请求正常处理完毕
3XX重定向,相应进行附加操作才能完成,比如说信息在其他位置
4XX客户端错误,客户端发送的请求有问题,服务器不知道怎么去处理,比如说语法错了
5XX服务器错误,客户端发来的请求没问题,但是服务器提交处理时出错了,比如说服务器内部出bug了

200 OK请求正常处理完成, 如果是GET请求,会带上实体,如果是HEAD请求,则没有实体(因为不需要)
204 No content请求正常处理完成,但是相应报文中没有实体,且不允许返回实体。用于确认收到客户端的数据用
206 Partial Content请求正常处理完成,且客户端进行了范围请求,即要了指定范围的数据Content-Range指定了范围
301 Moved Permanently请求的资源被永久分配到其他URI了,例如忘记加/,可以根据Location提示进行重新保存
302 Found请求的资源临时分配到其他URI了,这一次用新URI访问
303 See Other请求的资源临时分配到其他URI了,同时要求其用GET进行获取
304 Not Modified客户端发送请求但附带了条件,而服务器允许访问,但条件未满足,条件是If-Match,If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since中任意一个
307 Temporary Redirect客户端发送post请求返回307时,浏览器询问用户是否再次post
400 Bad Requeset客户端发送的报文有语法错误
401 Unauthorized发送的请求需要通过HTTP认证,或者认证失败了,初次收到会弹出认证窗口
403 Forbidden请求的资源拒绝访问
404 Not Found服务器没有请求的资源
500 Internal Server Error执行请求时发生错误,是服务器存在的问题
503 Service Unavailable服务器暂时处于超负荷或正在停机维护

通信转发程序

代理  网关 隧道

客户端是请求报文,服务器是响应报文

请求报文首部,     请求首部字段,通用首部字段,实体首部字段统称首部字段

首部字段提供报文主体大小,所使用的语言,认证信息等

首部字段由首部字段名和字段值组成,用冒号:隔开,

例如Content-Type:text/html       或者      Keep-Alive:timeout=15,max=100

请求行方法 URI   http版本,  客户端想要做什么,找谁,版本是什么?
请求首部字段补充请求的附加内容,客户端信息,相应内容相关优先级等
通用首部字段请求和响应都会用到的首部
实体首部字段补充资源内容更新时间等实体相关的信息
其他

相应报文首部

状态行
响应首部字段从服务器段向客户端返回响应报文时使用,补充响应的附加内容,或要求客户端附加内容
通用首部字段请求和响应都会用到的首部
实体首部字段补充资源内容更新时间等实体相关的信息
其他

详细的各个首部字段的内容

HTTP的缺点

通信使用明文,内容会被窃听

不验证身份,可能遭遇伪装

无法证明报文完整,可能篡改

可以通过SSL或TLS的组合使用,加密HTTP的通信内容。

与SSL组合使用的HTTP就是HTTTPS

内容的加密,对http协议内部传输的内容进行假名

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

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

1,首先使用公开密钥加密方式安全地交换     之后要用的共享密钥加密中要用的密钥

2,交换了共享密钥后,使用贡献密钥加密方式进行通信

但还是存在问题。在第一步时,需要证明收到的公开密钥就是原本服务器发行的公开密钥。这是引入由数字证书认证机构CA和其相关机关颁发的公开密钥证书。

1,首先服务器向数字证书认证机构提出公开密钥的申请。

2,数字证书认证机构在判明提出申请者的身份之后,对已申请的公开密钥做数字签名,分配已签名的公开密钥,并将这个公开密钥放入公钥证书后绑定。

3,服务器将数字证书认证机构颁发的公钥证书发给客户端。已进行公开密钥加密方式通信,公钥证书(数字证书,证书)

4,客户端接收到证书,利用数字证书认证机构的公开密钥,对证书的数字签名进行验证,验证通过。

说明认证服务器的公开密钥是真实的,公开密钥是值得信赖的。

在上述过程中,认证机关的公开密钥必须安全转交给客户端,所有浏览器会先在内部存好常用的认证机关的公开密钥。

HTTPs安全通信流程

1,客户端发送Client Hello报文开始SSL通信,报文中包含客户端支持的SSL的版本,加密组件(Cipher Suite)列表(加密算法,密钥长度等)

2,服务器,以Server Hello报文作为回应,报文中包含了SLL版本以及加密组件,就是根据客户端的内容选出来的

3,服务器发送Certificat报文,报文中包含公开密钥证书

4,服务器发送Server Hello Done报文通知客户端,最初阶段的SSL保守协商部分结束。

5,客户端以Client Key Exchange报文作为回应。报文中包含通信要用的随机密码串Pre-mastersecret,这个报文是用步骤3中的公开密钥加密过的。

6,客户端发送是Change Cipher Spec报文。报文提示服务器,这个报文之后会采用Pre-Master secret密钥加密

7,客户端发送Finished报文,该报文包含连接至今全部报文的整体校验值。

8,服务器同样发送Change Cipher Spec报文

9,服务器同样发送Finished报文。

10,客户端服务器都发了Finished报文,SLL连接建立了。接着就是客户端发送HTTP请求了

11,服务器发送HTTP响应

12,由客户端发送断开连接,发送close_notify报文。之后就是tcp fin关闭tcp连接

在以上流程中,应用层发送数据时会附带MAC报文摘要,差知报文是否被篡改。

HTTPS比HTTP慢2-100倍。

认值机制

http/1.1使用的认证方式

BASIC认证-基本认证

DIGEST认证-摘要认证

SSL客户端认证

FormBase认证-基于表单认证

BASIC认证

1,当请求的资源需要BASIC认证时,服务器会随状态码401返回带WWW-Authenticate首部字段的响应。

2,客户端接收到后,将用户id和密码发送给服务器,以冒号隔开,经过Base64编码处理,写入首部字段Authorization

3,服务器接受到首部字段Authorization请求后,验证通过,返回包含Request_URI资源的响应

DIGEST认证

采用质询响应方式进行认证。

一方发送认证要求给另一个方,使用从另一方接收到的咨询码计算生成响应码,

将响应码返回,进行认证

过程如下

1,客户端发送请求,服务器接受到后,发送临时咨询码,状态码401

2,客户端发送摘要以及由咨询码计算出来的响应码

3,认证成功后,返回状态码200,失败则401.

SSL客户端认证

要iu去客户端安装证书。

1,接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书。

2,用户选择将发送的客户端证书后,会把客户端证书信息以Client Certificate报文形式放个服务器

3,服务器验证客户端证书,领取证书内容的公开密钥,开始https加密通信。

注,在多数情况下SLL客户端认证会与基于表单认证组合形成双因素认证。

即用SSL认证客户端计算机,表单认证缺点用户本人行为。

表单认证

基于表单认证的规范尚未统一,一般使用Cookie来管理Session。

1,客户端把用户di和密码放入报文实体,以post方式发送给服务器,会使用https

2,服务器会发放用来识别用户的sessiong id,通过验证从客户端发送来的登录信息认证,把用户的认证状态与session id绑定

3,客户端接收到服务器发来的session id后,将其作为cookie存入本地,下次发送数据给服务器,将会带上session id。

WebSocket协议

web服务器和客户端建立websocket协议的通信连接之后,所有的通信都依靠这个专用协议来通信,

可以互相发送json,xml,html或图片等任意格式的数据。

特点:

1,推送功能

支持由服务器向客户端推送数据的推送功能,服务器可直接发送数据,而不必等待客户端的请求。

2,减少通信量

建立起websocket连接后,就一直保存连接状态。

为了实现websocket通信,需要用到http的upgrade首部字段,告知服务器通信协议改变,达到握手

成功握手确立WebSocket连接后,采用WebSocket独立的数据帧通信。

HTTP/2.0

2014年实现标准化

http2.0的目的是改善用户使用web时的速度体验,其围绕7项技术进行讨论,但后续可能会改变

压缩SPDY,Friendly
多路复用SPDY
TLS义务化Speed+Mobility
协商Speed+Mobility, Friendly
客户端拉拽(Client Pull)/服务器推送(Server Push)Speed+Mobility
流量控制SPDY
WebSocketSpeed+Mobility

HTTP speed + Mobility由微软起草的标准,建立在谷歌提出的SPDY与WebSocket的基础上。

Network-Frendly HTTP Upgrade主要是在移动端通信改善性能。

Web服务器管理文件的WebDAV

构建Web内容的技术

web使用各种技术,来呈现丰富的内容。

1,HTML超文本标记语言

web页面是由html写成的,经过浏览器解析构成网页

html版本尚未统一

2,CSS层叠样式表

指定html内各个原始

3,动态html

利用javascript实现动态改造,利用DOM可指定欲发生动态变化的html元素

dom是用以操作html文档和xml文档的api。

4,web应用

5,与web服务器及程序协作的cgi

cgi通用网关接口是指web服务器在接收到客户端发送过来的请求后转发给程序的一组机制。

使用cgi的程序叫做cgi程序,通常是用perl,php,ruby,c等编程语言实现。

6,servlet

能在服务器上创建动态内容的程序,是用java实现的接口。

7,可扩展标记语言xml

8,javascript衍生的轻量级应用json

json是一种以javascript的对象表示法为基础的轻量级数据标记语言,

Web的攻击技术

http协议本身没问题,大多数攻击冲着web站点来的

1,http不具备必要的安全功能

目前的web网站都会使用会话管理,而http不具备安全,加密的功能,因此开发协议自行设计管理会话的web应用,会存在很多bug。

2,客户端篡改请求

在http请求报文内加载攻击代码,就能发起对web应用的攻击,

通过url查询字段或表单,HTTP首部,cookie等途径把攻击代码传入,若web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。

3,针对web应用的攻击模式有两种

主动攻击,通过直接访问web应用,把攻击代码传入的攻击模式。

SQL注入,OS命令注入

被动攻击,利用圈套策略执行攻击代码,攻击者不直接对目标web应用访问发起攻击

1,感觉真诱使用户触发已设置好的陷阱,陷阱会启动发送已嵌入攻击代码的http请求

2,当用户不知不觉中招之后,用户的浏览器或邮件客户端就会出发这个陷阱。

3,中招后的用户浏览器会把含有攻击代码的http请求发送给作为攻击目标的web应用,运行攻击代码

4,执行完攻击代码,存在安全漏洞的web应用会成为攻击者的跳板,可能导致用户所持有的cookie等个人信息被窃取,用户权限遭恶意滥用。

跨站脚本攻击XSS 跨站点请求伪造CSRF

Dos攻击

让运行中的服务器呈停止状态的攻击,右视也叫做服务器停止攻击或拒绝服务攻击。

集中利用访问请求,造成资源过载

通过攻击安全漏洞使服务停止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值