特性:
1.建于TCP/IP协议上,端口80.
2.无连接(没有任何预先联系就发送消息,每次连接只处理一个请求)
3.无状态(服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息)
HTTP报文
请求报文
HTTP定义了与服务器交互的各种方法,基本有4种:GET、POST、PUT、DELETE。URL全称资源描述符。一个URL地址,描述一个网络资源,GET、POST、PUT、DELETE 则对应着查、改、增、删。
1.GET用于信息获取,不会修改原有信息,对同一URL进行多次请求,结果一样 提交的数据量受URL长度限制。因为请求信息放在URL里。这导致GET请求容易被他人获取
2.POST可能修改服务器的资源请求。提交的数据量理论上无大小限制,但服务器一般会进行限制。请求信息放在HTTP爆的包体里
响应报文
和HTTP请求一样,有三部分组成
状态行
响应头
响应正文
状态行由协议版本、数字形式的状态代码、控状态描述组成,以空格分隔。
条件GET
优点:减少带宽浪费。
使用时机:客户端再次访问某资源。
使用方法:客户端向服务器发送一个包,询问是否更新了资源。若没有,就使用本地缓存;若更新就发送更新的资源给客户端。
持久连接
HTTP采用“请求-应答”模式,若不使用Keep-Alive模式,每个请求-应答客户端和服务器都要重新建一个连接,完成再断开。(HTTP协议为无连接协议)
使用Keep-Alive时,客户端和服务器建立的连接持续有效。
HTTP1.0中,没有官方规定Keep-Alive实际上是被附加到HTTP1.0协议中的。若客户端支持Keep-Alive,HTTP请求头中加入Connection:Keep-Alive,客户端收到后,在响应头中添加Connection:Keep-Alive。这样HTPP连接就会被保持,不会断开(超过Keep-Alive规定时间或地震、火灾等意外事件除外)。
HTTP1.1默认所有连接都被保持,若加入Connection:close才关闭,现在大部分浏览器都使用HTTP1.1协议
注意:Keep-Alive不能保证连接一定是活跃的,但连接关闭时会收到通知。所有不能让程序依赖Keep-Alive的保持连接特性。
HTTP管线化 (HTTP Pipelining)
默认情况下HTTP协议传输层连接只能承载一个HTTP请求和响应,浏览器在收到上一个请求的响应后,再发送下一个请求。使用持久连接,连接的消息传递如下:请求1->响应1->请求2->响应2->请求3...
HTTP Pipelining是将多个HTTP请求整批提交的技术,传送过程不需要等待服务器回应 :请求1->请求2->请求3->响应1->请求2->响应3.
注意
光纤化HTTP/1.0不支持
只有GET和HEAD请求可以管线化,post有限制
初次创建连接不要用管线化,因为服务器不一定支持HTTP1.1协议版本
开启管线化很可能不会有大幅的性能提升
会话跟踪
会话:客户端与服务器的连接发出请求到服务器响应客户端的请求的全过程
会话跟踪:对同一个用户对服务器的连续的请求和接受响应的监视。
作用:HTTP是无状态协议,不能保存信息,不能判断是否是同一个用户。会话跟踪可以实现
常用方法:
1.URL重写:在URL结尾附加数据标识该会话,便于服务器识别
2.隐藏表单域:将会话ID添加到HTML表单元素中提交到服务器。此表单元素不在客户端显示
3.Cookie:Cookie是Web服务器发给客户端的一小段信息,客户端请求时读取该信息发送到服务器端,以此识别用户。客户端每次请求,服务器都会发送Cookie,客户端进行保存,以便下次使用。
保存Cookie有两种:1。保存在客户端内存,临时Cookie,浏览器关闭后Cookie消失,2.保存在磁盘里,永久Cookie。
Cookie可以被禁止的
4.Session 每个用户都有不同的Session,用户不能共享。Session可以存放信息,服务器端创建一个session对象,将这个sessionI放入到Cookie中发送到客户端,下次访问,对session就行识别。
若Cookie被禁止,Session也不能用
跨站攻击
CSRF(跨站请求伪造)
伪造请求,冒充用户在站内支持操作。
CSRF应对方法
关键操作只 接受POST请求
验证码
Token
Token使用原则:
1.token不可测算。
2.Token一次性
3.Token注意保密,敏感操作用POST,防止出现在URL中
注意:过滤请求的来源,而不是过滤用户的输入内容