Http与Https

参考:java3y《对线面试官》

介绍

HTTP协议是客户端和服务器交互的一种通讯方式

所谓协议是双方约定好的“格式”,让双方都能看得懂

“交互”就是请求和响应

 

 基于TCP的应用层协议,不关心数据传输细节,主要用来规定客户端和服务端的数据传输格式

无状态,默认端口80

什么是无状态

假设用户A向服务B发了一个请求1,再次发送一个请求2。 服务端本身完全不知道两个请求来自同一个用户,这在协议层次就是【无状态】的

http【无状态】仅仅是在*协议层*,当业务需要状态的时候,可以通过request中数据携带所需状态的id来实现。例如,为了让服务器知道是同一个用户的请求,请求1和请求2中必须携带一个相同的id,让服务端可以根据这个id,最终找到用户数据(【状态】)。

实现1:这个状态如果放在处理请求的服务器进程中(例如session),那服务器进程就是有状态的,该用户下一个请求如果没分发到这个进程,就会拿不到上一次请求留下的状态,这样会影响负载均衡和缓存的实现。

实现2:这个状态如果放在处理请求的服务器进程之外的集中式存储,那服务器进程仍然是无状态的,可以集群、负载均衡。无状态服务一般都用这种方案。

 https://www.cnblogs.com/yfish/p/8481380.html

Http请求报文

https://www.bilibili.com/video/BV1JT411X7dt?p=3&vd_source=152ad2dc192867dca92d66a24472c851

 

 

Http响应报文

 

 

 

HTTP个版本间的区别

Http1.0默认是短连接,每次与服务器交互都需要新开一个连接

HTTP1.1 最主要的是“默认持久连接”。只要客户端服务端没有断开TCP连接,就一直保持连接,可以发送多次HTTP请求,

其次是“断点续传”。利用Http看消息头使用分块传输编码,将实体主体分块进行传输

HTTP/2不再以⽂本的⽅式传输,采⽤「⼆进制分帧层」,对头部进⾏了「压缩」,⽀持「流控」,最主要就是HTTP/2是⽀持「多路复⽤」的(通过单⼀的TCP连接「并⾏」发起多个的请求和响应消息)

HTTP1.1提出的「管线化」只能「串⾏」(⼀个响应必须完全返回后,下⼀个请求才会开始传输)

HTTP/2多路复⽤则是利⽤「分帧」数据流,把HTTP协议分解为「互不依赖」的帧(为每个帧「标序」发送,接收回来的时候按序重组),进⽽可以「乱序」发送避免「⼀定程度上」的队⾸阻塞问题

 

 

但是,⽆论是HTTP1.1还是HTTP/2,response响应的「处理顺序」总是需要跟request请求顺序保持⼀致的。假如某个请求的response响应慢了,还是同样会有阻塞的问题。

这受限于HTTP底层的传输协议是TCP,没办法完全解决“线头阻塞”的问题

HTTP/3 跟前⾯版本最⼤的区别就是:HTTP1.x和HTTP/2底层都是TCP,⽽HTTP/3底层是UDP。使⽤HTTP/3能够减少RTT「往返时延」(TCP三次握⼿,TLS握⼿

常见请求头

https://juejin.cn/post/6844903745004765198

Accept

  • Accept: text/html  浏览器可以接受服务器回发的类型为 text/html。
  • Accept: */*   代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。

Host

  • Host:www.baidu.com 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。

Refer

  • Referer:https://www.baidu.com/?tn=62095104_8_oem_dg 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。

Cookie

  • Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。

常见响应头

https://juejin.cn/post/6844903745004765198

 

Content-Type

  • Content-Type:text/html;charset=UTF-8 告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。

Content-Encoding

  • Content-Encoding:gzip 告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。

Access-Control-Allow-Origin 

  • Access-Control-Allow-Origin: *   *号代表所有网站可以跨域资源共享,如果当前字段为*那么Access-Control-Allow-Credentials就不能为true
  • Access-Control-Allow-Origin: www.baidu.com 指定哪些网站可以跨域资源共享
 

Https

待续。。。

Https与Http的区别

https://juejin.cn/post/7144400185731317768

 

posted on 2023-03-11 21:37  or追梦者  阅读(18)  评论(0编辑  收藏  举报