HTTP

作者: 进击的阿群 | 来源:发表于2016-10-19 10:32 被阅读112次

1. OSI 七层模型指什么?

  • 概念:OSI七层模型通过七个不同层次的结构模型,使不同系统不同网络能够进行可靠的通讯。因此其最主要的功能就是帮助不同类型的主机实现数据传输 。完成中继功能的节点通常称为中继系统。在OSI七层模型中,处于不同层的中继系统具有不同的名称。
  • 层次:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层:
    七层模型
  • 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
  • 数据传输层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
  • 网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
  • 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
  • 会话层:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。
  • 表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密。
  • 应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。
  • 概括:简言之,下4层,主要完成通信子网的功能,而上3层,主要完成资源子网的功能。

参考OSI七层模型详解

2. HTTP 的工作原理是什么?

  • 对输入的地址进行解析,从中解析出协议名,主机名,端口号,对象路径等;
  • 封装HTTP请求报文;
  • 封装成TCP包,进行TCP连接;
  • 客户机发送请求命令;
  • 服务器收到请求报文,处理报文,返回响应内容和响应报文;
  • 服务器关闭TCP连接(可以通过Connection: keep-alive保持存在路线,但是连接断开状态);
  • 客户机收到响应报文和响应内容,解析渲染呈现。

3. URI 的格式是什么?常见的协议有哪些

  • URI:统一资源标识符;
  • URL:统一资源定位符;
  • 区别
    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. 简述浏览器缓存是如何控制的?

web缓存流程图
  • 浏览器缓存机制,其实就是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:数据的文章标题。

本文归本人和饥人谷所有,如需转载请注明出处

相关文章

网友评论

    本文标题:HTTP

    本文链接:https://www.haomeiwen.com/subject/yuboyttx.html