HTTP知识总结

Posted by weite122 on 2018-03-07

OSI 七层模型指什么?

  • OSI模型是开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),它定义了网络互联的7层框架,也就是开放式系统互联参考模型。
  • 第1层 物理层(Physical Layer)

    • 在局部局域网上传送帧,它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等
  • 第2层 数据链接层(Data Link Layer)

    • 负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成了帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。
    • 分为两种子层:logic link control sublayer & media access control sublayer
  • 第3层 网络层(Network Layer)

    • 决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据。例如:互联网协议(IP)等。
  • 第4层 传输层(Transport Layer)

    • 把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议义(TCP)等。
  • 第5层 会话层(Session Layer)

    • 负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。
  • 第6层 表达层(Presentation Layer)

    • 把数据转换为能与接收者的系统格式兼容并适合传输的格式。
  • 第7层 应用层(Application Layer)

    • 提供为应用软件而设的界面,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

HTTP 的工作原理是什么?

HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。
一次HTTP操作称为一个事务,其工作整个过程如下:

  1. 地址解析
  • 用客户端浏览器从URL中分解出协议名、主机名、端口、对象路径等部分,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
  1. 封装HTTP请求数据包
  • 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
  1. 封装成TCP包,建立TCP连接(TCP的三次握手)
  • 在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接。
  1. 客户机发送请求命令
  • 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可选内容。
  1. 服务器响应
  • 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
  1. 服务器关闭TCP连接(TCP的四次挥手)
  • 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

    1
    Connection:keep-alive
  • TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

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

  • URI是采用一种特定语法标识一个资源的字符串,称之为“统一资源标识符”

  • 格式:协议//用户名:密码@授权机构:端口号/路径?查询字符串#哈希

  • 例如:
    ftp://mp3:mp3@ci43198-a.ashvill.nc.home.com:33/VanHalen-Jump.mp3

  • 所有其他字符及内容中需用到的定界符也应用%转义(空格%20 /%2F)

  • 常见的几种协议:

    协议 描述
    data 链接中直接包含的Base64编码数据
    file 本地磁盘的文件
    ftp FTP服务器
    http 使用超文本传输协议的国际互联网服务器
    mailto 电子邮件地址
    magnet 可以通过对等网络下载的资源
    telnet 与基于Telnet的服务连接

HTTP 协议有几种和服务器交互的方法

  • GET

    • GET是最常用的方法,通常用于请求服务器发送某个资源

    • 我们平时在浏览器输入网页地址,就是给服务器发送了一个get请求,希望得到这个网页

  • HEAD

    • HEAD方法和GET类似,但是在服务器的响应中没有资源的内容,只有资源的一些基本信息,主要用于

      1. 在不获取资源的情况下获取资源信息(类型、大小等)

      2. 通过状态码产看资源是否存在

      3. 通过查看首部,测试资源是否被修改了

  • PUT

    • 和GET从服务器获取资源相反,PUT用于想服务器写入资源。PUT的语义就是让服务器用请求的主体部分创建一个请求URL命名的文档,如果存在就替换

    • 当然处于安全原因,并不是所有的服务器都实现,当然最近大热的RESTful API使它有了用武之地

  • POST

    • POST用于想服务器发送数据,通常用来支持HTML的表单(input、select、textarea),表单中的数据会被发送到服务器
  • TRACE

    • 客户端发送一个请求的时候,这个请求可能会穿过防火墙、代理、网关和一些其它应用程序,没个中间节点都可能修改HTTP请求,TRACE方法允许客户端在最终请求发往服务器的时候,看看它变成了什么样子

    • TRACE请求会在目的服务器端发送一个“闭环”诊断,行程最后一站服务器会弹回一条TRACE响应,并在响应主题中携带它收到的原始请求报文

  • DELETE

    • DELETE方法用于要求服务器删除请求的URL,和PUT一样,服务器可能会不支持
  • OPTIONS

    • OPTIONS方法用于请求 web服务器告知其支持的各种功能

状态码200,301,304,403, 404, 500,503分别代表什么意思

  1. 100-199 用于指定客户端应相应的某些动作。
  2. 200-299 用于表示请求成功。
  3. 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
  4. 400-499 用于指出客户端的错误。
  5. 500-599 用于支持服务器错误。
状态代码 状态信息 含义
200 OK 一切正常,对GET和POST请求的应答文档跟在后面。
206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。
301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告 诉客户,原来缓冲的文档还可以继续使用。
403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。
404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。
500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。
503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个 Retry-After头。

报文有哪几部分组成?

  • HTTP报文是简单的格式化数据块,每个报文都包含一条来自客户端的请求或者一条来自服务器的响应,由3个部分组成
  1. 对报文进行描述的起始行 —— start line
  2. 包含属性的首部块 —— header
  3. 可选的包含数据的主体部分 —— body
1
2
3
4
5
HTTP/1.0 200 OK
content-type: text/plain
content-length: 19

Hi, I'm a message

请求头的格式和作用是什么?首部的作用是什么?主体的作用是什么?给个范例截图说明

  • HTTP首部规定了一个请求的约束和规则,以键值对的形式呈现。本例中的头部键值对分别表达了以下意思:

    • Host: host_name 访问的宿主服务器是host_name
    • Content-Type: text/xml 定义文件接收类型为text/xml格式接收
    • Content-Length: 18 消息实体的传输长度,压缩后的message-body的长度为18字节
    • If-Modified-Since: Sat, 02 May 2015 16:17:00 GMT 浏览器最后修改页面缓存的时间,可以让服务器与自己的数据更改时间进行比较
    • If-None-Match: “03fb33c0bfcc” If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能
    • Pragma: Public 指定了缓存的规则,本例子中的参数Public意味着可以被任何缓存所缓存
    • Accept: text/html 浏览器端可以接受的媒体类型,本例中指定为html文档
    • Accept-Encoding: gzip 指定了代码传输的压缩方式,本例中指定了gzip压缩方式

    请求主体的内容由传输者定义,传递了客户端到服务器的内容,其格式可以任意指定。本例中传递了两个键值对。

简述浏览器缓存是如何控制的

  • 浏览器第一次请求a.jpg 时,服务器会发送完整的文件并附带额外信息,其中Etag 是 对a.jpg文件的编码,如果a.jpg在服务端未被修改,这个值就不会变
1
2
Cache-Control: max-age=300
ETag:W/"e-cbxLFQW5zapn79tQwb/g6Q"
  • 浏览器把a.jpg和额外信息保存到本地。假如浏览器在300秒以内再次需要获取a.jpg时,浏览器直接从缓存读取a.jpg(200, from xx cache)。假如浏览器在300秒之后再次需要获取a.jpg时,浏览器发现该缓存的文件已经不新鲜了,于是就向服务器发送请求 重新获取a.jpg, 在发送请求的时候附带刚刚保存的a.jpg的ETag ( If-None-Match:W/“e-cbxLFQW5zapn79tQwb/g6Q”)。 服务器在接收到请求后拿浏览器请求的 Etag 和当前文件重新计算后端 Etag 做个比较,如果二者相等表示文件在未修改则发送个短消息(响应头,不包含图片内容, 304),如果二者不等则发送新文件和新的 ETag,浏览器获取新文件并更新该文件的 Etag。

  • 与 ETag 类似功能的是Last-Modified/If-Modified-Since。当资源过期时(max-age超时),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(200);若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 ,告知浏览器继续使用所保存的cache。

下图各个参数是什么意思

257149f7-1e11-4262-9b15-159389db83c6.jpg

  • 请求的URL为http://note.rouyu.site/api/articles/56fe491293caf367f913d
  • 请求方法为PUT
  • 请求正常状态码为200
  • 请求远程地址(实际IP和端口)为:131.40.201.213:80
  • 请求TCP链接线路保持
  • 请求长度为12字节
  • 请求格式采用Json
  • 请求日期
  • 服务器采用nginx代理
  • 代理框架是Express
  • 请求的格式为任何格式
  • 编码接受gzip,deflate,sdch* 请求的URL为http://note.rouyu.site/api/articles/56fe491293caf367f913d
  • 请求方法为PUT
  • 请求正常状态码为200
  • 请求远程地址(实际IP和端口)为:131.40.201.213:80
  • 请求TCP链接线路保持
  • 请求长度为12字节
  • 请求格式采用Json
  • 请求日期
  • 服务器采用nginx代理
  • 代理框架是Express
  • 请求的格式为任何格式
  • 编码接受gzip,deflate,sdch
  • 语言接受中文,对中文喜好为0.8
  • 消息体长度为56字节
  • 请求格式为x-www-form-urlencode,charset=utf-8
  • Cookie为客户端字符串,储存在本地的数据,辨别用户的身份加密字符串
  • Hosts文件是一个用于储存计算机网络中各节点信息的计算机文件。这个文件负责将主机域名映射到相应的IP地址,此时的IP为note,ruoyu.site
  • 传输的主机和来源站点是note.ruoyu.site,从note.ruoyu.site链接过来
  • 传递信息的方式是Ajax。
  • 用户代理软件的应用类型、操作系统、软件开发商以及版本号。
  • 表单信息article: 若愚@饥人谷