web及网络基础

1、IP、TCP和DNS

  1. 负责传输的IP协议
    IP(Internet Protocol)网际协议位于网络。 IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会更改。

  2. 确保可靠性的TCP协议
    TCP位于传输层,提供可靠的字节流服务。TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。

  1. 发送端首先发送一个带SYN标志的数据包给对方。
  2. 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
  3. 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。

  4. 负责域名解析的DNS服务
    DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务

2、 URI和URL区别

  1. 与URI(统一资源标识符)相比,我们更熟悉URL(UniformResource Locator,统一资源定位符)。URL正是使用Web浏览器等访问Web页面时需要输入的网页地址
  2. URI就是由某个协议方案表示的资源的定位标识符,采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等
  3. URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集

HTTP报文

报文结构

请求报文(上)和响应报文(下)的结构
上图:请求报文(上)和响应报文(下)的结构
请求报文(上)和响应报文(下)的实例
上图:请求报文(上)和响应报文(下)的实例

编码提示传输速率

介绍

  1. 报文(message): 是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输。
  2. 实体(entity): 作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成

通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异

压缩传输的内容编码(Content-Encoding)

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。常用的内容编码有:gzip、deflate

分割发送的分块传输编码(Transfer-Encoding)

在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)

优点:

  1. 分块编码有利于一边进行压缩一边发送数据,而不是先完成压缩过程以得知压缩后数据的大小
  2. 分块传输编码允许服务器在最后发送消息头字段,利于WEB性能优化的TTFB指标;(不依赖头部的长度content-length信息,也能知道实体的边界)
  3. HTTP分块传输编码允许服务器为动态生成的内容维持HTTP持久链接。通常,持久链接需要服务器在开始发送消息体前发送Content-Length消息头字段,但是对于动态生成的内容来说,在内容创建完之前是不可知的。

Content-Encoding 和 Transfer-Encoding: chunked

在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,报文中的实体需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的 CRLF(\r\n),也不包括分块数据结尾的 CRLF。最后一个分块长度值必须为 0,对应的分块数据没有内容,表示实体结束。
Content-Encoding 和 Transfer-Encoding 二者经常会结合来用,其实就是针对进行了内容编码(压缩)的内容再进行传输编码(分块)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
telnet 106.187.88.156 80

GET /test.php HTTP/1.1
Host: qgy18.com
Accept-Encoding: gzip

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 03 May 2015 17:25:23 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip

1f
�H���W(�/�I�J

0

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

HTTP协议中也采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用。

  1. multipart/form-data: 在Web表单文件上传时使用。
  2. multipart/byteranges: 状态码206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用。

    状态码

204(No Content)

该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分

206(Partial Content)

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容

301

永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。

也就是说,如果已经把资源对应的URI保存为书签了,这时应该按Location首部字段提示的URI重新保存。

302

临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

和301 Moved Permanently状态码相似,但302状态码代表的资源不是被永久移动,只是临时性质的。换句话说,已移动的资源对应的URI将来还有可能发生改变。

304

服务器端资源未改变,可直接使用客户端未过期的缓存。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系

400(Bad Request)

该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。

401(Unauthorized)

该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。

403( Forbidden)

未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)等列举的情况都可能是发生403的原因

500(Internal Server Error)

该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障

502(Bad Gateway)

服务挂了(作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应)

503(Service Unavailable)

该状态码表明服务器暂时处于超负载或正在进行停机维护(请求人数太多,服务器为了自保,拒绝用户访问),现在无法处理请求

504(Gateway Time-out)

是指服务器作为网关或代理,但是没有及时从上游服务器收到请求 (可能是nginx或者后端配置参数错误或者不合理)

web安全

web攻击技术

主动攻击

主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击

被动攻击

被动攻击模式中具有代表性的攻击是跨站脚本攻击(xss)和跨站点请求伪造(csrf)

其他安全漏洞

密码破解

点击劫持

点击劫持(Clickjacking)是指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段

Dos攻击

DoS攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。

  1. 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态
  2. 通过攻击安全漏洞使服务停止