IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 协议详解-HTTP -> 正文阅读

[网络协议]协议详解-HTTP

http(Hyper Text Transfer Protocal)超文本传输协议,应用于Web浏览器与Web服务器之间的通信,即WWW应用或Web应用,规定了客户端与服务器的数据传输格式,是基于请求和响应模式的无状态(数据传递后不记录信息)、无连接(每次只处理一个请求,处理完后便断开)应用层协议,默认端口为80

HTTP工作原理

  • 利用DNS协议解析域名:客户端浏览器输入网站地址,系统查询本地的DNS缓存以及hosts文件信息,若查询到相同的域名对应的IP地址,则访问改地址,如没有查询到信息,则会将浏览器的解析请求发送给本地DNS(LDNS),LDNS会从从DNS的根域对该域名发出解析请求,一直到找到相应的IP,然后将相应的解析信息缓存到本地,发送给客户端
  • 客户端将解析过后的域名信息与本机信息封装成一个HTTP请求数据包
  • 客户端将HTTP请求再次封装成TCP包,通过网络与服务器建立连接(TCP三次握手),连接过程使用到TCP协议,TCP与IP共同构建Internet(TCP/IP网络)
  • 客户端发出请求信息
  • 服务器进行响应
  • 断开TCP协议(四次握手)

数据流传输形式:

  • 客户机会将请求封装成http数据包–>封装成Tcp数据包–>封装成Ip数据包—>封装成数据帧—>硬件将帧数据转换成bit流(二进制数据)–>最后通过物理硬件(网卡芯片)发送到指定地点
  • 服务器硬件首先收到bit流,然后转换成ip数据包,通过ip协议解析Ip数据包,解析后是tcp数据包,就通过tcp协议解析Tcp数据包,解析后是http数据包,通过http协议再解析http数据包得到数据

HTTP请求报文

一个http请求由四部分组成:请求行、请求头部、请求数据、空行
在这里插入图片描述

  • 请求行:请求行由请求方法、URL、HTTP协议版本、空格组成,请求方法一般有GET、POST、DELETE、PUT、OPTION、TRACE、 HEAD、 CONNECT
    ????GET方法:1、要求服务器将URL定位的资源放在响应报文的数据部分,返回给客户端
    ?????????2、GET方法请求格式多为:GET /chrome-variations/seed?osname=win&channel=stable&milestone=92,请求
    ?????????参数连接在URL链接后面,以?与URL隔开,多个参数条件使用&隔开
    ?????????3、GET方法不适于传送私密数据,容易暴露,存在安全隐患,也不适于传送大量数据的请求,根据浏览器的不
    ?????????同,可传送的请求数据长度也不一样,最多能不能超过1024个字符

??????POST方法:1、相比GET方法,POST方法的请求条件以key/value的形式封装在HTTP请求数据中,请求URL不包含请求参数
????????????值,数据之间也是用&相隔
????????????2、由于POST方法的请求参数并非存储在URL中,因此不需要考虑URL数据传送的大小限制,安全性也比GET
????????????请求更高,但请求响应速度相比较GET方法更慢

??????DELETE方法:可多次删除同一份数据,支持返回的值为void

??????PUT方法:1、与POST方法类同,常用于创建、更新操作
???????????2、与POST不同的是:再创建数据时,PUT方法总是能保证同一份相同数据的主键是唯一的,而POST方法对于
???????????相同的数据每次一提交到服务器端,都会为数据添加一个新的主键值,也就是创建一个主键不同的资源(如果没
???????????有业务或者外键冲突)

??????OPTION方法:1、出现的场景有两种:获取后台服务器支持的HTTP的通信方式、对跨域请求进行preflight request(预检请
?????????????求),在发出复杂请求之前,就会发送一次OPTION请求
???????????????预检请求是指客户端先发送一个不带请求参数的请求给服务器,Access-Control-Request-Method告诉服
???????????????务器接下来的请求会使用的HTTP方法,Access-Control-Request-Headers请求将携带的首部字段;而服
???????????????务器返回给客户端Access-Control-Allow-Methods,里面的内容包括服务器可接受的请求方法,Access-
???????????????Control-Max-Age指定时间内无需再次发送预检请求
?????????????2、出现复杂请求的条件:1.使用方法put/delete/patch/post;
????????????????????????2.发送json格式的数据(content-type: application/json)
????????????????????????3.请求中带有自定义头部

??????TRACE方法:HTTP定义的调试方法,会使服务器返回客户端请求的任何内容,和Track用于调试web服务器连接的HTTP方
????????????式,存在跨站脚本漏洞,攻击者可利用该漏洞来欺骗用户从而获取到用户的私密信息

??????HEAD方法:HEAD方法相当于GET方法,但是HEAD方法只返回响应头信息,适用于只需要查看页面的状态

??????CONNECT方法:将服务器作为一个跳板,让服务器帮助客户端去访问一些客户端无法访问到的网站信息,相当于代理

  • 请求头部:Accept:接收数据类型
    ?????User-Agent:浏览器类型
    ?????Accept-Encoding:客户端接受的编码格式
    ?????Accept-Language:客户端接受的语言类型
    ?????accept-charset:客户端接受的字符集
    ?????host:主机名
    ?????connection:连接状态,close / keepalive
    ?????cookie:客户端的扩展字段,客户端同一域名的cookie相同
    ?????Referer:产生请求的网页URL
    ?????content-type:包体类型
    ?????content-length:包体长度
    ?????空行:告诉服务器,下面已经没有请求头的数据了
    ?????等
  • 请求数据:POST请求的数据存储在该处

HTTP响应报文

一个HTTP响应由四部分组成:响应行、响应头、响应体、空行

  • 响应行:包含 HTTP协议版本、状态码、原因短语。如:HTTP/1.1 200 OK
  • 响应头:包括一些键值对值
    ?????Server:服务器信息,包括服务器类型和版本号,如 nginx、openresty等
    ?????Date:当前接收响应时间
    ?????Content-Type:包体类型
    ?????Content-Length:包体长度
    ?????Connection:连接状态,close / keepalive
    ?????Last-Modified:指定资源最后修改的时间
    ?????Expires:响应的过期时间
    ?????等
  • 响应体:响应数据

状态码

具体可查看百度官方文档介绍:点击进入百度官方介绍

HTTP版本历程简介

HTTP不断更新的原因:http在建立之初,主要是为了HTML文档能够从WEB服务器传送到客户端浏览器上,但随着技术的发展,各种语言不断地涌现,CSS、JavaScript等优化界面语言,服务器获取数据的另一种方法Ajax,到了移动网络时代,更加复杂的手机网络,原来的HTTP协议早已不再适用,为了能够更好地应用于层出不穷的技术当中,HTTP也开始了不断优化更新的历程。从1991年的HTTP0.9到1996年HTTP1.0,再到1999年的HTTP1.1,再到2015年的HTTP2.0,HTTP目前共经历了四个大版本的更新

HTTP优化主要考虑到的问题:网络请求主要是考虑两个因素 带宽和延迟,带宽在目前的网络建设中已经得到了很大的提升,已经不用担心因为带宽而引发的网速问题,目前主要是针对网络延迟

影响延迟主要有三个方面:

1、浏览器阻塞:浏览器的最大访问数只有4个(根据浏览器不同的内核来决定),超出浏览器的最大访问数,之后的请求就会发生阻塞
2、 DNS查询:客户端必须通过DNS解析出域名对应的IP地址,才能发送请求,解析域名的过程耗时较长,目前已应用了缓存机制进行存储该部分数据,但是对于第一次本访问的域名来说,查询时间依然较长
3、建立连接:客户端与浏览器的连接需要通过三次握手进行,这样就导致了TCP最早也要在第三次握手的时候才可能携带请求数据,达到真正的连接,这样的握手不可进行复用,会导致每次请求都需要进行三次握手(高延迟下明显)和慢启动(文件类的大请求比较明显)

  • HTTP0.9版本
    只有一个命令GET,只支持纯文本内容,功能较少,只是为了能够使HTML文档可以从服务器传送到客户端浏览器上,目前已经弃用

  • HTTP1.0版本
    1、在原版本上引入了缓存机制,主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,优化DNS查询
    2、任何格式的内容都可以传输
    3、除了GET请求,还增加了POST、HEAD请求
    4、每次请求、响应内容必须携带头部信息
    5、每台服务器都绑定一个唯一的IP地址,请求消息中的URL并没有携带主机名

  • HTTP1.1版本
    1、引入了更多的缓存控制策略例,如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
    2、相比较HTTP1.0,HTTP1.1支持断点续存功能,并且只返回客户端需要的部分信息,而不是全部信息,提高了带宽和连接的利用率
    3、新增了24个错误响应码,如:409表示请求的资源与资源当前的状态发生了冲突,410表示服务器上某个资源被永久性删除
    4、每次请求和响应都会携带Host信息
    5、支持持久连接(PersistentConnection)和管道机制(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟
    6、默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点
    7、增加了请求方法:PUT、DELETE、OPTIONS、PATCH

  • HTTP2.0版本
    1、彻底的二进制协议,头信息和数据体都是二进制
    2、复用了TCP的连接,在一次连接中,可同时进行多个请求和响应,不需要一一对应进行回应,不用担心队头阻塞问题,这个双向通信被称为“多双工”
    3、允许服务器主动向客户端发送信息
    4、引入了头信息压缩机制,头信息可压缩后再发送

HTTP与HTTPS

引用HTTPS的原因:HTTP属于明文传输,信息很容易在传输过程中被劫持,像一些支付、银行卡、私人信息,如果被一些意图不轨的中间人获取,后果将不可设想,因此引入了HTTPS协议(SSL/TLS),HTTP引入了加密机制,是所有信息加密后传送在客户端与服务器之间,在很大程度上削减了信息被窃取以及被更改的隐患

目前加密的方法有两种:对称加密、非对称加密,而HTTPS使用的是对称加密+非对称加密
????对称加密:加密和解密使用的是相同的秘钥
????非对称加密:加密和解密使用的分别是公钥和私钥两种不同的秘钥

数字证书:CA机构颁布的具有一定权威的数字证书,为了防止中间人假冒浏览器和客户端,进行中间传递信息,从而窃取修改信息,证书中包括证书的颁布者、颁发时间、生效时间、持有者信息、持有者公钥信息等

数字签名:为了防止中间人对证书进行篡改,从而窃取客户端与浏览器之间传递的信息。把证书原来的内容生成一份签名,对比签名内容与证书内容的一致性,从而判断证书是否被修改过
数字签名制作过程:1、CA机构拥有非对称加密的私钥和公钥。
????????2、CA机构对证书明文数据T进行hash
????????3、对hash后的值用私钥加密,得到数字签名S
????????4、明文和数字签名共同组成了数字证书

浏览器验证签名过程:1、拿到证书,得到明文T,签名S
2、用CA机构的公钥对S解密(由于是浏览器信任的机构,所以浏览器保有它的公钥),得到S’
3、用证书里指明的hash算法对明文T进行hash得到T’
4、显然通过以上步骤,T’应当等于S‘,除非明文或签名被篡改。所以此时比较S’是否等于T’,等于则表明证书可信

HTTPS的加密过程
1、客户端向服务器发送https请求连接和一套加密算法
2、服务器接收到请求和加密算法后,返回给客户端带有CA机构的公钥、明文和数字签名的数字证书
3、客户端利用客户端的公钥将数字证书解析成CA机构明文、CA机构的公钥和数字签名
4、客户端利用CA机构的公钥对数字签名进行解密
5、客户端用证书指明的Hash算法对明文进行hash
6、对比4和5的结果,一样则传输成功,否则,证明证书被篡改,传输失败

在这里插入图片描述

HTTP与HTTPS的对比:
1、HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费
2、HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的,保证了传输数据的安全性,适用于支付、银行卡之类的场景
3、HTTP和HTTPS使用的连接方式不一样,HTTP使用的端口号是80,HTTPS使用的端口号是443
4、HTTPS连接缓存不如HTTP高效

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 11:12:15  更:2021-09-10 11:12:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:42:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码