1

简单的了解网络基础知识

image.png

发送端在层与层间传输数据时,每经过一层都会被加上首部信息,接收端每经过一层都会删除一条首部

浏览器如何和服务器通讯

当我们在地址栏输入www.baidu.com时,浏览器将显示思否的首页。在这个过程中,浏览器都干了哪些事情呢?

image.png

IP 协议,TCP 协议和 DNS 服务在使用 HTTP 协议过程中发挥的作用

如果客户端要向服务端发送访问网站的请求,例如“www.baidu.com",首先会进行DNS域名解析得到IP地址。通过应用层,浏览器从访问的IP地址解析出默认的端口号80;再用端口号和IP地址与web服务器(我们常说的web是网站服务器)建立一条tcp连接通道,建立TCP连接之后,浏览器向web服务器发送一条HTTP请求报文web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。web服务器关闭HTTP连接,关闭TCP连接,web服务器显示访问的网站内容到屏幕上。

在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:

  • HTML是一种用来定义网页的文本,会HTML,就可以编写网页;
  • HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。

DNS和域名解析流程

首先,在应用层,DNS是域名系统,是域名与IP地址相互映射的一个分布式数据库,作用就是不让机器去通过域名去解析IP地址这一复杂的流程,能更方便的得到IP地址。其实就是通过主机名解析出IP地址的过程叫域名解析或者叫主机名解析,解析的方法流程是DNS协议。DNS协议运行在UDP协议之上,它的端口号为53,。解析完成后转向其网站。

域名解析流程:

1.首先系统会在本机host文件信息和缓存中是否有与域名所对应的IP地址,如果有,直接去访问IP对应的域名服务器。
2.若没有在本地和缓存中找到,浏览器就会向本地主机所指定的DNS服务(LDNS)发送请求,进行查询,有则返回给客户端浏览器,没有则访问其他服务器。
3.若没有在LDNS中找到,则LDNS会向根域名服务器发送域名请求解析,根域名服务器全球只有13台,它没有域名解析的地址,所以它会返回.com对应的服务器地址返回给LDNS.
4.LDNS拿到地址去找.com域名服务器,就会找到baidu.com的地址服务器。
5.baidu.com域名服务器就是企业购买域名时用于管理解析的服务器,此时www.baidu.com的地址就会被解析出来,然后返回给浏览器。
6,返回到浏览器后就会将此时的IP地址与域名映射放到本地host文件信息和缓存中,方便下次访问。

点击查看更多知识:
客户端像向服务器发起请求时会生成一段请求报文,请求报文是由请求方法,URL,协议版本,可选的请求首部字段和内容实体构成。

通过Network的记录,我们就可以知道。在Network中,定位到第二条记录,点击,右侧将显示Request Headers,点击右侧的view sourceview parsed),我们就可以看到浏览器发给思否服务器的请求:

image.png

请求(request)【客户端->服务端】**

  1. GET(请求的方式) /socket.io/?...(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
  2. Accept: /(客户端能接收的媒体资源类型)
  3. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8(客户端接收的语言类型)
  4. Connection: keep-alive(维护客户端和服务端的连接关系)
  5. Host: segmentfault.com:9443(当一个 IP 下存在多个域名时,帮助服务器知道要请求的具体主机端口号)
  6. Referer: https://segmentfault.com/ (告诉服务器我来自于哪里)
  7. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36(将创建请求的浏览器和用户代理名称等信息传达给服务器)
  8. Accept-Encoding: gzip, deflate, br (客户端能接收的压缩数据的类型)
  9. If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
  10. Cookie(客户端暂存服务端的信息)
  11. Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)
  12. Authorization 指用来告知服务器,用户代理的认证信息

image.png

接收到请求的服务器,会将请求内容的处理结构以响应的形式返回。响应报文基本上由协议版本,状态码,用以解释状态的原因短语,可选的响应首部字段以及实体主体构成。

响应(response)【服务端->客户端】

  • HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
  • Location: http://www.baidu.com (服务端需要客户端访问的页面路径) 
  • Server:apache tomcat(服务端的Web服务端名)
  • Content-Encoding: gzip(服务端能够发送压缩编码类型) 
  • Content-Length: 80(服务端发送的压缩数据的长度) 
  • Content-Language: zh-cn(服务端发送的语言类型) 
  • Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式,浏览器就是依靠Content-Type来判断响应的内容)
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
  • Refresh: 1;url=http://www.it315.org(服务端要...,刷新,然后访问指定的页面路径)
  • Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
  • Transfer-Encoding: chunked(分块传递数据到客户端)
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
  • Expires: -1//3种(服务端禁止客户端缓存页面数据)
  • Cache-Control: no-cache(服务端禁止客户端缓存页面数据)  
  • Pragma: no-cache(服务端禁止客户端缓存页面数据)   
  • Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)  
  • Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)

image.png

当浏览器读取到segmentfault首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给思否服务器,拿到相应的图片、视频、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求。

总结一下HTTP请求的流程:

步骤1:浏览器首先向服务器发送HTTP请求,请求包括:

  • 方法:GET还是POSTGET仅请求资源,POST会附带用户数据;
  • 路径:/full/url/path
  • 域名:由Host头指定:Host: segmentfault.com:9443
  • 以及其他相关的Header;
  • 如果是POST,那么请求还包括一个Body,包含用户数据。

步骤2:服务器向浏览器返回HTTP响应,响应包括:

  • 响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;
  • 响应类型:由Content-Type指定,例如:Content-Type: text/html;charset=utf-8表示响应类型是HTML文本,并且编码是UTF-8Content-Type: image/jpeg表示响应类型是JPEG格式的图片;
  • 以及其他相关的Header;

通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。

Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP响应中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源。

HTTP协议同时具备极强的扩展性,虽然浏览器请求的http://www.segmentfault.com:9443的首页,但是在HTML中可以链入其他服务器的资源,比如<img src="http://i1.s.cn/home/U8455P30DT20131008135420.png">,从而将请求压力分散到各个服务器上,并且,一个站点可以链接到其他站点,无数个站点互相链接起来,就形成了World Wide Web,简称“三达不溜”(WWW)。

HTTP 是不保存状态的协议和 Cookie 的简单介绍

HTTP 协议对于发送的请求和响应不做持久化处理。这时候引入了 Cookie 技术用于状态管理。Cookie 对用与登录的状态管理,没有 Cookie 这个技术的话,因为 HTTP 不保存状态,每次打开新网页都必须再次登录。

Cookie 会根据响应报文中的 Set-Cookie 字段来通知客户端自动保存 Cookie。下次请求时会自动发送 Cookie,服务器会比对数据得到状态结果。

image.png

Post 和 Get 的区别

先引入副作用和幂等的概念。

副作用指对服务器上的资源做改变,搜索是无副作用的,注册是副作用的。

幂等指发送 M 和 N 次请求(两者不相同且都大于1),服务器上资源的状态一致。注册10个和11个帐号是不幂等的,对文章进行更改10次和11次是幂等的。

在规范的应用场景上说,Get 多用于无副作用,幂等的场景,例如搜索关键字。Post 多用于副作用,不幂等的场景,例如注册。

在技术上说:

  • Get 请求能缓存,Post 不能
  • Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里,且会被浏览器保存历史纪录,Post 不会,但是在抓包的情况下都是一样的。
  • Post 可以通过 request body来传输比 Get 更多的数据,Get 没有这个技术
  • URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的
  • Post 支持更多的编码类型且不对数据类型限制

常见状态码

image.png

2XX 成功

  • 200 OK,表示从客户端发来的请求在服务器端被正确处理
  • 204 No content,表示请求成功,但响应报文不含实体的主体部分
  • 206 Partial Content,进行范围请求

3XX 重定向

  • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
  • 302 found,临时性重定向,表示资源临时被分配了新的 URL
  • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
  • 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
  • 307 temporary redirect,临时重定向,和302含义相同

4XX 客户端错误

  • 400 bad request,请求报文存在语法错误
  • 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
  • 403 forbidden,表示对请求资源的访问被服务器拒绝
  • 404 not found,表示在服务器上没有找到请求的资源

5XX 服务器错误

  • 500 internal sever error,表示服务器端在执行请求时发生了错误
  • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

https://www.liaoxuefeng.com/wiki/1016959663602400/1017804782304672
https://blog.csdn.net/u014466635/article/details/81004127
【简单比较 http https http2】简单比较 http https http2
【应用层+传输层TCP/UDP】应用层+传输层TCP/UDP
网络HTTP


一吃三大碗
130 声望9 粉丝

“唯有深入,方能浅出”