HTTP协议详解



结合本人WEB安全中的学习经验,这个帖子主要是分享在Web安全基础中对HTTP协议以及HTTP协议的常见请求方式的梳理工作。
如有误解或不足的地方,请指正 万分感谢!

?
?

0x01 什么是HTTP?


HTTP协议默认端口:80

HTTP是超文本传输协议,HTTP协议是一种请求/响应协议
它是基于TCP协议之上的应用层协议,也是TCP协议的封装。

客户端和服务器之间通信时,发送的数据要遵守的规则,称为HTTP协议。
协议中的数据又称为报文。

HTTP协议是无状态的协议:不能保存信息,每次请求和响应都是相互独立的。
在网站中建立不同的传输连接时,都是占用一个TCP连接的(TCP/UDP端口数量1-65535),这样也就起到了降低网络冗余,提高网络响应速率的一个作用

0x02 什么是HTTPS?


HTTPS协议默认端口:443
HTTPS 是基于HTTP协议的安全的超文本传输协议,通过验证SSL证书对数据进行加密传输
HTTPS是用来弥补HTTP明文传输的缺陷,在端与端之间传输加密后的消息,保护传输数据的隐私性和完整性



0x03 HTTP的工作原理


1. 客户端向服务端请求建立TCP连接
2. 客户端向WEB服务器发送HTTP请求
3. WEB服务器接收到来自浏览器的HTTP请求,并响应请求,返回响应消息报文
4. 返回的内容为客户端请求的内容
(1) 浏览器可以基于HTTP协议向服务器请求字符流(文字内容)
(2) 字节流(图片、视频等信息内容)
5. 每次的请求与响应都是独立进行着的
6. 服务器响应完毕即会向客户端关闭TCP连接,并等待下一次请求




0x04 HTTP请求消息与响应消息详解


什么是请求消息?

  1. 请求消息通常指从客户端访问服务端的请求消息
  2. 请求消息包括:请求行、请求头、请求空行、请求体


什么是响应消息?

  1. 响应消息通常指服务端响应给客户端的请求访问的内容,即响应消息,也称之为响应报文
  2. 响应消息包括:响应行、响应头、响应空行、响应体


请求消息详解:

  1. 请求行: 包含(请求方式GET;POST、请求访问的url、协议以及版本号HTTP/1.1)
  2. 请求头: 通常是以键值对的形成存在
    ?(1) HOST: 当前页面请求的域名或ip地址
    ?(2) User-Agent: 浏览器向服务器表明浏览器的版本信息和操作系统信息
    ?(3) Referer: 向服务器表明是从通过哪里去访问的
    ?(4) Cookie: 浏览器保存的用户凭据信息 登陆状态
    ?(5) Accept_language: 支持的语言
    ?(6) Keep_alive: 保持连接状态
  3. 请求空行: 发送回车符或换行符,告诉服务器以下不再是请求头信息
  4. 请求体: 保存POST请求方法数据


请求消息报文图解:


响应消息详解:

  1. 响应行 协议以及版本号响应状态码
  2. 响应头 服务器响应给浏览器的东西 不同网站不同请求返回响应头不一样
  3. 响应空行 格式
  4. 响应体 响应的具体内容


响应消息报文图解:


常见响应状态码
???? 1xx:提示信息

???? 2xx:请求消息发送成功

???? 3xx:重定向
?????? - 302 重定向|页面跳转
?????? - 304 访问页面缓存

???? 4xx:客户端错误,客户端发送给的请求有语法错误
?????? - 403 权限不允许
?????? - 404 请求访问的资源不存在
?????? - 405 请求方法不被允许

???? 5xx:服务端错误 ?[500-504]

0x05 HTTP的常见请求方法


GET与POST
(1) GET 用于获取URL的传参,常用于获取信息、查询数据
(2) POST 可以向服务端发送修改请求,比如论坛上的回帖、在博客中评论时,会通过请求方法查询数据库数据获取数据,起到一个更新评论的作用。POST不仅可以发送修改请求,还可以像GET请求方法那样从URL中获取信息 接收传参

GET与POST的常见区别
(1) GET的参数在URL中,POST参数在请求体中
(2) GET只能传递字符流,POST可以传输字符流(文字文本)与字节流(媒体)两者皆可
(3) GET请求参数是有长度限制的,POST没有长度限制

0x06 GET与POST的请求报文区别


(1)请求行中的url,GET是能看到参数的,POST不行,因为POST的参数在请求体当中
(2)在请求头中,POST相比较GET请求方式,多出了
(3)Content-Length(内容长度) 虽然POST型不限制请求长度,但是也要告诉服务器要传多长数据
(4)Content-Type(内容类型) 因为POST型可以传输字符或字节,所以要告诉服务器自己传输的内容类型

不同请求方法图解对比

此致!敬礼!闻道有先后 小白鸹貔靠