HTTP和HTTPS

目录

HTTP协议

1.HTTP协议

2.HTTP请求

URL

方法

GET请求

post请求

header报头

请求正文(body)

3.HTTP响应

结构

常见的状态码

4.form表单构造HTTP请求

5.通过ajax构造HTTP请求

6.使用工具postman

​编辑

HTTPS

1.对称加密

2.非对称加密

3.证书


HTTP协议

1.HTTP协议

HTTP属于应用层最广泛使用的协议之一。浏览器获取到网页就是基于HTTP。HTTP就是浏览器和服务器之间的交互桥梁。

网址,URL,浏览器会根据这个URL构造出一个HTTP请求,发送给服务器,服务器会返回一个HTTP响应(包含了HTML,CSS,js,图片...)浏览器再把得到的HTML等数据进行显示出来(渲染)

可以通过fiddler工具查看HTTP的工作过程

下载:

fidder本质是一个代理程序(代理:找中间人帮助做任务),使用时有两个注意事项。

1.可能和别的代理程序冲突,使用的时候要关闭其他的代理程序(包括一些浏览器插件)

2.想要正确抓包,还需要开启https功能,https是基于http的进化版协议。fiddler默认不能抓https的包,需要自己启用https并安装证书。

打开搜狗,查看抓包

2.HTTP请求

最原始的请求:

响应:

URL

举个例子:

方法

常用的几个方法:

GET请求

1.在浏览器地址栏直接输入URL就会触发get请求

2.HTML里的link标签、script标签、img、a标签......

3.通过js构造get请求

通过fiddler查看搜狗页面请求

post请求

1.登录跳转

2.传输文件

HTTP请求可以认为是四个部分:

1.首行

2.请求头(header)

3.空行

4.正文(body)

GET请求,没有body;POST请求,一般有body。(post的body是程序员自定义的内容)

GET和POST之间的区别:

1.get给服务器传递的信息一般放在query string里面,post传递则是通过body

2.get请求一般用于从服务器获取数据,post一般是用于给服务器提交数据

3.get通常设计为幂等的,post不要求幂等

4.get可以被缓存,post一般不能被缓存

header报头

每一行是一个键值对,键和值之间使用:分割

键值对是HTTP定义好的,有特定的含义

常见的几个重要的键值对:

Host:描述服务器所在的地址和端口(描述最终要访问的目标)

content-length:描述body中的数据长度

content-type:描述body中的数据格式

user-agent:当前操作系统和浏览器的版本,现在主要用来区分PC和移动

referer:当前页面的来源

cookie:浏览器给网页提供的本地存储数据的机制(网页默认是不允许访问计算机硬盘的)

请求正文(body)

3.HTTP响应

结构

响应是四个部分构成的

1)首行:版本号 状态码 状态码的描述

2)header

3)空行:表示header的结束标记

4)body

HTTP状态码:描述了这次响应的结果(响应成功还是失败,失败原因)

常见的状态码

200 OK(成功了)

404 Not Found(访问资源不存在,在服务器里没有找到)

403 Forbidden(访问被拒绝,没有权限)

302 Move temporarliy(重定向,类似于呼叫转移)

500 internal sever error:服务器内部错误,代码抛出异常

504 gateway timeout:响应时间太久,请求超时

状态码大类:(看开头数字)

1** 执行中,等一等

2** 成功

3** 重定向

4**客户端错误

5**服务器错误

HTTP协议格式总结

4.form表单构造HTTP请求

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 表单标签,允许用户和服务器之间交互数据 -->
    <!-- 要求提交的数据以键值对的结构来组织 -->
    <form action="https://www.sogou.com" method="get">
       <input type="text" name="studentName">
       <!-- 构造了一个按钮,点击按钮提交form表单 -->
       <input type="submit" value="提交">
    </form>
</body>
</html>

搜狗服务器没有特殊响应,只是打开了搜狗服务页。

代码里方法换成post:

form标签只能构造get和post,无法构造put、delete等方法的请求。

5.通过ajax构造HTTP请求

a=>异步的

asynchronize

HTML中通过ajax发起的HTTP请求,就属于异步的方式。即发送请求后不必等待服务器响应回来,可以往下执行。当服务器响应回来了之后,再由浏览器通知到代码中。

jquery提供的ajax,api针对原生api封装

应用jquery库,通过$全局对象来获取它的aqi

和form相比:ajax功能更强大

1.支持put、delete等方法

2.ajax发送的请求可以灵活设置header

3.ajax发送的请求的body也是可以灵活设置的

6.使用工具postman

1.注册登录 2.创建workplace 3.新建一个标签页,即可以构造请求

构造一个HTTP请求:通过postman手动构造

postman还可以自己构造出请求代码:

HTTPS

HTTP+安全层(SSL)

用来加密的协议:SSL/TLS

可以用来防御"运营商劫持"(例:点击下载链接后跳转到另一个下载链接中)

网络上明文传输数据比较危险,需要加密才能保证安全。

1.对称加密

a(明文)+key=>b(密文) 加密的过程

b(密文)+key=>a(明文) 解密的过程

key:同一个密钥,既可以加密也可以用来解密(对称密钥)

密钥:一串字符串/数字。加密的过程,就是把明文和字符串进行数学变换。

存在问题:初始客户端设置密码给服务器时需要明文传输。此时黑客也能看见密码。此时引出非对称加密。

2.非对称加密

生成一对密钥:公钥和私钥(公钥和私钥的加密或者解密顺序可以互换)

明文+公钥=>密文 使用公钥加密

密文+私钥=>明文 使用私钥解密

类比信箱:锁在邮差员手中,钥匙在居住人手中。邮差上锁,用户用钥匙解锁。

客户端使用公钥,来对密钥进行加密,传输给服务器,服务器用私钥来解密得到对称密钥。

非对称密钥只是为了传递对称密钥的。一旦对称密钥到达服务器后,后续的传输都使用对称密钥来加密了。对称密钥的效率相较于非对称密钥要高许多。

即使使用了非对称密钥,也会出现问题:黑客进行中间人攻击,传输过程中截获替换成自己生成的一对非对称密钥,截获传输的信息。

问题出现在服务器不知道传输的数据是否来自于客户端,解决中间人攻击的关键在于让客户端能辨别公钥是否是真的公钥。

3.证书

引入"证书"(第三方的公证机构)

类比:参加高考需要身份证和准考证来证明身份,证书无效机器会识别出来,对造假和代考做出惩罚。

服务器在成立初就会在专门的机构认证审核,申请证书,审核通过颁发证书,服务器生成的公钥包含在证书中。传输过程发现证书无效,浏览器出现弹窗告警。

验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解锁,得到一个hash1,再计算整个证书的hash值记作hash2,比较hash1和hash2的值,如果不一样则被篡改了。证书一旦有一个字符被修改过,计算出来的hash值会有非常大的差别。一旦hash值对不上,客户端就知道被替换了公钥。

总结客户端和服务器之间使用HTTPS传输数据的过程

1.针对业务数据,引入对称加密。

2.让服务器生成一对非对称密钥,公钥1和私钥1,把公钥1连同证书一起发送给客户端,自己持有私钥1。

3.客户端拿到证书进行校验,拿着颁发证书机构提供的公钥2对证书中的签名进行解密,计算校验和是否匹配。

4.客户端拿着服务器发送来的公钥1争对对称密钥进行加密,发送给服务器,服务器用私钥1进行解密。

相关推荐
点点滴滴的记录7 小时前
RPC核心实现原理
网络·网络协议·rpc
程思扬8 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
海绵波波1079 小时前
Webserver(4.8)UDP、广播、组播
单片机·网络协议·udp
很透彻12 小时前
【网络】传输层协议TCP(下)
网络·c++·网络协议·tcp/ip
蝌蚪代理ip13 小时前
辩论赛——动态IP与静态IP的巅峰对决
网络·网络协议·tcp/ip·ip
田三番15 小时前
使用 vscode 简单配置 ESP32 连接 Wi-Fi 每日定时发送 HTTP 和 HTTPS 请求
单片机·物联网·http·https·嵌入式·esp32·sntp
dulu~dulu15 小时前
查缺补漏----用户上网过程(HTTP,DNS与ARP)
网络·网络协议·http
丶213616 小时前
【网络】HTTP(超文本传输协议)详解
网络·网络协议·http
坚持拒绝熬夜16 小时前
IP协议知识点总结
网络·笔记·网络协议·tcp/ip
C++忠实粉丝20 小时前
计算机网络socket编程(1)_UDP网络编程实现echo server
linux·服务器·网络·c++·网络协议·计算机网络·udp