计算机网络之HTTP协议详解

1.HTTP基础知识

1.1HTTP是什么?

    HTTP叫做超文本传输协议(HyperText Transfer Protocol) 协议:HTTP 是一个用在计算机世界里的协议,它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范),通俗的说:协议就是一种约定 传输:HTTP是一种双向的协议,我们访问百度时,浏览器是请求方A,百度就是应答方B,双方约定用HTTP协议来通信,浏览器把请求数据发给网站,网站再把数据返回给浏览器 超文本:互联网早期的时候只是简单的字符文字,但现在「文本」。的涵义已经可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算做「文本」,而超文本就是超越了以往普通的文本,它是混有文字,图片,视频等的超链接 总结:HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

1.2 认识URL

    url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它

1.3urlencode和urldecode

    像 / ? : 等这样的字符, 已经被url当做特殊意义理解了,因此这些字符不能随意出现。比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义 转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式 urlencode urldecode

1.4 HTTP协议格式

1.4.1HTTP请求

    请求行:请求方法——url——版本 请求报头:key——value 结尾 host:客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上 connection:长短链接(keep-alive 是长链接),http1.0早期短链接,http1.1长链接(高效) content length:正文的长度 content type:数据类型 User-Agent:声明用户的操作系统和浏览器版本信息(下载软件的时候识别电脑是什么系统) referer:当前页面是从哪个页面跳转过来的 Accept-Encoding:接受的编码 Accept-Language:接受的语言类型 Cookie:在客户端存储少量信息,分两种,在内存或者在硬盘里(在内存中退出浏览器二次登录会删,在硬盘中不会)
—————————————————————————————————————————————————
    HTTP怎么读请求? HTTP是应用层协议,是基于TCP协议的,TCP面向连接前必须先建立连接,HTTP在通信之前就必须将连接建立好,一来一回叫做短链接 读请求的时候是按行读取,读到空行为止,正文又叫有效载荷,请求报头和有效载荷是通过空行分离的,报头中的属性 content length 严格控制读取正文的长度

1.4.2 HTTP响应

    状体行(响应行):版本号——状态码——状态码解释 响应报头:请求的属性, 冒号分割的键值对;每组属性之间使用 分隔;遇到空行表示Header部分结束 响应正文:空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中都会有 Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在 body中.

2. HTTP请求方法

2.1常见的请求方法

    GET——获取资源——HTTP(1.0,1.1) POST——传输实体主体——HTTP(1.0,1.1) PUT——传输文件——HTTP(1.0,1.1) HEAD——获得报文首部——HTTP(1.0,1.1) DELETE——删除文件——HTTP(1.0,1.1) OPTIONS——询问支持的方法——HTTP(1.1) TRACE——追踪路径——HTTP(1.1) CONNECT——要求用隧道协议连接代理——HTTP(1.1) LINK——建立和资源之间的代理——HTTP(1.0) UNLINE——断开连接关系——HTTP(1.0)

2.2GET和POST的区别

    GET:方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等,当你访问时,会返回你想要看的博客内容,GET不需要携带正文 POST:它向 URI 指定的资源提交数据,数据就放在报文的 body 里,POST需要携带正文

3.HTTP常见的状态码

4.HTTP的特性(优点和缺点)

4.1优点

4.1.1简单

    HTTP 基本的报文格式就是 header + body,头部信息也是 key-value + 空格 简单文本的形式,易于理解,降低了学习和使用的门槛

4.1.2灵活易拓展

    HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定,都允许开发人员自定义和扩充 HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层

4.1.3无连接,简单快速

4.2缺点

4.2.1无状态(Cookie解决)

    无状态,服务器不会记录HTTP的状态,减轻了服务器的开销,但是在完成关联性操作的时候容易拉跨(比入看爱奇艺会员视频,不可能每看一集登陆一次账户) 对于这种问题的解决方案就是使用Cookie技术,Cookie通过通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态 在客户端第一次请求后,服务器会下发一个装有客户信息的「Cookie」,后续客户端请求服务器的时候,带上「Cookie」,服务器就能识别出是谁

4.2.2明文传输

    在信息传输的过程中,明文传输相当于信息裸奔,对我们的用户是极不安全的,尤其是在各种抓包软件过程中,可以直接看见信息(虽然方便阅读)

4.2.3不安全

    通信使用明文传输(不加密),账号信息容易泄露 未验证通信双方的身份,访问虚假用户 传输过程中报文遭到恶意篡改

5.HTTP与HTTPS

5.1 HTTPS是什么?(解决HTTP存在的缺陷)

    HTTPS是为了解决HTTP的缺点而引入的,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输

5.2 HTTPS解决了什么问题?

    而HTTPS很好的解决了这几个问题

5.3 HTTPS到底为什么安全?

5.3.1混合加密(防窃听)

    通过混合加密的方式可以保证信息的机密性,解决了窃听的风险 HTTPS 采用的是对称加密和非对称加密结合的【混合加密】方式 在通信建立前采用非对称加密的方式交换【会话秘钥】,后续就不再使用非对称加密 在通信过程中全部使用对称加密的【会话秘钥】的方式加密明文数据
为什么要采用混合加密的方式呢? 1.对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换 (类似鸡生蛋还是蛋生鸡的bug) 2.非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢

5.3.2 摘要算法(防止数据被篡改)

    摘要算法的方式来实现数据完整性,它能够为数据生成独一无二的【指纹】,指纹用于校验数据的完整性,解决了篡改的风险 客户端在发送明文之前会通过摘要算法算出明文的【指纹】,发送的时候把【指纹 + 明文】一起加密,发送给服务器 服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的【指纹】和当前算出的【指纹】做比较,如果相同,说明数据是完整的

5.3.3数字证书(解决身份认证问题)

    客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密(如何保证信息未被篡改或者身份认证问题?) 这里我们借助第三方权威机构CA(数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的 我们也可以在windows下查看CA win + r 输入命令: certmgr.msc
经验分享 程序员 微信小程序 职场和发展