web及网络基础
1、IP、TCP和DNS
负责传输的IP协议
IP(Internet Protocol)网际协议位于网络。 IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会更改。确保可靠性的TCP协议
TCP位于传输层,提供可靠的字节流服务。TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。
- 发送端首先发送一个带SYN标志的数据包给对方。
- 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。
负责域名解析的DNS服务
DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务
2、 URI和URL区别
- 与URI(统一资源标识符)相比,我们更熟悉URL(UniformResource Locator,统一资源定位符)。URL正是使用Web浏览器等访问Web页面时需要输入的网页地址
- URI就是由某个协议方案表示的资源的定位标识符,采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等
- URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集
HTTP报文
报文结构
上图:请求报文(上)和响应报文(下)的结构
上图:请求报文(上)和响应报文(下)的实例
编码提示传输速率
介绍
- 报文(message): 是HTTP通信中的基本单位,由8位组字节流(octet sequence,其中octet为8个比特)组成,通过HTTP通信传输。
- 实体(entity): 作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异
压缩传输的内容编码(Content-Encoding)
内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。常用的内容编码有:gzip、deflate
分割发送的分块传输编码(Transfer-Encoding)
在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)
优点:
- 分块编码有利于一边进行压缩一边发送数据,而不是先完成压缩过程以得知压缩后数据的大小
- 分块传输编码允许服务器在最后发送消息头字段,利于WEB性能优化的TTFB指标;(不依赖头部的长度content-length信息,也能知道实体的边界)
- 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
18telnet 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协议中也采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用。
- multipart/form-data: 在Web表单文件上传时使用。
- 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)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。
- 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态
- 通过攻击安全漏洞使服务停止