HTTP协议分析(请求与响应以及Cookie、Session)

HTTP

  • HTTP是什么
  • HTTP请求与响应
    • HTTP处理过程:
    • HTTP请求
    • HTTP响应
  • 状态与会话
    • Cookie
    • Cookie的安全属性
    • Session

HTTP是什么

  1. HTTP:超文本传输协议,基于TCP,C/S架构,工作在应用层,是一个简单的请求→响应协议,无状态,无验证,简洁高效快速传输资源。常用端口号80/8080
  2. Web服务基于TCP,为了能够让服务器能随时响应客户端的HTTP请求,服务器需要监听80端口,这样浏览器就可以和服务器之间通过http协议进行通信

HTTP请求与响应

HTTP处理过程:

  1. 客户端与服务器建立连接(TCP三次握手)
  2. 客户端向服务器发出请求获取资源
  3. 服务器接收请求,并根据请求返回相应的资源/文件作为响应
  4. 客户端与服务器关闭连接(TCP四次挥手)

HTTP请求

HTTP请求报文格式
HTTP协议分析(请求与响应以及Cookie、Session)_第1张图片

  1. 请求行请求方法(GET/POST/HEAD/PUT…)+ 路径 + 请求版本
    →常用的HTTP请求方法←

GET方法一般不带数据,POST一般会带有数据如登录的相关信息

  1. 请求头:或者说是这个报文的特征
    →HTTP请求头介绍←

比如 HOST:www.test.com 表示请求目标的服务器域名是www.test.com
比如 User-Agent:是客户端基本信息,操作系统、版本…
还有Referer、Cookie、Accept等

  1. 请求正文:Data,这部分可有可无,但是前面的请求行、请求头一定会有

HTTP响应

HTTP响应报文格式
HTTP协议分析(请求与响应以及Cookie、Session)_第2张图片

  1. 响应行

格式:HTTP + 版本 + 状态码

状态码:
1xx:信息提示,请求已经接收成功,继续处理
2xx:请求成功提交(最常见的就是200)
3xx:客户端访问被重定向到其他资源(常见的302状态,比如AC上网行为管理进行身份认证的时候,会重定向到认证界面)
4xx:客户端错误码,可能是格式错误,或者是资源不存在等问题(404:请求资源不存在,401请求未经授权,403服务器拒绝提供服务)
5xx:服务器内部错误(服务器不能处理当前的请求)

  1. 响应头
    常见响应头:Server、Location、Content-Type、Content-Encoding等
    →常见HTTP响应头介绍←
  2. 响应正文
    即客户端请求的网页资源,与HTTP请求对应

状态与会话

HTTP本身是无状态的,那么要怎么才能实现辨别用户身份,当前登录过一次网站之后,有一段时间内可以免登录,暂时保存/永久保存登录信息呢?或者说A与服务器建立连接通信,当几天后再次连接,服务器怎么知道A曾经与自己连接过,进行过通信呢?

Cookie

  • Cookie是一种在客户端保持HTTP状态信息的技术

  • 在浏览器访问Web服务器某个资源的时候,Web服务器在响应报文头附带传送给浏览器一段数据(就是cookie),而且每个客户端每个浏览器的数据可以是各不相同的。

  • 一旦浏览器保存了某个Cookie,那么以后每次访问服务器时,都会在HTTP请求头中将这个Cookie回传给服务器

  • Web服务器怎么给客户端发Cookie的呢?服务器通过在HTTP响应头中增加Set-Cookie:字段,而浏览器则通过HTTP请求头增加Cookie字段回传

  • 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称NAME和值VALUE
    浏览器一般只允许存300个Cookie,每个站点最多存20个,每个Cookie大小限制4KB
    HTTP协议分析(请求与响应以及Cookie、Session)_第3张图片
    Cookie功能特点:

    1. 存储于HTTP头部
    2. 写时带属性,读时无属性
    3. 属性:name/value/expire/domain/path/httponly…
    4. 三元组[name,domain,path]唯一确定cookie
    5. 唯一确定!=cookie唯一

    Cookie请求头字段

    • Cookie请求字段中每个Cookie之间用逗号,或者分号;隔开

    • Cookie请求字段除了必须有“名称=值”的设置外,还可以有其它如Version、Path、Port等属性,但是多加的属性名之前要用"$"符号作前缀,而且顺序必须在“名称=值”之后(Version属性只能出现一次,而且位于Cookie请求头字段设置值的最前面

    • 举例

      Cookie:$ Version=1;$ Course=Java;$ Path=/hello/lesson;

Cookie的安全属性

  • secure属性
    • 当设置为true ,Cookie会被以安全形式传输,也就事只能在HTTPS连接中被浏览器传递到服务器进行会话验证,如果是HTTP连接,就不会传递,这样的话就无法窃取到Cookie的具体内容
  • HttpOnly属性
    • 如果设置了该属性,那么通过程序(JS脚本/Applet等)就无法获取到Cookie信息,可以有效防XSS攻击
    • secure属性是防止信息传递过程中被监听捕获造成泄漏;HttpOnly属性是防止程序获取cookie后进行攻击
  • 这两个属性不能解决cookie在本机出现的信息泄露,比如FireFox的插件FireBug可以直接看到cookie信息

Session

什么是Session?
它是一种讲会话状态保存在服务器的技术。使用cookie和附加URL参数都可以讲上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,会增大服务器的负担。

  • 客户端需要接收、记忆、回传Session会话标识号,通常借助cookie来传递会话标识号
    • 使用cookie+Session维持会话状态

客户端第一次访问服务器,服务器分出一个sessions来记录客户端身份和状态并且sessions分配一个唯一的sessionID

服务器将session ID 作为内容发给客户端,以设置cookie

客户端下次访问,携带cookie在请求报文内

服务器通过cookie内的sessionID字段来找到记录客户端状态的sessions

  • 这样做的优点:更安全,解决cookie无法记录太多状态信息的短板
  • 缺点:对服务器压力大,因为记录状态 查询状态都在服务器,对此sessions会进行过期操作,对于一段时间内未使用的,会进行过期删除

这里做一个cookie和session的对比

  1. 存储位置不同:cookie存储在客户端,安全性稍弱,session存在服务器,较安全,但太多就会影响服务器性能。
  2. 生命周期不同:cookie默认情况下随着浏览器进程结束也就结束了,但是如果手动指定时间,也不会受到浏览器关闭的影响;而session在指定的生命周期到了之后才会结束,不到指定时间,也会随着浏览器关闭而结束

你可能感兴趣的:(Web安全,web,http)