-
OSI 七层模型指什么 (难度***)
OSI(Open System Interconnection), 即开放式系统互联通信模型, 层次划分:
- 应用层
决定了向用户提供应用服务时的通信活动, 如http, https, ftp就是应用层协议, DNS服务也位于应用层 - 传输层
提供处于网络链接中两台计算机的数据运输, 该层的协议有TCP和UDP协议 - 网络层
决定数据传输的路径, 该层协议有IP协议 - 链路层
用来处理链接网络的硬件部分
- 应用层
注意: 其中表示层和会话层已被弃用, 因为应用层有类似的功能
-
HTTP 的工作原理是什么? (难度***)
- 域名解析, 根据DNS把域名解析成对应的IP地址
- 根据http协议生成请求报文
- 根据TCP协议将请求报文分割, 以数据包的形式发送
- 根据IP协议确定传输的路径
- 服务器接收到请求报文, 生成响应, 以同样的方式返回给客户端
-
URI 的格式是什么?常见的协议有哪些 (难度***)
- URI格式
例如:
http://user:pass@www.example.com:80/dir/index.html?uid=1#ch1
查询字符串: 可以传入任意参数
片段标识符: 可以标记出已获取资源中的子资源(文档内的某个位置) - 常用的协议
常用的应用层协议有HTTP, FTP, SSH
- URI格式
状态码200,301, 304,403,404,500,503分别代表什么意思 (难度****)
200: OK
表示成功, 请求被正常处理
301: Move Permanently
永久性重定向, 请求的资源已分配了新的URI
304: Not Modified
距离上次访问资源未修改
403: Forbidden
没有权限, 请求被服务器拒绝
404: Not Found
服务器上无法找到请求的资源
500: Internal Server Error
服务器执行请求发生错误
503: Service Unavailable
服务器处于超负载或者正在进行停机维护-
报文有哪几部分组成? (可选 难度****)
-
请求报文组成
请求行
请求头
空行
请求体
其中空行的主要功能是把请求头和请求体分开, 空行后就是请求体的内容, 例如查询字符串
-
name=gqc&age=18&gender=male
- 响应报文组成
状态行
响应头
空行
响应体
其中的响应体可能是一个html页面或其他资源
-
请求头的格式和作用是什么?给个范例截图说明 (可选 难度****)
- 格式
字段名: 字段值 - 作用
因为http是无状态协议, 所以, 就需要在请求头中声明本次请求的信息和执行的动作, 让服务器知道你是谁, 你想干什么
- 格式
-
首部的格式和作用是什么?给个范例截图说明 (可选 难度****)
chrome的general只是浏览器对于本次请求和响应的综述, 是浏览器自己生成的, 并不包含在http协议的内容当中
-
请求行
请求行的格式为:
method uri http-version
请求行的作用:
描述了请求的方法, 资源的地址和HTTP协议的版本 -
状态行
状态行的格式为:
http-version status status-content
状态行的作用:
描述本次响应的状态
-
-
主体的作用是什么?给个范例(可选 截图说明难度****)
-
请求体
请求体常用的格式querystring, 也可以是json
-
Content-Type: application/x-www-from-urlencoded
//例如name=gqc&age=18&gender=male
请求体作用:
本次请求的内容
- 响应体
响应体的作用:
返回请求的内容, 可能是html, json格式的数据或者其他资源
-
简述浏览器缓存是如何控制的(可选 难度*****)
首先, 当用户访问一个页面时, 浏览器会先判断是否使用缓存, 如何判断呢?第一, 根据Expires, 这是之前服务器响应使传回来的有效时间,使用的是浏览器生成是日期. 第二, 根据Cache-Control的max-age, 这也是之前服务器响应时返回的最长有效时间, 使用的是秒数, 比Expires的优先级更高. 假如在有效期内, 浏览器就使用缓存, 如果在有效期外, 浏览器再发起请求去判断资源的内容是否更新, 主要有两种方式. 第一, 把之前的Last-Modified作为If-Modified-Since字段的值, 去和服务器上的Last-Modified判断. 第二, 把之前ETag的值作为If-None-Match字段的值去和服务器上的ETag的值进行判断(ETag是文件唯一的字符串, 根据Hash算法生成). 如果请求资源的内容没有变化, 就使用缓存, 否则请求新的内容
注意:- 如果同时存在, ETag的的优先级比Last-Modified的优先级更高
因为ETag的出现就是为了解决Last-Modified的问题, 例如Last-Modified事件只能精确到秒级, 如果文件在短时间内多次修改, 例如某些文件会定期生成, 但是内容不变等 - 如果用户使用F5刷新的时候, 会忽略Expire/Cache-Control的设置, 会再次发送请求去服务器请求,但是Last-Modified/ETag还是有效的, 如果用户使用Ctrl+F5, 会进行强制刷新, 所有缓存都将失效, 重新去服务器拉资源
- 如果同时存在, ETag的的优先级比Last-Modified的优先级更高
参考:
浏览器缓存机制浅析
网站优化:浏览器缓存控制简介及配置策略
-
下图各个参数是什么意思(可选 难度*****)
- General
这部分是浏览器对请求和响应的综述, 是浏览器自己生成的, 并不是HTTP协议的内容
Request URL: 请求资源的URL地址
Request Method: 请求的方法
Status Code: 响应的状态码
Remote Address: 请求的IP地址 - Response Headers
响应头, chrome展示的内容并不是源代码, 而是浏览器美化过后的, 更易阅读
Connection: 因为HTTP是无状态协议, 每次请求完成都会关闭连接, HTTP/1.1 加入的内容, 默认使用keep-alive持久连接, 即TCP连接默认不关闭
Content-Length: 响应体的长度
Content-Type: 响应体的格式
Date: 响应的时间, 注意, 这里的时间不是北京时间, 而是GMT时间
Server: 包含服务器处理请求的软件的信息
X-Powered-By: 程序支持, 还有例如PHP/5.3.15 - Request Headers
Accept: 接受的响应体格式, /表示任何格式都接受
Accept-Encoding: 接受的编码格式
Accept-Language: 接受的语言, zh-CN表示简体中文, 其中zh;q=0.8表示的是中文的权重是0.8, 优先接受简体中文
Connection: 表示持续链接, 不断开TCP链接
Content-Length: 表示请求体的长度
Content-Type: 请求体的格式, 现在指定的就是querystring, 表单的默认格式
Cookie: 这是之前访问的时候服务器返回的cookie
Host: 主机名
Origin: 源, 包括协议名, 主机名, 端口号
Referer: 包括了之前从那个网页到当前地址, 包括了历史记录信息
User-Agent: 表示使用的用户代理的字符串
X-Requested-With: 判断请求是AJax请求还是传统请求 - Form Data
包含了querystring字符串由浏览器解析后的内容
- General