- HTTP协议
决定了向用户提供应用服务时通信的活动
比如:FTP、DNS、HTTP
提供数据传输
比如:TCP、UDP
处理在网络上流动的数据包(网络传输最小单位)
比如IP协议
用来处理连接网络的硬件部分
发送端从应用层往下走,接收端则往应用层往上走 发送端每经过一层打上一个该层的首部信息 -> 封装encapsulate
接收端每经过一层把首部信息消去
IP协议的作用是把各种数据包传送给对方。 IP地址和MAC地址。 ARP协议(解析地址的协议)。
TCP协议把数据准确的传给对方,可以分割大数据。 为了准确传输,采用三次握手策略。
*三次握手(three-way handshaking)
发送端发送一个带有SYN(synchronize)标志的数据包给对方
接收端收到后,回传一个带有SYN/ACK标志的数据包表示确认信息
发送端再回传一个ACK(acknowledgement)标志的数据包,代表握手结束
DNS服务提供域名到IP地址之间的解析服务 发送端发送http://t66y.com/,DNS解析对应一个IP地址,然后访问服务器
http://t66y.com/ => URL 统一资源定位符(Uniform Resource Locator)
http://t66y.com/index.php => URI 统一资源标识符(Uniform Resource Idenitifier)
客户端:请求访问文本或图像等资源的一端
服务端:提供资源响应的一端
请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成
响应报文是由协议版本、状态码、状态码的原因短语、可选的响应首部字段和主体构成
使用HTTP协议,每当有新的请求发送,就会有新的响应产生
cookie可以保存状态
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获得报文首部
DELETE:删除文件
OPTIONS:询问支持的方法
HTTP/1.1默认持久连接
特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态
好处:减少重复连接和断开的开销,减轻服务器的负载,减少响应时间,提高速度
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态 Set-Cookie
报文首部和报文主体是由回车符和换行符(CR+LF)来划分,报文主体可以没有
可以通过压缩来提升传输效率
通用首部
Request URL:http://t66y.com/
Request Method:GET
Status Code:200 OK
Remote Address:127.0.0.1:1086
Referrer Policy:no-referrer-when-downgrade
请求报文
GET / HTTP/1.1
Host: t66y.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: __cfduid=db7678b2090563fd2573d39bd6ea46ab21494210787; 227c9_lastfid=22; 227c9_lastvisit=0%091509547246%09%2Fthread0806.php%3Ffid%3D22%26search%3D%26page%3D661
AlexaToolbar-ALX_NS_PH: AlexaToolbar/alx-4.0.1
响应报文
HTTP/1.1 200 OK
Date: Thu, 01 Feb 2018 11:42:28 GMT
Content-Type: text/html
Content-Length: 920
Connection: keep-alive
X-Powered-By: PHP/5.6.33
Vary: Accept-Encoding
Content-Encoding: gzip
Server: cloudflare
CF-RAY: 3e64a5c607a313cb-LAX
MIME多用途因特网邮件扩展(Multipurpose Internet Mail Extensions)是允许邮件处理文本、图片、视频等的数据
- multipart/form-data
Web表单上传文件使用
状态码 | 英文描述 | 类别 | 原因短语 |
---|---|---|---|
1XX | Informational | 信息性 | 接收的请求正在处理 |
2XX | Success | 成功 | 请求正常处理完毕 |
3XX | Redirection | 重定向 | 需要进行附加操作已完成请求 |
4XX | Client Error | 客户端错误 | 服务器无法处理请求 |
5XX | Server Error | 服务器错误 | 服务器处理请求出错 |
常见的状态码:
状态码 | 英文描述 | 描述 |
---|---|---|
200 | ok | 请求正常,响应信息会随方法不同而不同 |
204 | No Content | 响应报文不含实体的主体部分 |
206 | partial Content | 范围请求 |
301 | Moved Permanently | 永久性重定向 |
302 | Found | 临时性重定向 |
303 | See Other | GET方法临时重定向 |
304 | Not Modified | 服务端资源未改变 |
307 | Temporary Redirect | 临时性重定向 |
400 | Bad Request | 请求语法错误 |
401 | Unauthorized | 认证失败 |
403 | Forbidden | 服务器拒绝 |
404 | Not Found | 服务器没有请求的资源 |
499 | Nginx错误 | 客户端关闭了连接 |
500 | Internal Server Error | 服务器端执行请求错误 |
502 | Bad Gateway | 连接超时,请求太多,导致无法正常的响应 |
503 | Server Unavailable | 服务器超负载 |
504 | Gateway Time-out | 服务器超时 |
虚拟主机:一台服务器为多位客户服务
代理:扮演“中间人”角色,每层代理加上Via首部信息
网关:提供非HTTP协议服务,使得网络通信更加安全
隧道:使用SSL通信,保证安全性
服务器端缓存和客户端缓存,目的都是加快请求,具有有效期限
HTTP首部字段都是由首部字段名和字段值构成的,中间用冒号(:)分隔
4种:列举常见的
1.通用首部字段General
名字 | 说明 |
---|---|
Cache-Control | 控制缓存行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Transfer_Encoding | 指定报文主体的传输编码方式 |
Via | 代理服务器的相关信息 |
2.请求首部字段Request
名字 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型 |
Authorization | Web认证信息 |
Host | 请求域名 |
Referer | 原始请求方 |
User-Agent | HTTP客户端程序的信息 |
3.响应首部字段Response
名字 | 说明 |
---|---|
Etag | 资源的匹配信息 |
Location | 重定向至指定URI |
Server | 服务器信息 |
4.实体首部字段Entity
名字 | 说明 |
---|---|
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体的编码方式 |
Content-Type | 实体主体的媒体类型 |
Expires | 过期日期 |
通信使用明文,内容可能被窃听
不验证通信方的身份,因此可能遭遇伪装
无法证明报文的完整性,有可能已遭篡改
HTPPS 是身披SSL(Secure Socket Layer)的HTTP
认证多半是基于表单认证
BASIC认证(基本认证)
DIGSET认证(摘要认证)
SSL客户端认证
FormBase认证(基于表单认证)
HTTP是无状态协议,无法实现状态管理,因此我们用Cookie来管理Session
- 一条连接上只可发送一个请求
- 请求只能从客户端开始
- 请求、响应首部未经压缩就发生
- 发送冗余的首部
- 可任意选择数据压缩格式
Ajax(异步JavaScript和XML技术)操作DOM,以达到局部Web页面替换的异步通信手段
WebSocket是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,服务器和客户端都可以直接向对方发送报文
WebSocket是长连接,一直会保持状态,减少了连接开销
- 握手请求 Upgrade: websocket
- 握手响应 HTTP/1.1 101 Switching Protocols
CGI(通用网关接口)是指Web服务器在接收到客户端发过来的请求后转发给程序的一道机制,在CGI的作用下,程序会对请求内容作出相应的动作
CGI程序比如有Perl、PHP、Ruby、C
Servlet是一种能在服务器上创建动态内容的程序,是Java的一个接口,属于JavaEE
CGI每次接到请求,程序都要跟着重启一次,而Servlet运行在与Web服务器相同的进程中,因此受到负载较小
XML(可扩展标记语言)
RSS(简易信息聚合)
JSON(JavaScript Object Notion)包含false、null、true、对象、数组、数字、字符串7种类型
一份调查:SQL注入(39%)、XSS(15%)、phpMyAdmin(9%)、ZanCart(5%)、其他(32%)
主动攻击:攻击者直接访问Web应用进行攻击,代表SQL注入
被动攻击:利用圈套策略执行攻击代码,代表XSS(Cross-Site Script,跨站脚本攻击)、CSRF(Cross-Site Request Forgeries,跨站点请求伪造)
穷举法、字典攻击、彩虹表