网络知识-http/https协议

369 阅读5分钟

1.http请求的过程

以浏览器访问一个网址为例,从用户输入 URL 开始,客户端通过 DNS 解析查询到目标服务器的 IP 地址,然后与之建立 TCP 连接,连接成功后,浏览器构造一个 HTTP 请求发送给服务器,服务器收到请求之后,从数据库查到相应的数据并封装成一个 HTTP 响应,然后将响应结果返回给浏览器,浏览器对响应内容进行数据解析、提取、渲染并最终展示在你面前。

2.http请求格式

http请求包括请求行,请求头,请求体三部分组成

a.请求行

POST /accounts/login HTTP/1.1 分别表示请求方法,客户端获取资源的路径,http协议版本号

ps:常见的请求方法:GET,POST,PUT,DELETE,HEAD

b.请求头

常见的请求头报文属性(报文属性是指协助客户端和服务端完成通信的附属信息)

<1> accept:Accept:text/plain

告诉服务端,客户端能够接受的响应类型仅为纯文本数据,Accept属性的值可以为一个或多个MIME类型的值

<2>Cookie:$Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23BE13C4C

服务端是怎么知道客户端的多个请求是隶属于一个Session呢?注意到后台的那个jsessionid=5F4771183629C9834F8382E23BE13C4C木有?原来就是通过HTTP请求报文头的Cookie属性的jsessionid的值关联起来的

<3>Reffer:www.baidu.com

表示此url是从哪个url链接过来的

<4>Cache-Control: no-cache

相当于让服务端将对应请求返回的响应内容不要在客户端缓存

<5>User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36

说明客户端的身份

c.请求体

请求体一般是客户端向服务端提交的数据,GET请求没有请求体

3.http响应格式

HTTP 响应格式与请求的格式很相似,也是由响应行、响应头、响应体组成

a.响应行

响应行也包含三部分,分别是服务端的 HTTP 版本号、响应状态码、状态说明,响应状态码常见有 200、400、404、500、502、304 等等,一般以 2 开头的表示服务器正常响应了客户端请求,4 开头表示客户端的请求有问题,5 开头表示服务器出错了,没法正确处理客户端请求

b.响应头

响应头和请求头是对应的,是服务器对该响应的一些附加说明

c.相应体

真正的响应数据,其实就是网页的HTML源代码或者是响应的Json数据

http协议书籍推荐:《图解HTTP》 《HTTP权威指南》

4.https协议

a.用对称加密的形式对数据进行加密

在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密

那万一密钥在传输的过程中被别人截取了怎么吧? 例如:

假如服务器用明文的方式传输密钥给客户端,然后密钥被中间人给捕获了,那么在之后服务器和客户端的加密传输过程中,中间人也可以用他捕获的密钥进行解密。这样的话,加密的数据在中间人看来和明文没啥两样。

b.非对称加密

让客户端和服务器都拥有两把钥匙,一把钥匙是公开的(全世界知道都没关系),我们称之为公钥;另一把钥匙则是保密的(只有自己本人才知道),我们称之为私钥。这且,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密

这样,服务器在给客户端传输数据的过程中,可以用客户端明文给他的公钥进行加密,然后客户端收到后,再用自己的私钥进行解密。客户端给服务器发送数据的时候也一样采取这样的方式。这样就能保持数据的安全传输了

c.对称加密和非对称加密的区别

非对称加密在加密的时候会非常慢,比堆成加密慢上上百倍,对称加密不安全是因为密钥无法安全交给客户端

4.websocket协议

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它的出现使客户端和服务器之间的数据交换变得更加简单

WebSocket 通常被应用在实时性要求较高的场景,例如赛事数据、股票证券、网页聊天和在线绘图等。WebSocekt 与 HTTP 协议完全不同,但同样被广泛应用

websocket协议是一个新协议,是对http协议的一个补充

Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说

HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。

在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response, 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起

参考文章:www.cnblogs.com/fuqiang88/p…