图解http知识总结

图解http知识总结

[TOC]

HTTP/1.1虽然是无状态协议,

但为了实现期望的保持状态功能,于是引入了Cookie技术。有cookie再用http协议通信,就可以管理状态了。

HTTP/1.1的使用方法:

  • GET:获取资源
    GET方法用来请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。也就是如果是请求的资源的是文本,那就保持原样返回。如果是CGI(通用网关接口)那样的程序,那返回经过执行后的输出结果。
  • POST:传输实体主体
    post方法用来传输实体的主体
    虽然用get方法也可以传输实体的主体。但一般不用get方法进行传输。而是用post方法,虽说post的功能与get很相似,但post的主要目的并不是获取响应的主体内容。

GET与POST方式的区别:
GET与POST请求提交方式
从性能上来讲post请求比get请求消耗更多一些,用相同数据比较,get最多比post快两倍

  1. 在web程序上,get一般是URL提交请求如:demo.php?name=lee&age=100
    post 一般是web表单提交 如:

    两种头信息:查看方式:firebug-》网络
  2. 响应头信息:服务器返回的信息,客户端可以获取,但不可以设置
  3. 请求头信息:客户端发送的信息,客户端可以设置,但不可以获取
    1-1解决中文乱码问题,ajax返回的数据其实是utf-8的,最简单解决措施,全部设置为utf-8
    1-2特殊字符,需要通过encodeURLComponent来编码解决
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//get方式
<script type="text/javascript">
addEvent(document,'click',function(){
var xhr=creatXHR();
var url='demo.php?rand='+Math.random();
url=params(url,'name','lee');
url=params(url,'age',100);
alert(url);
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200){
//alert(xhr.getAllResponseHeaders()) ;//获取全部响应头信息
//alert(xhr.getResponseHeader('Content-Type'));//获取单个响应头信息
alert(xhr.responseText);
}else{
alert('获取数据错误!错误代号:'+xhr.status+',错误信息:'+xhr.statusText);
}
}
};
xhr.open('get',url+Math.random(),true);
xhr.send(null);
xhr.about();//取消异步请求,放在send()之前会报错,放在responseText()之前会得到一个空值
});
function params(url,name,value){
url+=url.indexOf==-1?'?':'&';
url+=encodeURLComponent(name)+'='+encodeURLComponent(value);
}
</script>
//post方式
addEvent(document,'click',function(){
var xhr=creatXHR();
var url='demo.php?rand='+Math.random();
url=params(url,'name','lee');
url=params(url,'age',100);
alert(url);
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200){
//alert(xhr.getAllResponseHeaders()) ;//获取全部响应头信息
//alert(xhr.getResponseHeader('Content-Type'));//获取单个响应头信息
alert(xhr.responseText);
}else{
alert('获取数据错误!错误代号:'+xhr.status+',错误信息:'+xhr.statusText);
}
}
};
xhr.open('post',url,true);//第一步改为post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');//第三步模仿表单提交
xhr.send('name=Lee&age=100');//第二步将名值放入send()方法里
xhr.about();//取消异步请求,放在send()之前会报错,放在responseText()之前会得到一个空值
});
function params(url,name,value){
url+=url.indexOf==-1?'?':'&';
url+=encodeURLComponent(name)+'='+encodeURLComponent(value);
}
  • PUT:传输文件
  • PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存在URI指定的位置。(存在安全性)
  • HEAD:获取报文首部
    HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性以及资源的更新的日期时间等。
  • DELETE:删除文件
    DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定的资源。
  • OPTIONS:询问支持的方法
    OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
  • TRACE:追踪路径
    TRACE方法是让WEB服务器端将之前的请求通信环回给客户端的方法
  • CONNECT:要求用隧道协议链接代理
    CONNECT方法要求与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经过网络隧道进行传输。

    使用Cookie的状态管理

    HTTP是无状态的协议,它不对之前发生过得请求和响应的状态进行管理,也就是说,无法根据之前的状态进行本次的请求处理。
    (假设要求登录认证的Web页面本身无法进行状态的管理即不记录已登录的状态,那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态)
    Cookie会根据从服务器端发送的响应报文中写入Cookie信息来控制客户端的状态。

保存资源的缓存

缓存是指代理服务器或客服端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。

  1. 缓存的有效时期
  2. 客户端的缓存
    ##为Cookie服务的首部字段
    Cookie的工作机制用户识别以及状态管理。
  3. 为Cookie服务的首部字段
  • Set-Cookie(响应首部字段 ):开始状态管理所使用的Cookie信息
  • Cookie(请求首部字段):服务器接受到的Cookie信息
  1. Set-Cookie字段的属性
  • expires属性(=DATE)Cookie的有效日期(若不明确指定则默认为浏览器关闭前为止)
    注意:一旦Cookie从服务器端发送至客户端,服务器端就不存在可以显示删除Cookie的方法。但可以通过覆盖已过期的Cookie,实现对客户端的Cookie的实质性的删除操作。
    *path属性(=PATH)将服务器上的文件目录作为Cookie的适用对象(若不能指定则默认为文档所在的而文件目录)
  • domain(=域名)作为Cookie适用对象的域名,(若不指定则默认为常见Cookie的服务器的域名)
    (不指定域名显得更加安全)
  • secure属性(只写上secure即可)仅在HTTPS安全通信时才会发送Cookie

    1
    Set-Cookie:name=value;secure
  • HttpOnly属性,其主要目的是为防止跨站脚本攻击(XSS)对Cookie的信息窃取。

    1
    Set-Cookie:name=value;HttpOnly

HTTP的缺点

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭到篡改
  • 窃听:对于收集互联网上的流动数据包(帧)解析工作,可交给抓包(Packet Capture)或者嗅探器(Sniffer)工具,如常见的:Wireshark
  1. 通信加密:HTTP协议没有加密机制,但可以通过SSL(安全套接层)或者TLS(安全层传输协议)的组合使用,加密HTTP的通信内容。(HTTP与SSL的组合使用被称为HTTPS(HTTP Secure),超文本传输安全协议)
  2. HTTP+加密+认证+完整性保护=HTTPS

    为什么不一直使用HTTPS

    原因:与纯文本通信相比,加密通信会消耗更多的资源(购买证书等)

    基于HTTP的功能的追加协议

  3. Ajax的解决办法
    是一种有效利用js和DOM的操作,以达到Web页面替换加载的异步通信手段。只更新页面的部分内容。
  4. Comet的解决办法
    一旦服务器端有内容更新,Comet不会让请求等待,而是直接给客户端返回响应。这是一种通过延迟应答,模拟实现服务器端向客服端推送的功能。
  5. 使用浏览器进行全双工通信的WebSocket

    与Web服务器及程序协作的CGI

    CGI(通用网关接口)是指Web服务器在接受到客户端发送过来的请求后转发给程序的一组机制。在CGI的作用下,程序会对请求内容做出相应的动作,使用CGI的程序叫做CGI程序,通常用Perl,php,ruby和c等编程语言编写而成。

    因Java而普及的Servlet

    (Servlet=Server+Applet)表示轻量服务程序
    Servlet是一种能子服务器上创建动态内容的程序。Servlet是用Java语言实现的一个接口,属于企业级Java(JavaEE,JavaEnterprise Edition)的一部分
    (Servlet常驻内存,因此每次请求的时,可启动相对进程级别更为轻量的Servlet,程序的执行效率从而变的更高)

    Web的攻击技术

    对Web应用的攻击模式有两种:主动攻击,被动攻击
  6. 以服务器为目标的主动攻击
    主动攻击:是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
  7. 以服务器为目标的被动攻击
    被动攻击:指利用圈套策略执行攻击代码的攻击模式。在被动攻击的过程中,攻击者不直接对目标Web应用访问发起攻击。
  8. 因输出值转义不完全引发的安全漏洞
    实施Web应用的安全对策课分为两个部分。
  • 客户端的验证
  • Web应用端(服务器端)的验证
  • 输入值验证
  • 输出值转义
  1. 跨站脚本攻击(XSS)指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或js进行的一种攻击。
    影响:
  • 利用虚假输入表单骗取用户的个人信息
  • 利用脚本窃取用户Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
  • 显示伪造的文章或图片
  1. 对用户Cookie的窃取攻击
  2. SOL注入攻击
    (1)会执行非法SQL的SQL注入攻击
    影响:
  • 非法查看或篡改数据库内的数据
  • 规避认证
  • 执行和数据库服务器业务关联的程序等
  • SQL注入攻击破坏SQL语句结构的案例
  1. OS命令注入攻击
    指通过Web应用,执行非法的操作系统命令达到攻击目的。只要在能调用Shell函数的地方就有存在被攻击的风险。
  2. HTTP首部注入攻击
    是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或者主体的一种攻击。属于被动攻击模式。 向首部主题内添加内容的攻击称为HTTP响应截断攻击。
    影响:
  • 设置任何Cookie信息
  • 重定向至任意URL
  • 显示任意的主体(HTTP响应截断攻击)
  1. HTTP响应截断攻击
  2. 邮件首部注入攻击
  3. 目录遍历攻击
  4. 远程文件包含漏洞
  5. 因设置或设计上的缺陷引发的安全漏洞
  6. 不正确的错误消息处理
  7. 开放重定向
  8. 因会话管理疏忽引发的安全漏洞
  9. 会话固定攻击
  10. 跨站点请求伪造(CSRF)
  11. 其他安全漏洞
  • 密码破解(穷举法/暴力破解法,字典攻击)
  • 点击劫持
  1. DoS攻击
    DoS攻击是一种让运行中的服务呈停止状态的攻击,有时也叫做服务停止攻击或者拒绝服务攻击。
    DoS攻击方式:
  • 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也呈停止状态。
  • 通过攻击安全漏洞使服务停止
  1. 后台程序
文章目录
  1. 1. 图解http知识总结
    1. 1.1. HTTP/1.1虽然是无状态协议,
    2. 1.2. HTTP/1.1的使用方法:
    3. 1.3. 使用Cookie的状态管理
    4. 1.4. 保存资源的缓存
    5. 1.5. HTTP的缺点
    6. 1.6. 为什么不一直使用HTTPS
    7. 1.7. 基于HTTP的功能的追加协议
    8. 1.8. 与Web服务器及程序协作的CGI
    9. 1.9. 因Java而普及的Servlet
    10. 1.10. Web的攻击技术
|