1. OSI 七层模型指什么?
- 概念:OSI七层模型通过七个不同层次的结构模型,使不同系统不同网络能够进行可靠的通讯。因此其最主要的功能就是帮助不同类型的主机实现数据传输 。完成中继功能的节点通常称为中继系统。在OSI七层模型中,处于不同层的中继系统具有不同的名称。
-
层次:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层:
- 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
- 数据传输层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
- 网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
- 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
- 会话层:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。
- 表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密。
- 应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。
- 概括:简言之,下4层,主要完成通信子网的功能,而上3层,主要完成资源子网的功能。
参考:OSI七层模型详解
2. HTTP 的工作原理是什么?
- 对输入的地址进行解析,从中解析出协议名,主机名,端口号,对象路径等;
- 封装HTTP请求报文;
- 封装成TCP包,进行TCP连接;
- 客户机发送请求命令;
- 服务器收到请求报文,处理报文,返回响应内容和响应报文;
- 服务器关闭TCP连接(可以通过Connection: keep-alive保持存在路线,但是连接断开状态);
- 客户机收到响应报文和响应内容,解析渲染呈现。
3. URI 的格式是什么?常见的协议有哪些
- URI:统一资源标识符;
- URL:统一资源定位符;
-
区别:
可以看出,URL是URI的子集,统一资源标识符有多种形式,URL只是其中的比较常用的一部分。 -
格式:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<hash>
-
<scheme>
:协议,常见的有http,https,ftp; -
<user>:<password>
:user和password现在不常见了,不会在URL明文书写用户名和密码了,都是通过登录的方式; -
<host>
:主机可以是IP地址或者域名; -
:<port>
:端口号用来区分主机上的进程,方便找到web服务器,http默认是80; -
<path>
:path是资源的路径,也就是存放位置,不一定和物理路径完全对应,符合web服务器路由约定即可; -
<params>
:params,在一些协议中需要参数来访问资源,例如ftp是二进制还是文本传输,参数是名值对,用分号隔开; -
<query>
:查询语句,这个是get请求最常用的传递参数方式了 ?a=1&b=2&=3; -
<hash>
:hash也成为片段,设计为标识文档的一部分,很多MVVM框架用作了路由功能; - 常见协议:http,https,ftp,ssh
4. HTTP 协议有几种和服务器交互的方法
- GET:通常用于请求服务器发送某个资源;
- POST:向服务器发送数据,通常用来支持HTML的表单(input,textarea,select),表单中的数据会被发送到服务器;
- HEAD:HEAD方法和GET类似,但是在服务器的响应中没有资源的内容,只有资源的一些基本信息,主要用于:
- 在不获取资源的情况下获取资源信息(类型、大小等);
- 通过状态码产看资源是否存在;
- 通过查看首部,测试资源是否被修改了;
- PUT:和GET从服务器获取资源相反,PUT用于想服务器写入资源,出于安全原因,并不是所有的服务器都实现;
- TRACE:客户端发送一个请求的时候,这个请求可能会穿过防火墙、代理、网关和一些其它应用程序,没个中间节点都可能修改HTTP请求,TRACE方法允许客户端在最终请求发往服务器的时候,看看它变成了什么样子;
- DELETE:DELETE方法用于要求服务器删除请求的URL,和PUT一样,出于安全考虑,服务器可能会不支持
- OPTIONS:用于请求 web服务器告知其支持的各种功能。
5. 状态码200, 301, 304, 403, 404, 500, 503分别代表什么意思?
- 200:请求成功;
- 301:重定向,新的URL在Location头中给出,浏览器应该自动地访问新的URL;
- 304:未变更,原来缓冲的文档还可以继续使用;
- 403:无权访问,资源不可用。服务器理解客户的请求,但拒绝处理它;
- 404:未找到,无法找到指定位置的资源;
- 500:服务器遇到了意料不到的情况,不能完成客户的请求;
- 503:服务器超负载或停机维护。
6. 报文有哪几部分组成?
- 请求报文:
- 请求行
- 请求头
- 空行
- 请求体
- 响应报文:
- 状态行
- 响应头
- 空行
- 响应体
-
eg:
其中的MIME Fields就是空行和响应体(或空行和请求体)的位置。
7. 请求头的格式和作用是什么?给个范例截图说明
- 格式:关键字:值对
- 作用:
- Accept:告诉服务器能够发送那些媒体类型;
- Accept-Encoding:告诉服务器能够发送哪些压缩格式;
- Connection:客户端和服务器是否保持连接;
- Host:接收请求的服务器的主机名和端口号;
- Origin:请求的网站源信息;
- Referer:提供了包含当前请求URI的文档的URL,告诉服务器自己来源;
- User-Agent:发起请求的客户端应用程序。
8. 首部的格式和作用是什么?给个范例截图说明
- 格式:关键字:值对
- 作用:
- Request:请求的URL;
- Request Method:请求的方法;
- Status Code:状态码和状态短语;
- Remote Address:服务器的IP地址和端口号。
9. 主体的作用是什么?给个范例
主体就是客户端和服务器传输的核心内容,通常是querystring或文本,有的可以是json,而图片是二进制码。
10. 简述浏览器缓存是如何控制的?
- 浏览器缓存机制,其实就是HTTP协议定义的缓存机制和HTML的Meta标签缓存黁机制。
- 如果浏览器请求时,没有缓存,则向服务器请求内容,通过缓存机制判断是否需要缓存。
- 如果浏览器请求时,存在缓存,那么首先看缓存是否在有效期,这里是通过HTTP的Cache-control和Expires指明的有效期,Cache-control优先级较高,设置更加精细,是HTTP1.1新定义的。不过两者的作用大体相同。
- 如果没过期则读取缓存,如果缓存过期了,那么会查询其他定义:
-
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也要配合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:概括信息,浏览器自动生成概括,不是HTTP协议的内容;
- Request URL:请求的URL地址;
- Request Method:请求的方法;
- Status Code:响应的状态码和状态短语;
- Remote Address:请求的IP地址和端口号;
- Response Headers:响应头部;
- Connection:连接状态,每次请求完成后都会关闭HTTP连接,为了优化访问,默认设置keep-alive保持连接,即TCP/IP连接不关闭;
- Content-Length:内容长度;
- Content-Type:内容类型,这里是json类型;
- Date:响应事件,这里是GMT国标时间;
- Server:服务器应用软件信息;
- X-Powered-By:告知网站是用何种语言或框架编写的;
- Request Headers:请求头部;
- Accept:能够接受的响应体格式,/表示任何格式均可;
- Accept-Encoding:能够接受的编码格式;
- Accept-Language:能够接受的语言,zh-CN是简体中文,q=0.8是权重0.8,优先考虑简体中文;
- Cookie:缓存;
- Host:服务器主机名;
- Origin:源;
- Referer:网站的来源信息,包括历史记录信息;
- User-Agent:客户端代理信息;
- X-Requested-With:判断是Ajax请求还是HTTP传统请求;
- Form-Data:从querystring中得到的表单数据;
- article:数据的文章标题。
本文归本人和饥人谷所有,如需转载请注明出处