OSI 七层模型
OSI:Open System Interconnection Refer Model 开放式系统互联通信参考模型,是由国际标准化组织提出的一种概念模型,是一个试图让各种计算机在全世界范围内连成网络的标准框架;它将网络通信分成七个层面。从距离用户最近至最底层简述如下:
应用层 Application
:用户交互的对象,用户通过这一层进行信息交互。通俗点例如chrome浏览器、或者发邮件的outlook就是这一层。表示层 Presentation
:这一层是操作系统所在的层,处理数据,转化加密等确保另一个系统能识别你的数据。会话层 Session
:负责你的电脑与服务器的通信连接与维护,创建连接→请求→响应。传输层 Transport
:把传输表头加至数据以形成数据包,控制调节数据的传输,决定类似一次发送多少数据的问题。网络层 Network
:路由的工作层,它决定路径的选择和转寄。数据链路层 Data Link
:交换机的工作层,负责网络寻址、错误侦测和改错。物理层 Physical
:最底层的物理联网介质和数据传输实现,网线、连接器及比特流的传输等。
HTTP 的工作原理
HTTP
全称 Hyper Text Transfer Protocol
即超文本传输协议;它是一个客户端终端和服务器端请求和应答的标准。它的请求和响应步骤如下:
建立连接
:客户端与服务器端建立一个TCP连接。发起请求
:客户端向服务器端发起Http请求,会发送请求报文,由请求行、消息报头和请求正文组成。返回响应
:服务器端接收到请求并进行解析,定位请求资源,给客户端发送响应报文,由状态行、消息报头和响应正文组成。释放TCP连接
:服务器关闭TCP连接。(如果连接模式是keepalive的话会保持一段时间可继续接受请求)
URI 的格式及常见的协议
URI
全称Uniform Resource Identifier
统一资源标志符,是一个用于标识一个互联网资源名称的字符串。由两个子集构成,通过描述资源位置确定资源的URL,以及通过名字来识别确定资源的URN。它的格式如下:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<hash>
http://
user:pass
@www.example.com
:80
/dir/index
?uid=1&nam=2
#ch1
<scheme>
协议方案名
常见的有http、https等。<user>:<password>
用户的登录信息
现在一般不会把登录信息放在url中。<host>
服务器地址
用户一般使用域名方便记忆,浏览器经DNS解析去访问对应IP地址。<port>
端口号
服务器的进程接口,80是http协议默认的端口号,ftp协议默认21端口,https默认443端口。<port>
路径
找到服务器后再去对应的路径下寻找资源。<params>
在一些协议中需要参数来访问资源,参数用名值对用;
隔开。<query>
查询字符串,常见的是get请求中data以此形式传给服务器。<hash>
片段标识符-哈希,之前作为页面锚点的时候见过。
常见的协议有 Http、Https、FTP、SSH等。
HTTP 协议几种和服务器交互的方法
GET
:得到,最常用的方法,向服务器发送请求要求获取某个资源。HEAD
:头,亦即不需要数据主体只想得到描述资源信息的头部,一般用于查看资源信息、查看状态码看下资源是否存在、查看首部看下资源有没有被修改。POST
:投递,好理解,就是向服务器发数据,一般是在html表单中用于向服务器提交表单信息的。PUT
:放,就是向服务器写入资源,修改某个内容。TRACE
:跟踪,这个方法会在最后发往服务器时,返回一个TRACE响应给客户端,告诉客户端最终服务器收到的请求报文是什么样的。DELETE
:删除,要求服务器删掉给定url下的资源,服务器可能不会支持。OPTIONS
:其他,用来查询服务器支持哪些功能。
状态码200,301, 304,403 , 404 , 500,503分别代表什么意思
200 OK
请求已成功 根据请求方式的不同会有不同的反馈内容301 Moved Permanently
所请求的资源被永久性地移动到另一个地方 响应会返回新的url 下次客户端会按照新的url去访问304 Not Modified
客户端有缓存的文档 当再一次发起请求时 服务器经比对后发现文档内容并没有变化时就会返回此状态码 让客户端使用本地缓存403 Forbidden
服务器已经理解请求 但拒绝执行 一般是因为没有对应的权限404 Not Found
请求失败 在服务器上找不到你所请求的资源500 Internal Server Error
服务器出错了 无法完成客户端的请求503 Service Unavailable
服务器过载了 目前无法处理客户端的请求
报文由哪几部分组成
http报文有请求报文和响应报文,是一个简单的格式化数据块,它由以下3个部分组成:
start line
:起始行 对报文进行简单描述header
:包含一些属性的首部块body
:数据的主题部分,有些请求不需要返回这部分
请求头的格式和作用
作用
:为请求添加额外的信息,来告诉服务器客户端的信息和能力,服务器可以据此为客户端提供更好的响应。格式
:是名/值的形式;名字后面跟着冒号,加上可选的空格,再加上字段值,最后回车或换行。范例
:
GET/HTTP/1.1
请求方法、协议、版本号 ←这是请求报文起始行Host
:服务器地址Connection
:连接方式 一般请求后就断开 图中是keep-alive,可以继续接收请求。Accept
:说明我这个客户端可以接受哪些类型的资源。Upgrade-Insecure-Requests
:自动升级请求,在https承载的页面上不允许出现http请求,出现就会报警,这个属性会自动替换https请求。User-RefererAgent
:用户代理也就是浏览器客户端自身的信息。Referer
:客户端是从哪里跳转过来的。例如我们从百度跳到饥人谷官网,这里就会是百度的网址。Access-Encoding
:客户端可以接受的编码类型。Accept-Language
:客户端可以解析接受的语言。Cookie
:服务器端为了辨识用户身份而留在客户端的数据,发送请求时客户端会把cookie
一起发送给服务器。
首部的格式和作用
作用
:HTTP的首部向请求或响应报文添加了一些附加信息,它是一些名/值对的列表。它分为通用首部、请求首部、响应首部、实体首部和拓展首部。格式
:名字后面跟着冒号,加上可选的空格,再加上字段值,最后回车或换行。范例
:
HTTP/1.1 200 OK
协议/版本 状态码 释义 ←这是响应报文起始行 不属于首部Server
:属于响应信息性首部,服务器用的是哪一种及版本 图中用的是nginx 版本1.6.2Data
:属于通用信息性首部,提供日期和事件说明报文是什么时候创建的。Content-Type
:属于实体内容首部,告诉客户端主体的数据类型。Transfer-Encoding
:属于通用信息性首部,传输的编码方式,图中chunked是分块传输例如小说分一章一章传输。Connection
:属于通用信息性首部,可以指定请求/响应的连接选项,图中keep-alive在响应后连接依然可以存在一段时间。X-Powered-By
:显示此资源用什么技术开发及对应版本 感觉只有PHPExpires
:属于实体缓存首部,提示缓存过期的时间,超过这个时间就需要重新获取资源。Pragma
:属于通用缓存首部,另一种随报文传送的指示,并不专用于缓存。Cache-Control
:属于通用缓存首部,随报文传送缓存指示,图中private是指私人缓存每个人不一样。Content-Encoding
:属于实体内容首部,告诉客户端对主体执行的编码方式。Vary
:属于响应协商首部,是一个首部列表,服务器会根据这些首部的内容挑出最适合的资源版本发给客户端。
主体的作用
- 实体的主体部分就是HTTP要传输的内容了,一般是图片、视频、HTML文档等。下面饥人谷首页的响应实体,也就是HTML文档了。
浏览器缓存是如何控制
是什么
:浏览器缓存是web缓存中的一个类型,与公用缓存不同,浏览器一般都有内建的私有缓存,会缓存已经访问过的页面,也就是把资源复制了一份放在本地,缓存可以减少网络带宽的压力、降低服务器的压力、也能让我们更快地打开页面获得资源。缓存页面、过期时间
:在我们首次请求资源或页面时,原始服务器利用HTTP
的cache-control首部
或expires首部
给文档加上了过期时间,标明了保质期。在保质期内请求已缓存的资源时,浏览器就不会向服务器发送请求而是直接使用本地缓存。过期后的再验证
:当过了保质期以后呢,这个时候浏览器就会向服务器发起请求同时附带过期时间。若文档与缓存的副本不一样服务器就响应新的文档给浏览器,同时浏览器会继续缓存新的文档;若服务器比对后发现文档没有变化,就会发个新的过期时间让浏览器继续使用本地缓存。对缓存再验证最有用的两个首部是If-Modified-Since和If-None-Match
。最后引用博客园的一张图面解释,更加清晰。If-Modified-Since
:当资源过期时,再请求时若发现资源带有Last-Modified
(最后修改日期)声明时,会带上If-Modified-Since:Last-Modified Data
发给服务器,收到后服务器就会比对最后修改时间,若没被修改就返回304 Not Modified
响应报文并且附带新的过期事件;若被修改了就返回新的文档和过期时间。- If-None-Match:如果在资源过期后再请求时发现资源带有Etage声明(资源在服务器的唯一标识,生成规则服务器自定),会带上
If-None-Match:Etage值
发给服务器,收到后服务器就会进行比对校验来决定返回200还是304,响应与If-Modified-Since相同。
下图各个参数是什么意思
General:概述
Request URL
:请求的资源的URL也就是位置Request Method
:客户端向服务端发出请求的方法,图中是用PUT方法Status Code
:状态码,图中是200 表示成功OKRemote Address
:资源所在的IP地址
Response Headers 响应头
Connection
:连接方式;图中是keep-alive,在请求后的一段时间内还是相连的,可直接继续发送请求。Content-Length
:主体的长度或尺寸Content-type
:主体的类型Date
:报文创建的时间Server
:服务端软件及版本,图中是Nginx/1.6.2X-Powered-By
:开发资源的技术是Express
Request Headers 请求头
Accept
:我这个客户端可以接受哪些类型的资源Accept-Encoding
:客户端可以接受的编码类型Accept-Language
:客户端可以解析接受的语言Cookie
:服务器端为了辨识用户身份而留在客户端的数据,发送请求时客户端会把cookie
一起发送给服务器。Host
:服务器地址Origin
:所请求的资源的源Referer
:客户端是从哪里跳转过来的。例如我们从百度跳到饥人谷官网,这里就会是百度的网址User-Agent
:用户代理也就是浏览器客户端自身的信息X-Requested-With
:请求的方式,这里是AJAX