了解Web及网络基础
使用HTTP协议访问Web
根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取资源文件等信息 ,从而显示出Web页面。通过发送请求获取服务器资源的Web浏览器等,都可称为客户端。 简单来说,Web是建立在HTTP协议上通信的。
HTTP的诞生
HTTP协议出现主要是为了解决文本传输的难题。 但是由于协议本身非常简单,于是在此基础上设想了很多应用方法,并投入使用。现在HTTP协议已经超出了Web这个框架的局限性,被运用到各种场景里。
网络基础TCP/IP
通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。
计算机与网络设备要相互通信,双方就必须基于相同的方法。把互联网相关联的协议集合起来总称为TCP/IP 。
TCP/IP协议族里重要的一点就是分层。按层次分为:应用层、传输层、网络层、数据链路层。
- 应用层:应用层决定向用户提供应用服务时通信活动。(TCP/IP协议族内预存了各类通用的应用程序。FTP(File Transfer Protocol,文件传输协议)和DNS服务就是其中两类。HTTP协议也在该层。 )
- 传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。(该层具有TCP、UDP)
- 网络层:处理网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了传输路线。
- 数据链路层:用来处理连接网络的硬件部分。
通信传输流程
首先,作为发送端的客户端在应用层发出一个想看某一网页的HTTP请求。
接着,为了传输的方便,在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层(IP)。
在网络层,增加作为通信目的地的MAC地址后转发给链路层。
接收端的话就是倒过来处理发送过来的数据。
与HTTP关系密切的协议:IP、TCP和DNS
- 负责传输的IP协议:IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是IP地址和MAC地址。
- 确保可靠性的TCP协议:TCP位于传输层,提供可靠的字节流服务。为了确保数据能达到目标,TCP协议采用了三次握手策略。
- 负责域名解析的DNS服务:DNS提供域名到IP地址之间的解析服务。
这里最后,用一张图片来概括前面的内容。

- 图片来自于《图解HTTP》这本书中,这里文章只做精华浓缩。
URI和URL
URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型的名称。URI用字符串标识某一互联网资源,而URL表示资源的地点。可见URL是URI的子集。
简单的HTTP协议
客户端发送给某个HTTP服务器端的请求报文中的内容。
Get /index.htm HTTP/1.1
Host: hackr.jp
起始行开头的get,表示请求访问服务器的类型,称为方法。
/index.html 指明了请求访问的资源对象。
最后HTTP/1.1,即HTTP版本号,用来提示客户端使用HTTP协议功能
所以这串报文的意思是:请求访问某台HTTP服务器上的/index.htm 页面资源。
请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

接收到请求的服务器,会将请求内容的处理结果以响应的形式返回。

HTTP是不保存状态的协议
HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进保存。也就是说,HTTP这个级别,不对发送过来的请求和响应做持久化处理。随着Web的发展,需要保证用户的信息一直维持才能继续进行操作,因此引入了Cookie。
请求URI定位资源
当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。
如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来代替请求URI。
告知服务器意图的HTTP方法
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获取报文首部
DELETE:删除文件
OPTIONS:询问支持方法
TRACE:追踪路径
CONNECT:要求用隧道协议连接代理
持久连接节省通信量
HTTP的初始版本,每进行一次HTTP通信,就要断开一次TCP连接。但是,随着现代Web传输的内容很大之后,如果多次造成无所谓的TCP连接建立和断开,增加通信量的开销。因此引入了持久连接的概念。持久连接使得多数请求以管线化 方式发送成为了可能。
HTTP报文内的HTTP信息
用于HTTP协议交互的信息被称为HTTP报文。HTTP报文可以分为报文首部和报文主体两个大部分。
请求报文的首部和响应报文的首部内容由以下数据组成。
- 请求行:包含用于请求的方法。
- 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
- 首部字段:包含请求和响应的各种条件和属性的各类首部(通用首部、请求首部、响应首部、实体首部)。
- 其他
编码提升传输效率
HTTP在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升效率。
- 报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。
- 实体:作为请求或响应的有效数据载荷被传输,其内容由实体首部和实体主体构成。
返回结果的HTTP状态码
状态码的作用是当客户端向服务器端发送请求时,描述返回请求的结果
状态码类别分类:
- 1XX Informational 接收的请求正在处理
- 2XX Success 请求正常处理完毕
- 3XX Redirection 需要进行附加操作以完成请求
- 4XX Client Error 服务器无法处理请求
- 5XX Server Error 服务器处理请求出错
与HTTP协作的Web服务器
在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时候,必须在Host首部内完整指定主机名或域名的URI。
通信数据转发程序:代理、网关、隧道
- 代理:接收客户端发送的请求并转发给服务器。
- 网关:转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。
- 隧道:在客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。
HTTP报文首部
在请求中,HTTP报文由方法、 URI、 HTTP版本、 HTTP首部字段等部分构成。
在响应中, HTTP报文由HTTP版本、状态码(数字和原因短语)、 HTTP首部字段三部分构成。
HTTP首部字段
使用首部字段是为了给浏览器和服务器提供报文主体的大小、所使用的语言、认证信息等内容。
HTTP首部字段是由首部字段名和字段值构成的,中间用":"分隔。
确保Web安全的HTTPS
HTTP的缺点:
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
HTTP无法确认通信方,但是SSL可以。SSL不仅提供了加密处理,而且还提供了一种称为证书的手段。
请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击叫做中间人攻击。
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS并非是应用层的一种新协议。只是HTTP 通信接口部分 用SSL 和 TLS 协议代替而已。
确认访问用户身份的认证
要认证的信息通常如下:
密码:只有本人才知道的字符串信息
动态令牌:仅限本人持有的设备内显示的一次性密码
数字证书:仅限本人(终端)持有的信息
生物认证:指纹和虹膜等本人的生理信息
IC卡等:仅限本人持有的信息
基于HTTP的功能追加协议
若想在现有的Web实现所需功能,以下这些HTTP标准将会称成为瓶颈:
- 一条连接上只可发送一个请求
- 请求只能从客户端开始,客户端不可以接收除响应以外的指令
- 请求/响应首部未经压缩就发送。首部信息越多延迟越大
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多
- 可任意选择数据压缩格式,非强制压缩发送
Web的攻击技术
- 在客户端即可篡改请求,在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。通过URL查询字段或者表单、HTTP首部、Cookie等途径把攻击代码传入,若这时候Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。
Web应用的攻击模式主要分为两种:
- 主要攻击
- 以服务器为目标的主动攻击
- 攻击者直接访问Web应用,把攻击代码传入攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。具有代表性的攻击是SQL注入攻击 和 OS命令注入攻击 。
- 被动攻击
- 以服务器为目标的被动攻击
- 被动攻击是指利用圈套策略执行攻击代码的攻击模式。
以上内容是仓促之下总结完的,具体内容可以去看这本书。