任务34-HTTP
1. OSI 七层模型指什么 (难度***
)
OSI(Open System Interconnection,开放系统互连),七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯 。这七层由下往上可分为:
2. HTTP 的工作原理是什么? (难度***
)
HTTP协议定义web客户端如何从web服务器请求web页面,以及服务器如何把web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。下图表明了这种请求/响应模型。
以下是HTTP请求/响应的步骤:
(1)客户端连接到web服务器
一个HTTP客户端,通常是浏览器,与web服务器的HTTP端口(默认80)建立一个TCP套接字连接。
(2)发送HTTP请求
通过TCP套接字,客户端向web服务器发送一个文本的请求报文,一个请求报文交由请求行、请求头部、空行和请求数据4部分组成。
(3)服务器接收请求并返回HTTP响应
web拂去其解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
(4)释放连接TCP连接
web服务器主动关闭TCP套接字,释放TCP连接;客户端被动关闭TCP套接字,释放TCP连接。
(5)客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的预付对其进行格式化,并在浏览器窗口中显示。
3. URI 的格式是什么?常见的协议有哪些 (难度***
)
URI( Uniform Resource Identifier)统一资源标识符
格式:
- 协议名方案
定义Internet服务的类型。最常见的类型是http。 - 登录信息(认证)
指定用户名和密码作为从服务器端获取资源时必要的登录信息,即身份认证。 - 服务器地址
使用URI必须指定带访问的服务器地址。地址可以是DNS可解析的名称,也可以是IP地址。 - 服务器端口号
指定服务器连接的网络端口号。一般情况下使用默认端口号。 - 带层次的文件路径
指定服务器上的文件路径来定位特制的资源。 - 查询字符串
针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。 - 片段标识符
使用片段标识符通常标记以获取资源中的子资源。
常见协议:
IP(Internet Protocol):网络协议
HTTP (HyperText Transfer Protocol):超文本传输协议
HTTPS(Hypertext Transport Protocol Server):超文本传输安全协议
ARP(Address Resolution Protocol):地址解析协议
FTP(File Transfer Protocol):文件传输协议
SMTP(Simple Mail Transfer Protocol):简单邮件传输协议
SFTP(Simple File Transfer Protocol ):简单文件传输协议
TCP(Transfer Control Protocol):传输控制协议
UDP(User Datagram Protocol):用户数据包协议
4. HTTP 协议有几种和服务器交互的方法 (难度***
)
- GET:最常用,通常用于请求服务器发送某个资源,我们平时在浏览器输入网页地址,就是给服务器发送了一个GET请求。
- POST:用于向服务器发送数据,通常用来支持HTML表单(input、select、textarea),表单中的数据会被发送到服务器。
- HEAD:该方法与GET类似,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等。
- PUT:和GET从服务器获取资源相反,PUT用于向服务器写入资源;PUT的语义就是让服务器用请求的主体部分创建一个请求URL命名的文档,如果存在就替换;出于安全原因不是所有的服务器都能实现。
- TRACE:该方法是让WEB服务器端将之前的请求通信环回给客户端的方法。可以用来确认连接过程中发生的一系列操作。
- DELET:此方法用于要求服务器删除请求的URL,和PUT一样,服务器可能会不支持(删除资源)。
- OPTIONS:此方法用于请求 web服务器告知其支持的各种功能。
5. 状态码200,301,304,403,404,500,503分别代表什么意思 (难度****
)
- 200 OK:请求被成功地完成,所请求的资源发送回客户端。
- 301 Moved Permanently:客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
- 304 Not Modified:客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
- 403 Forbidden:对请求资源的访问被服务器拒绝了。
- 404 Not Found:请求所希望得到的资源在服务器上无法找到。
- 500 Internal Server Error:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
- 503 Service Unavailable:服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。
6. 报文有哪几部分组成? (可选 难度****
)
- HTTP报文有两类:
- 请求端(客户端)的HTTP报文叫做请求报文。
- 响应端(服务端)的HTTP报文叫做响应报文。
- HTTP报文大致可以分为报文首部和报文主体两部分:
- 请求报文:(报文首部+空行+报文主体)
- 请求报文首部:
- 请求行:(包含用于请求的方法、URI、HTTP版本)
- 请求首部字段
- 通用首部字段
- 实体首部字段
- 其他
- 响应报文:(报文首部+空行+报文主体)
- 响应报文首部:
- 状态行:(包含表明响应结果的状态码,HTTP版本)
- 响应首部字段
- 通用首部字段
- 实体首部字段
- 其他
7. 请求头的格式和作用是什么?给个范例截图说明 (可选 难度****
)
请求头
Host:URI信息
Accept:浏览器能接收的资源类型
Accept-Encoding:告诉服务器能够发送哪些编码
Accept-Language:告诉服务器能够发送哪些语言
Cache-Control:缓存控制
Connection:客户端和服务器是否保持连接
Cookie:浏览器缓存
User-Agent:HTTP客户端程序的信息
8. 首部的格式和作用是什么?给个范例截图说明 (可选 难度****
)
首部包括:普通首部(General)、请求首部(Request Headers)、响应首部(Response Headers)。
首部- 普通首部:请求报文和响应报文双方都会使用的首部。
首部 |描述
-------| ------| ------
Cache-Control| 控制缓存
Connection|控制不再转发给代理的首部字段、管理持久连接
Data|创建HTTP报文的时间和日期
pragma|报文指令
Trailer|事先说明在报文主体后记录了哪些首部字段,可以应用在HTTP1.1版本分块传输编码时使用。
Transfer-Encoding|规定了传输报文主体时采用的编码方式
Upgrade|用于检测HTTP协议及其他协议是否可以使用更高版本进行通信
Via|追踪客户端与服务器之间的请求响应和响应报文的传输途径。还可以避免请求回环的发生。
Warning|告知用户一些与缓存相关问题的警告
- 请求首部:从客户端往服务器端发送请求报文中所使用的首部。用于补充请求的附加信息、客户端信息、对响应内容相关优先级等内容。
首部 |描述
-------| ------| ------
Accept |用户代理可处理的媒体类型
Accept-Charset |优先的字符集
Accept-Encoding |优先的内容编码
Accept-Language |优先的语言(自然语言)
Authorization Web |认证信息
Expect |期待服务器的特定行为
From |用户的电子邮箱地址
Host |请求资源所在服务器
If-Match |比较实体标记(ETag)
If-Modified-Since |比较资源的更新时间
If-None-Match |比较实体标记(与 If-Match 相反)
If-Range |资源未更新时发送实体 Byte 的范围请求
If-Unmodified-Since |比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards |最大传输逐跳数
Proxy-Authorization |代理服务器要求客户端的认证信息
Range |实体的字节范围请求
Referer |对请求中 URI 的原始获取方
TE |传输编码的优先级
User-Agent |HTTP 客户端程序的信息
- 响应首部:从服务器端向客户端返回响应报文时使用的首部。用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。
首部 |描述
-------| ------| ------
Accept-Ranges|是否接受字节范围请求
Age|推算资源创建经过时间
ETag|资源的匹配信息
Location|令客户端重定向至指定URI
Proxy-Authenticate|代理服务器对客户端的认证信息
Retry-After|对再次发起请求的时机要求
Server|HTTP服务器的安装信息
Vary|代理服务器缓存的管理信息
WWW-Authenticate |服务器对客户端的认证信息
9. 主体的作用是什么?给个范例(可选 截图说明难度****
)
主体就是客户端和服务端之间传输的主要内容。
主体可以承载很多类型的数字数据:图片、视频、HTML文档、软件应用程序等。
报文主体
10. 简述浏览器缓存是如何控制的(可选 难度*****
)
(1)缓存的分类
缓存分为服务端侧(server side,比如 Nginx、Apache)和客户端侧(client side,比如 web browser)。
服务端缓存又分为 代理服务器缓存 和 反向代理服务器缓存(也叫网关缓存,比如 Nginx反向代理、Squid等),其实广泛使用的 CDN 也是一种服务端缓存,目的都是让用户的请求走”捷径“,并且都是缓存图片、文件等静态资源。
客户端侧缓存一般指的是浏览器缓存,目的就是加速各种静态资源的访问,想想现在的大型网站,随便一个页面都是一两百个请求,每天 pv 都是亿级别,如果没有缓存,用户体验会急剧下降、同时服务器压力和网络带宽都面临严重的考验。
(2)浏览器缓存控制机制有两种:HTML Meta标签 vs. HTTP头信息
①HTML Meta标签控制缓存
浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下:
<pre>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</pre>
上述代码的作用是告诉浏览器当前页面不被缓存,每次访问都需要去服务器拉取。使用上很简单,但只有部分浏览器可以支持,而且所有缓存代理服务器都不支持,因为代理不解析HTML内容本身。而广泛应用的还是 HTTP头信息 来控制缓存,下面我主要介绍HTTP协议定义的缓存机制。
②HTTP头信息控制缓存
- 浏览器请求流程
-
控制缓存策略:
Expires :Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。不过Expires 是HTTP 1.0的东西,现在默认浏览器均默认使用HTTP 1.1,所以它的作用基本忽略。Expires 的一个缺点就是,返回的到期时间是服务器端的时间,这样存在一个问题,如果客户端的时间与服务器的时间相差很大(比如时钟不同步,或者跨时区),那么误差就很大,所以在HTTP 1.1版开始,使用Cache-Control: max-age=秒替代。
Cache-control:Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。- Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。
- If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。
Etag/If-None-Match:Etag/If-None-Match也要配合Cache-Control使用。
- Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
- If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。
11. 下图各个参数是什么意思(可选 难度*****
)
-
General
Request URL: 请求的资源地址。
Request Method: 请求的方式,此时为PUT。
Status Code: 状态码,此时为200,成功。
Remote Address: 请求的服务器的IP地址和端口号,此时为121.40.201.213:80。 -
Response Headers
Connection: keep-alive: 使客户端到服务器端的连接持续有效。
Content-Length: Content-Length首部告诉浏览器报文中实体主体的大小。此时为12。
Content-Type: 决定如何显示返回的消息实体,此时是json格式。
Date: 创建HTTP报文的时间和日期。
Server: 服务器上使用的应用程序的信息,此时为nginx/1.6.2。
X-Powered-By: 告诉HTTP客户端处理请求和响应的是什么引擎,此时为Express。 -
Request Headers
Accept: 用户代理可处理的媒体类型。
Accept-Encoding: 优先的内容编码。
Accept-Language: 优先的语言(自然语言)。
Connection: keep-alive: 使客户端到服务器端的连接持续有效。
Content-Length: Content-Length首部告诉浏览器报文中实体主体的大小。此时为56。
Content-Type: 决定如何显示返回的消息实体,此时设置编码为UTF-8。
Cookie: 浏览器缓存。
Host: 使用的主机。
Origin: 说明最初的请求时从哪里发出。
Referer: 告诉浏览器页面是从哪个页面连接过来。
User-Agent: HTTP客户端程序的信息。
X-Requested-With: 在服务器段判断request来自Ajax请求(异步)还是传统请求(同步)。此时为Ajax请求(异步)。
版权归本人及饥人谷所有,转载请注明出处。