简单的了解网络基础知识
发送端在层与层间传输数据时,每经过一层都会被加上首部信息,接收端每经过一层都会删除一条首部
浏览器如何和服务器通讯
当我们在地址栏输入www.baidu.com时,浏览器将显示思否的首页。在这个过程中,浏览器都干了哪些事情呢?
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 source
(view parsed
),我们就可以看到浏览器发给思否服务器的请求:
请求(request)【客户端->服务端】**
-
GET
(请求的方式)/socket.io/?...
(请求的目标资源)HTTP/1.1
(请求采用的协议和版本号) -
Accept
: /(客户端能接收的媒体资源类型) -
Accept-Language
: zh-CN,zh;q=0.9,en;q=0.8(客户端接收的语言类型) -
Connection
: keep-alive(维护客户端和服务端的连接关系) -
Host
: segmentfault.com:9443(当一个 IP 下存在多个域名时,帮助服务器知道要请求的具体主机端口号) -
Referer
: https://segmentfault.com/ (告诉服务器我来自于哪里) -
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(将创建请求的浏览器和用户代理名称等信息传达给服务器) -
Accept-Encoding
: gzip, deflate, br (客户端能接收的压缩数据的类型) -
If-Modified-Since
: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间) -
Cookie
(客户端暂存服务端的信息) -
Date
: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间) -
Authorization
指用来告知服务器,用户代理的认证信息
接收到请求的服务器,会将请求内容的处理结构以响应的形式返回。响应报文基本上由协议版本,状态码,用以解释状态的原因短语,可选的响应首部字段以及实体主体构成。
响应(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(服务端响应客户端的时间)
当浏览器读取到segmentfault首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给思否服务器,拿到相应的图片、视频、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求。
总结一下HTTP请求的流程:
步骤1:浏览器首先向服务器发送HTTP请求,请求包括:
- 方法:
GET
还是POST
,GET
仅请求资源,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-8
,Content-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,服务器会比对数据得到状态结果。
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 支持更多的编码类型且不对数据类型限制
常见状态码
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。