网络 —— HTTP相关知识

文章目录

  • 网络 —— HTTP相关知识
    • 简介
      • 主要特点
      • http1.0与http1.1 区别
      • HTTP 请求结构
      • HTTP 响应结构
      • HTTP 请求与响应步骤
        • 问题延展
          • 在浏览器地址栏键入URL,按下回车之后经历的流程?
      • HTTP 状态码
      • 1xx
      • 2xx
      • 3xx
      • 4xx
      • 5xx
    • GET请求和POST请求区别
    • Cookie和Session区别
      • Cookie 简介
      • Cookie的设置以及发送过程
      • Session 简介
      • Session 实现方式
      • Cookie 与 Session 区别

网络 —— HTTP相关知识

简介

http协议:超文本传输协议,属于应用级协议,请求与响应模式的无状态应用层协议,常用于TCP的连接方式,http1.1版本中给出一种持续连接的机制Keep-Alive,大多数web开发都是构建在http协议下的web应用。

主要特点

  • 支持客户/服务器模式,如下图所示:
    网络 —— HTTP相关知识_第1张图片
  • 简单快速
    客户端请求服务器,只需传递请求路径和请求方法,请求方法常用有GET、POST、PUT,每种请求方法规定客户端与服务器联系的类型不同,由于http协议简单,使得http服务器的程序规模小,因此通信速度快
  • 灵活
    http允许传输任意类型的数据对象,正在传输的数据通过“content-type”标记
  • 无连接
    限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答之后即断开连接,采用此方式可节省传输时间,http1.1起,默认启用长连接,即服务器需要等待一定时间后,才会断开连接,以保证长连接的特性
  • 无状态
    http协议是无状态协议,无状态:协议对于事务处理没有记忆能力,缺少状态,意味着如果后续处理需要前面信息,则必须重传,这可能导致每次连接传送的数据量增大

http1.0与http1.1 区别

最为明显的区别是1.1引入了Keep-Alive这项长连接技术


注意:本博客内容以http1.1为主讲解。


HTTP 请求结构

网络 —— HTTP相关知识_第2张图片


根据图中表示,主要结构分为以下 三部分

  • 请求行
    请求行包括三个部分
    • 请求方法
      常见的POST、GET、PUT方法
    • URL
    • 协议版本
      http1.0或http1.1

  • 请求头部
    由若干个报头组成, 每个报头通过 “头部字段名 |‘冒号’ ‘空格’|值”表示,常见的请求头有:
    • content-type
    • charset

  • 请求正文
    即数据体,数据体只在post形式中用到,数据体与头部之间,是有一个空行(图中‘回车符、换行符’)的,空行代表请求行与请求头部已经结束,后面的是请求正文

HTTP 响应结构

网络 —— HTTP相关知识_第3张图片


包含以下三个部分:

  • 状态行
  • 响应头部
  • 响应正文

HTTP 请求与响应步骤

  • 1.客户端连接到Web服务器
    建立一个tcp套接字连接。
  • 2.发送HTTP请求
    通过tcp套接字客户端向服务器发送一个文本的请求报文。
  • 3.服务器接收请求并返回HTTP响应
    之后服务器接收到客户端请求,并返回http响应,web服务器解析该请求,定位请求资源,服务器将资源副本写到tcp套接字,供客户端读取。
  • 4.释放连接TCP连接
    释放tcp连接,若连接模式是close,则服务器主动关闭连接,客户端被动关闭连接,若连接模式为Keep-Alive,则该链接会保持一段时间,在该时间可继续接收请求。
  • 5.客户端浏览器解析HTML内容
    这样客户端就拿到了相关的HTML内容,并进行相应解析,客户端浏览器先解析状态行,查看请求是否成功的状态码,然后解析每个响应头,告知响应类型及响应字符集,客户端浏览器读取响应数据的html之后,根据html的语法对其进行格式化,并在浏览器窗口中显示。

问题延展

在浏览器地址栏键入URL,按下回车之后经历的流程?
  • DNS解析
    浏览器会根据URL,逐层查看DNS服务器缓存,解析URL中的域名所对应的IP地址,DNS缓存从近到远依次是(浏览器缓存 -> 系统缓存 -> 路由器缓存 -> ips服务器缓存 -> 根域名服务器缓存 -> 顶级域名服务器缓存),从哪个缓存找到对应的IP,则直接返回,不在查询后面的缓存
  • TCP连接
    和服务器建立连接,根据三次握手来理解。
  • 发送HTTP请求
  • 服务器处理请求并返回HTTP报文
  • 浏览器解析渲染页面
  • 连接结束

HTTP 状态码

分为五种可能的取值:

1xx

指示信息:表示请求已接收,继续处理

2xx

成功:表示请求已被成功接收、理解、接受

3xx

重定向:要完成请求必须进行更进一步的操作

4xx

客户端错误:请求有语法错误或请求无法实现

5xx

服务器端错误:服务器未能实现合法的请求

GET请求和POST请求区别

三个层面来解答


  • http报文层面
    GET:放在请求URL中,有长度限制。
    POST:放在报文体内,长度没有限制。
  • 数据库层面
    GET:符合幂等性(对数据库的一次操作或多次操作获得的结果是一致的)安全性(对数据库的操作没有改变数据库的数据),做查询操作的,因此不会改变数据库内容。
    POST:不符合,POST请求会往后台提供数据,做修改操作,POST请求方式,每次获得的结果都有可能不一样,因为POST请求是作用于上一级URL上的,则每次请求都会增加一次新资源。
  • 其它层面
    GET:可以缓存,被存储,可以保存在请求的浏览器客户端中,URL可以保存为浏览器书签。
    POST:不具备上述功能。

Cookie和Session区别

Cookie 简介

  • 有服务器发给客户端特殊信息,以文本形式存放在客户端。
  • 客户端再次请求的时候,会把Cookie回发
  • 服务器接收后,会解析Cookie生成与客户端相应的内容

Cookie的设置以及发送过程

网络 —— HTTP相关知识_第4张图片

  • 1.客户端发送http请求到服务器
  • 2.服务器响应,并设置Cookie响应客户端
  • 3.客户端请求服务器端并携带Cookie
  • 4.服务器响应客户端

Session 简介

  • 服务器端的机制,在服务器上保存信息
  • 解析客户端请求,并操作session id,按需保存状态信息 (session不重复)

Session 实现方式

网络 —— HTTP相关知识_第5张图片

  • 使用Cookie实现
  • URL回写实现
    服务器在每次响应客户端时,都携带唯一的jsesionid,客户端在点击任意一个链接都会把这个jessionid作为请求给服务器端,如果不携带jessionid则请求无效。

两者联合使用实现,当服务器没有session时,创建session并放入Cookie中

Cookie 与 Session 区别

  • Cookie数据存放在客户端浏览器,Session存放在服务器上
  • Session较Cookie更安全
  • 若考虑减轻服务器负担,应当使用Cookie

你可能感兴趣的:(http,网络,弗兰克与网络安全)