2.HTTP、HTTPS(url过程)

(1)HTTP 协议介绍

  HTTP 协议,全称超文本传输协议(Hypertext Transfer Protocol)。顾名思义,HTTP 协议就是用来规范超文本的传输,超文本,也就是网络上的包括文本在内的各式各样的消息,具体来说,主要是来规范浏览器和服务器端的行为的。

并且,HTTP 是一个无状态(stateless)协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。这其实是一种懒政,有状态协议会更加复杂,需要维护状态(历史信息),而且如果客户或服务器失效,会产生状态的不一致,解决这种不一致的代价更高。

 HTTP协议优点

  扩展性强、速度快、跨平台支持性好。

 HTTP基于TCP还是UDP?

  HTTP 3.0 之前是基于 TCP 协议的,而 HTTP3.0 将弃用 TCP,改用 基于 UDP 的 QUIC 协议 。此变化主要为了解决 HTTP/2 中存在的队头阻塞问题。由于 HTTP/2 在单个 TCP 连接上使用了多路复用,受到 TCP 拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞。

(2)HTTP协议通信过程

  HTTP 是应用层协议,它以 TCP(传输层)作为底层协议,默认端口为 80. 通信过程主要如下:

·服务器在 80 端口等待客户的请求。

·浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。

·服务器接收来自浏览器的 TCP 连接。

·浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。

·关闭 TCP 连接。

(3)HTTPS协议

  HTTPS协议(Hyper Text Transfer Protocol Secure),是 HTTP 的加强安全版本。HTTPS 是基于HTTP的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。默认端口号是 443.

  HTTPS协议中,SSL通道常用基于密钥的加密算法,密钥长度通常是40比特或128比特。

  HTTPS 协议优点:保密性好、信任度高。

 

(7)HTTP 和 HTTPS 有什么区别?(重要)

·端口号:HTTP默认是80,HTTPS默认是443。

·URL前缀:HTTP的URL前缀是http://,HTTPS的URL前缀是https://。

·安全性和资源消耗 :HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。

 

(4)从输入URL 到页面展示到底发生了什么?(非常重要)

类似的问题:打开一个网页,整个过程会使用哪些协议?

总体来说分为以下几个过程:

DNS 解析、TCP 连接、发送 HTTP 请求、服务器处理请求并返回 HTTP 报文、浏览器解析渲染页面、连接结束。

 上图有一个错误,请注意,是 OSPF 不是 OPSF。 OSPF(Open Shortest Path First,ospf)开放最短路径优先协议, 是由 Internet 工程任务组开发的路由选择协议

 DNS 缓存分类:

(1)浏览器 DNS 缓存:浏览器会根据一定频率缓存 DNS 记录;

(2)本地 DNS 缓存:如果浏览器缓存中找不到解析记录,就会去询问操作系统中的缓存;

(3)本地 HOSTS 文件:HOSTS 是记录域名与 IP 地址一一映射关系的本地文件。(Windows 系统中位于C:\Windows\System32\drivers\etc;Linux 系统中位于 /etc/hosts)

(4)路由器 DNS 缓存:我们常用的路由器也带有自动缓存功能,路由器 DNS 被篡改会造成域名劫持,将访问网址定位到另外一个服务器;

(5)递归服务器缓存:递归服务器在将解析结果告知客户端的同时,将记录缓存下来,当下次请求同一个域名时,直接会将记录返回,而无需再进行全球查询。

DNS 解析顺序:

  DNS 解析顺序是“先查缓存,再递归解析”,查询顺序为:浏览器缓存 --> 系统缓存 --> 路由器缓存--> 递归服务器缓存 --> 递归查询(根-顶级-权威)。

我们以 www.example.com 这个域名为例进行查询,具体流程如下:

(1)搜索浏览器自带的 DNS 缓存

  当收到访问请求后,浏览器首先会查询浏览器自身的 DNS 缓存,这个缓存时间比较短(chrome://net-internals/#dns 这里可以查询缓存的dns记录),且只能容纳 1000条缓存,如果缓存中有对应条目,返回结果,解析到此结束。

(2)查询操作系统缓存和 hosts 本地文件

  如果浏览器缓存中没有找到对应条目(ipconfig /displaydns可以查看),操作系统也会有一个域名解析的过程,浏览器会先搜索操作系统的 DNS 缓存中是否有这个域名解析记录,如果有返回结果,解析结束。此外,电脑本地文件 HOSTS 中可以设定域名到 IP 地址的指向关系。如果 HOSTS 文件中保存有该域名的记录,浏览器会首先使用这个 IP 地址,并将其结果缓存下来,缓存时间同样受域名失效时间和缓存空间大小决定。

(3)查询路由器缓存

  如果浏览器和操作系统中没有域名解析记录,就会查询路由器中的 DNS 缓存,如果路由器 DNS 缓存中有解析条目,直接返回结果,解析结束。

(4)递归解析服务器缓存

  如果本机和路由器 DNS 缓存中没有该域名的解析记录,浏览器就会向递归服务器发起请求,如果递归服务器缓存有该域名解析条目,返回结果,解析结束。

(5)查询根域名服务器

  如果递归服务器缓存中没有结果,就会委托递归服务器发起全球查询,首先递归服务器会向根域名服务器发起解析请求。根域名服务器告知 .com 顶级域名服务器地址。

(6)查询顶级域名服务器

  递归服务器向 .com 顶级域名服务器发起 DNS 请求,.com 顶级服务器告知 example.com 所属权威域名服务器地址。

(7)查询权威域名服务器

  递归服务器向 example.com 的权威域名服务器地址发起请求,权威服务器告知 www.example.com 所对应的IP地址。

(8)返回解析结果

  得到 www.example.com 的 IP 地址后,递归服务器将结果告知客户端,客户端对该 IP 地址发起访问。整个 DNS 解析流程到此结束。

 

 

(6)HTTP 状态码有哪些?

 

HTTP 状态码用于描述 HTTP 请求的结果,比如2xx 就代表请求被成功处理。

 

(8)HTTP 1.0 和 HTTP 1.1 有什么区别?

·连接方式 : HTTP 1.0 为短连接,HTTP 1.1 支持长连接。

·状态响应码 : HTTP/1.1中新加入了大量的状态码,光是错误响应状态码就新增了24种。比如说,100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址。

·缓存处理 : 在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用 :HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

·Host头处理 : HTTP/1.1在请求头中加入了Host字段。

 

(9)HTTP 是不保存状态的协议, 如何保存用户状态?

  HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个 Session)。

  在服务端保存 Session的方法很多,最常用的就是内存和数据库(比如是使用内存数据库 redis 保存)。既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。

 

(10)Cookie 被禁用怎么办?

  最常用的就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面。

 

(11)URI 和 URL 的区别是什么?

  URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。

  URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

  URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

 

当电脑上百度网页打不开,出现403错误,通常是由于服务器拒绝了访问请求。403错误是HTTP状态码之一,表示禁止访问。这种情况下,可能有以下几个原因导致:
1. IP地址被封禁:如果你的IP地址被百度服务器封禁,你将无法访问百度网页。这可能是因为你的IP地址被误认为是恶意攻击或违规行为的来源,或者是百度服务器出现了故障导致误判。如果你认为自己的IP地址被封禁了,你可以尝试重新启动你的路由器或联系你的网络服务提供商解决问题。

2. 浏览器缓存问题:有时候,浏览器缓存可能会导致403错误。你可以尝试清除浏览器缓存和Cookie,然后重新加载百度网页。

3. DNS解析问题:如果你的DNS服务器无法正确解析百度的IP地址,你将无法访问百度网页。你可以尝试使用其他DNS服务器,如Google Public DNS或Cloudflare DNS,来解决这个问题。

4. 代理服务器问题:如果你使用了代理服务器来访问百度网页,那么代理服务器可能会拒绝你的访问请求。你可以尝试禁用代理服务器或更换其他可用的代理服务器来解决问题。

5. 百度服务器故障:有时候,百度服务器本身可能出现故障,导致无法访问。这种情况下,你只能等待百度修复服务器问题。

当遇到403错误时,你可以尝试清除缓存、重新启动路由器、更换DNS服务器、禁用代理服务器等方法来解决问题。如果问题仍然存在,你可以尝试使用其他搜索引擎或联系百度客服寻求帮助。

 

posted @ 2023-09-19 12:44  壹索007  阅读(105)  评论(0编辑  收藏  举报