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