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.2 -
Data
:属于通用信息性首部,提供日期和事件说明报文是什么时候创建的。 -
Content-Type
:属于实体内容首部,告诉客户端主体的数据类型。 -
Transfer-Encoding
:属于通用信息性首部,传输的编码方式,图中chunked是分块传输例如小说分一章一章传输。 -
Connection
:属于通用信息性首部,可以指定请求/响应的连接选项,图中keep-alive在响应后连接依然可以存在一段时间。 -
X-Powered-By
:显示此资源用什么技术开发及对应版本 感觉只有PHP -
Expires
:属于实体缓存首部,提示缓存过期的时间,超过这个时间就需要重新获取资源。 -
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 表示成功OK -
Remote Address
:资源所在的IP地址
Response Headers 响应头
-
Connection
:连接方式;图中是keep-alive,在请求后的一段时间内还是相连的,可直接继续发送请求。 -
Content-Length
:主体的长度或尺寸 -
Content-type
:主体的类型 -
Date
:报文创建的时间 -
Server
:服务端软件及版本,图中是Nginx/1.6.2 -
X-Powered-By
:开发资源的技术是Express
Request Headers 请求头
-
Accept
:我这个客户端可以接受哪些类型的资源 -
Accept-Encoding
:客户端可以接受的编码类型 -
Accept-Language
:客户端可以解析接受的语言 -
Cookie
:服务器端为了辨识用户身份而留在客户端的数据,发送请求时客户端会把cookie
一起发送给服务器。 -
Host
:服务器地址 -
Origin
:所请求的资源的源 -
Referer
:客户端是从哪里跳转过来的。例如我们从百度跳到饥人谷官网,这里就会是百度的网址 -
User-Agent
:用户代理也就是浏览器客户端自身的信息 -
X-Requested-With
:请求的方式,这里是AJAX