0x0 WHAT-什么是HTTP?

      HTTP是超文本传输协议,用来传输超越文本的一些信息,比如视频、音乐等

0x1 HOW-HTTP如何工作的

0x1.1 HTTP请求报文

      请求报文 = 请求行+请求消息头+空白行+请求正文
      请求行 = 请求方法+请求路径+版本号

  • 常见请求方法
    • get:直接请求资源
    • post:请求资源并且提交参数
    • head:向服务器发出指定资源的请求,只不过服务器将不传回资源的本文部分
    • put:上传文件
    • delete:删除请求的url所标识的资源
  • 常见请求消息头
    • User-Agent 用户浏览器
    • Host 目的域名
    • Referer 来自什么网站

0x1.2 HTTP应答报文

      应答报文=状态行+响应头部+响应正文
      状态行=协议版本+状态码+状态码的原因短语

  • 常见状态码
    • 1xx 信息性状态码:请求已经被服务器接收,接收的请求正在被处理
    • 2xx 成功状态码:正常处理
    • 3xx 重定向状态码
    • 4xx 客户端错误状态码
    • 5xx 服务器错误状态码
  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)

  • 常见响应头
    • server:服务器相关软件信息;apache
    • location:用于重定向
    • content-type:内容类型
    • content-encoding:压缩、编码格式
    • content-length:内容长度
    • connnetion:是否需要长久连接

0x1.3 http的工作过程

      在浏览器地址栏键入URL,按下回车之后会经历以下流程:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  5. 释放 TCP连接;
  6. 浏览器将该 html 文本并显示内容;

0x2 cooike和sessions

0x2.1 cooike

      HTTP是一个没有连接状态的协议,所以当每次传输完毕网页内容后,就会自动断开连接,所以当进为了避免出现,多次进行用户的登录的情况,设置了cooike来描述用户连接的状态和信息

  • web服务器通过在http响应消息中增加set-cooike响应头字段将cooike信息发给浏览器
  • 之后浏览器在每次访问服务器的时都会设置自己的cooike字段,用来告知服务器自己的信息

0x2.2 sessions

      使用cooike和URL参数将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多的话,就增大服务处理难度和网络传输效率
      session是一种将会话保存在服务器的一种技术,通过将唯一session id来标识一个会话,客户端每次传递的cooike参数只需要携带session id即可

0x2.3 cooike与sessions对比

  • cooike
    1. 存储在浏览器
    2. 安全性低
    3. 默认随着浏览器进程结束而结束,可以手动指定时间,浏览器结束后依然存在
  • sessions
    1. 存储在服务器,session太多影响服务器性能
    2. 安全性高
    3. 在指定时间过后会结束,未到指定时间会随着浏览器进程结束而结束

0x2.4 cooike的安全性

  • secure
    • 通过设置secure属性,只有在HTTPS连接中,才会传递cooike;http则不会
  • httponly
    • 只有通过http请求或者https请求才能查看cooike信息,防止xss攻击盗取cooike