http、https

http

超文本传输协议,用于万维网传输数据制定的协议,最初是为了提供一种传输HTML页面的方法。
特点
无状态(每次连接都是相互独立的、相互不影响)、
无连接(每次连接处理完就断开连接)、

应用层协议。

  1. 为了解决无连接多次请求的效率问题,HTTP1.1新增了长连接保持连接不关闭。在请求头的Connection参数设置为keep-alive,HTTP1.1默认都是长连接,长连接会在一段时间内没有交互数据后被关闭(保持长连接实际上是保持tcp长连接),一个网页包括数据请求、js、css等等需要发起很多个请求。
  2. 为了解决http协议的无状态、http的应用上增加了cookie和session用于维护请求的状态。
HTTP报文结构

请求报文
请求行: 请求地址、url参数、请求方法(get、post等)
请求头: 包含一些请求头参数。比如host表示想要访问的主机名,User-Agent表示访问用户的浏览器信息,Connection Keep- Alive表示长链接,Referer表示从哪个资源来访问服务器,Cookie携带cokie参数,Content-Length传输数据的内容大小,Accept接受的MIME类型(json、text/plain等、image/*)等
请求体: 具体的请求数据,不同
响应报文
响应行: 协议版本、状态码
响应头: 一些头信息,比如Allow允许哪些请求方法,Content-Length内容长度,Expires资源缓存多久,Set-Cookie设置cookie、Last-Modified资源最后修改时间,access-control-allow-origin 允许跨域、content-type响应内容类型等等。
响应体: 具体的响应数据。

HTTP 1.0和HTTP 1.1区别

1.1新增的点

  1. 默认是长连接。
  2. 新增了24个错误码,比如410标示某个资源被永久删除
  3. 提供更多缓存控制策略
  4. 支持请求部分资源,通过range头域控制。
http常见返回码

1XX 状态码。接受的请求正在处理
2XX 成功状态码。请求正常处理
3XX 重定向状态码。需要进行附加操作以完成请求
4XX 客户端错误码。服务器无法处理请求
5XX 服务器错误码。服务器处理出错。

200 成功状态码
204 响应成功,但是报文实体没有内容
301 表示资源已经被转移,永久重定向,新的地址要放在响应头的location字段
302 临时重定向,表示资源重定向其他地方
400 报文语法错误,请求参数错误,服务器不能解析
401 未认证,需要通过http认证
403 服务端拒绝了客户端请求
404 找不到对应的资源
500 服务器异常
503 服务器超负载或正停机维护,可以在retry after显示重试时间

请求方法

get和post区别
get有缓存,post没缓存。get请求参数是呆在url后面的,post一般是放在请求体中。

options
当浏览器发起复杂跨域请求时,会先发起preflight request预请求,用于询问服务器是否允许当前域名请求。发起请求的请求方法既为options方法,且会在请求头放入两个参数。

  • Access-Control-Request-Method:告知服务器实际请求所使用的HTTP方法;
  • Access-Control-Request-Headers:告知服务器 qq实际请求所携带的自定义首部字段。

服务器所返回的Access-Control-Allow-Methods首部字段将所有允许的请求方法告知客户端,返回将所有Access-Control-Request-Headers首部字段将所有允许的自定义首部字段告知客户端。此外,服务器端可返回Access-Control-Max-Age首部字段,允许浏览器在指定时间内,无需再发送预检请求,直接用本次结果即可。

满足以下条件之一既为复杂请求
1、请求方法不是GET/HEAD/POST
2、POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
3、请求设置了自定义的header字段

请求方法TRACE
TRACE_Method是HTTP(超文本传输)协议定义的一种协议调试方法,该方法会使服务器原样返回任意客户端请求的任何内容。
TRACE和TRACK是用来调试web服务器连接的HTTP方式。

请求方法HEAD
head方法跟GET方法相同,只不过服务器响应时不会返回消息体,只会获取到头部信息。通常用于校验链接的有效性

cookies、session

由于http是无状态的,所以如果要维护用户的状态,就没办法实现。因此设定了cookies、session机制来维护用户状态。
原理
cookie存储在客户端,session存储在服务端,服务端获取到用户状态后,生成session,将session存在服务端,并将sessionId存到客户端的cookie中,用户下次请求就可以通过sessionId获取到用户信息。
tomcat容器可以获取session和cookie,就是默认会给请求的用户生成session,并自动设置了cookie,下次用户请求就通过sessionId取出对应的sesssion.所以每次请求我们可以往session对象存放对象,下次请求可以取出来。
springmvc的session作用域也是同理。
htpp参数
set-cookie参数是响应时,用来告诉浏览器,要把一些参数设置到客户端cookie的。包含key value和domain,domain用于浏览器判断与当前页面的域名是否一致,不一致也不会设置。所以如果在a域名页面调用b域名接口,b域名想要往a域名设置cookie要修改domain。当然b接口还得在响应头设置允许跨域
传送cookie是在请求头放cookie参数
还可以指定在该域名下哪个路径下有效

https

端口443端口
作用
通过https实现对传输的数据进行加密,证书验证阶段使用的非对称加密,内容数据传输使用对称加密.
流程

  1. 证书验证阶段
  • 浏览器发起请求将支持的加密规则发给网站。
  • 服务器选择一组加密算法和hash算法,返回证书。证书包含网站地址、公钥、证书颁发机构、加密算法、hash算法等。
  • 浏览器验证证书的颁发机构是否合法,证书包含的网站地址是否与当前访问地址一致。浏览器会内置权威颁发证书机构(比如ca)的根证书(机构给自己颁发的证书),用于验证服务器发送的证书是否合法。如果不受信任会弹出不受信提示。
  • 如果证书合法或者用户接受不合法证书,浏览器会生成一串随机数作为密码,并用公钥对随机数加密
  • 使用约定好的hash算法,将握手消息(用来进行一次密码加密,服务端解密,判断是否客户端和服务端可以正确的加密解密)计算一个hash值,并用生成的随机数密码对消息进行加密,把公钥加密后的随机数密码、密码加密后的握手消息、hash值发送给网站。
  • 服务端通过私钥解密得到随机数密码,通过密码解密握手消息,并计算hash值验证是否与客户端发送的hash值一致。最后使用密码加密一段消息、计算对应的hash值发送给浏览器。
  • 浏览器解密消息,并计算解密后的消息hash值与服务器发送的hash值是否一致,如果一致则握手结束。

总结:此阶段的目的是交换一个随机数作为之后传输数据的密码,并且验证可以正常加密解密,相当于为后续传输做测试。hash算法计算hash值,用于防止传输的数据被篡改,相当于签名的作用。非对称加密是为了保证随机数传输的安全。

  1. 内容数据传输阶段
    通过第一阶段选定的随机数作为私钥,对数据进行加密解密。

为什么选用hash算法
不可逆、唯一性。无法获取原数据,但是可以验证数据有没有被改动。
https常用的算法

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256
ca证书 Certificate Authority

即证书授权中心,负责管理和签发证书。

根证书

权威证书授权中心给自己颁发的证书。
浏览器会内嵌权威机构的根证书。服务器返回证书时,会根据证书的机构找到对应的根证书,对服务器返回的证书进行验证是否有效
可以个人制作证书,但是证书会不受信任,浏览器发出警告。

证书验证过程

根证书(各种类型证书颁发机构)-> 中级证书(特定类型的颁发机构颁发)
-> 最终颁发的证书。
证书链条都验证是可信机构颁发,且可信才验证通过。

验证失败的情况:不是受信任机构颁发,证书过期,绑定的域名与访问域名不一致。

https的证书类型

SSL证书
遵循SSL协议,用于加密http协议,就是https。对于ssl证书,如果访问的网站和证书绑定的网站一致就可以通过验证。
TLS证书

证书申请支持通配符模式,比如匹配一级域名 *.tt.com,但是会比较贵。

https与http的区别
  1. http默认请求的是80端口,https默认请求的是443端口。
  2. https需要到ca机构申请证书,一般都是收费的。
  3. https对传输的数据进行加密传输,http是明文传输。
  4. https需要进行加密传输,因此也耗费更多服务器资源。
https为什么可以抓包

抓包抓https需要在手机下载抓包工具的证书,安装并信任。
之后的https请求实际上是跟抓包工具建立https连接、数据加密解密。所以抓包工具可以看到未加密的数据。抓包工具再跟网站建立https连接,这个过程传输的数据也是加密的,但是就不会被中间站截断获得明文数据了。

https解决了什么问题

防止数据传输被监听(数据被抓取)、数据被篡改,防止伪装(中间人冒充)
涉及金钱的可以提高安全性。
不涉及金钱的也可以防止被运营商篡改,添加广告。

https权威颁发机构

startssl

ssl挟持

中间人攻击,拦截网络请求,伪造服务端与用户建立https连接。用户要注意是否是不受信任的证书。
不能随意安装不知道来源的根证书。

如何搭建

申请证书,下载证书,把对应web服务器的证书文件放到配置文件目录,假设是nginx,配置nginx,监听443端口,配置ssl验证文件地址,
https://blog.csdn.net/cloume/article/details/78252319

数据url到显示主页的过程
  1. 通过DNS解析域名获取到ip(浏览器缓存、路由器缓存、DNS缓存)
  2. 浏览器发送Http请求。(建立Tcp连接、发送数据在网络层是用IP协议,OSPF路由选择,ARP将ip转换成MAC地址,HTTP协议传输网页数据,CDN加速)
  3. 服务器接受到请求,处理请求。(nginx负载均衡、业务服务处理)
  4. 服务器发回HTML页面、响应请求。
  5. 浏览器解析渲染页面。
  • HTTP协议是作用是生成针对目标web服务器的HTTP请求报文
  • TCP协议的作用是把HTTP请求报文拆分成多个报文段,按序号分为多个报文段,并可靠传输。阶段端把多个报文按照序号组装成原来的顺序,重组HTTP报文。
  • IP协议的作用是搜索对方的地址,经过路由器进行中转转发。
  • CDN加速原理是CDN服务器会将指定域名解析后返回一个CNAME(别名),通过CNAME进行再次解析,根据最近地理位置、网络接入类型(电信、网通等)获取CDN缓存服务器的地址,发起请求,缓存服务器通过内部DNS得到原站地址获取数据,并缓存起来,下次读取直接拿缓存。
URI URL

URI是统一资源标志符
URL是统一资源定位符,是一种具体的URI。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值