HTTP协议

前言

在浏览器输入url(域名),背后发生了什么?
  • 浏览器输入域名

  • 去DNS服务器进行域名解析,获取域名所映射的IP

    DNS服务: 一般使用域名或主机名访问网站,因为相对于IP地址(一堆纯数字)来说,域名更容易记住,但TCP/IP协议是使用IP地址访问的,所以必须有机制把域名转换为IP,DNS就是提供域名到IP地址之间的解析服务.
    DNS的解析先读取本地的Host文件,如果本地的Host文件没有域名所对应的的IP地址映射,就会求助本地的DNS服务器,如果没找到,就会一层一层的向上一级的DNS服务器发送请求,直到DNS根服务器,最终把找到的IP地址回传

  • 浏览器根据查询到的IP地址,跟Web服务器进行通讯(通讯的协议就是http协议),发送请求,Web服务器以响应报文的形式回传到浏览器

  • 浏览器进行渲染(渲染的引擎是根据html文件进行解析,包括CSS,JS等)

什么是http?它与web之间有什么关系?
  • http: 超文本传输协议(http)是一种属于应用层的面向对象的通信协议,它允许超文本标记语言(HTML)从Web服务器传送到客户端,简单说就是传递HTML文件的一种规则

    超文本: 在文本内容(有图文内容)中有超链接,点击超链接可以跳转到其它地方. 格式有很多,最常用的就是超文本标记语言(HTML)

  • Web: 是一种基于超文本和HTTP的,全球性的,动态交互的,跨平台的分布式图形信息系统

    图形信息系统: 建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的,易于访问的直观界面,其中的文档和超级链接将Internet上的信息节点组织成一个互为关联的网状结构.

  • web是基于http而来的,是在http协议基础之上的图形优化展示

域名、主机名以及URL的区别
  • 域名: 又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识,如google.com、baidu.com等
  • 主机名: 网站名, 由服务器名+域名组成,如: www.baidu.com, www.sina.com.cn
  • URI: 统一资源标识符,用来唯一标识互联网上的信息资源,包含URL和URN
  • URN: 永久统一资源定位符, 不依赖于位置,并且有可能减少失效连接的个数
  • URL: 统一资源定位器,通过网络“位置”进行标识 如: http://host.com:80/path?query=string#hash
    host.com 可以是域名或者ip , 域名要通过DNS的服务去解析成ip才能定位到服务, 定位资源所在的服务器在互联网中的位置
    80: 端口 每一台服务器都非常多端口 ,在服务器上可以跑很多的web服务, 可以监听不同的端口, 端口用于定位物理服务器上的某个web服务, 不传端口的话是默认80端口
    path: 路由, 定义web服务下的某一路径
    query=string: 搜索参数
    #hash: 前面搜索到的资源的某一个片段

TCP/IP协议

TCP/IP协议是一系列与互联网相关联的协议集合起来的总称,其中, 分层管理是TCP/IP协议的重要特征, TCP/IP协议是由一个四层协议组成的系统,这四层分别为: 应用层(HTTP),传输层(TCP),网络层(IP)和数据链路层(网络)

  • 应用层

    应用层一般是我们编写的应用程序,决定了向用户提供的应用服务,应用层可以通过系统调用与传输层进行通讯.如:FTP(文件传输协议),DNS(域名解析协议),HTTP(超文本传输协议)等

  • 传输层

    传输层通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能

    在传输层有两个性质不同的协议:TCP(建立连接,可靠性高)和UDP(不需要建立连接,可靠性低)

    TCP三次握手
    第一次握手: 客户端发送带有SYN标志的连接请求报文段,然后进入SYN_SEND状态,等待服务端的确认
    第二次握手:服务端接收到客户端的SYN报文段后,需要发送ACK信息对这个SYN报文段进行确认,同时还需要发送自己的SYN请求信息,服务端会将上述的信息放到一个报文段(SYN+ACK报文段)中,一并发送给客户端,此时服务端将会进入SYN_RECV状态
    第三次握手:客户端接收到服务端的SYN+ACK报文段后,会向服务端发送ACK确认报文段,这个报文段发送完毕后,客户端和服务端都进入了Established状态,完成TCP三次握手
    三次握手的目的: 客户端和服务端要相互通讯,必须确认两端的接收和发能力都是正常的
    HTTP协议_第1张图片

  • 网络层

    网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方 IP

  • 数据链路层

    链路层用来处理连接网络的硬件部分,包括控制操作系统,硬件设备驱动,网络适配器以及光纤等物理可见设备.硬件上的范畴均在链路层的作用范围之内

HTTP协议

特点
  • 支持客户/服务器模式

    客户/服务器模式工作的方式是由客户端向服务器端发送请求,服务器端响应请求,并进行相应服务

  • 简单快速

    客户向服务器请求服务时,只需传送请求方法和路径

    常用请求方法有POST,GET,HEAD,每种方法规定了客户与服务器联系的类型不同

    由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通讯速度更快

  • 无连接

    无连接指的是限制每次连接只处理一次请求

    服务器处理完客户的请求,并收到客户的应答后,即断开请求,可以节省传输时间

    为了解决效率低下的问题,提出了keep-alive(持久连接)

  • 无状态

    无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,cookie和session可以解决这种问题

HTTP报文结构

Http报文头大体可分为四类: 通用报文头,请求报文头,响应报文头,实体报文头

  • 通用报文头

    首部字段名 说明
    Cache-Control 控制缓存的行为
    Connection 逐跳首部,连接的管理 keep-alive(常用): 当一个网页打开完成后,客户端和服务端之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器端的网页,会继续使用这一条已经建立的连接
    Date 创建报文的日期时间
    Pragma 报文指令
    Trailer 报文末端的首部一览
    Transfer-Encoding 指定报文主体的传输编码方式
    Upgrade 升级为其他协议
    Via 代理服务器的相关信息
    Warning 错误通知
  • 请求报文头

    首部字段名 说明
    Accept 浏览器端可以接收的媒体类型, 如:Accept: text/html,代表浏览器可以接受服务器端回发的类型为text/html,如果无法回发,则服务器返回一个406错误(Non AccepTable) q=代表权重值,范围为0-1,1为最大值,会首先返回权重最高的媒体类型
    Accept-Charset 优先的字符集
    Accept-Encoding 浏览器申明自己接收的编码方式,通常指定压缩方法(gzip,deflate)
    Accept-Language 浏览器申明自己接收的语言
    Authorization Web认证信息
    Expect 期待服务器的特定行为
    From 用户的电子邮箱地址
    Host 请求资源所在服务器(指定被请求资源的主机和端口号)
    if-Match 比较实体标记(ETag)
    if-Modified-Since 比较资源的更新时间
    if-None-Match 比较实体标记(与if-Match相反)
    if-Ranage 资源为更新时,发送实体Byte的范围请求
    if-UnModified-Since 比较资源的更新时间(与if-Modified-Since相反)
    Max-Forwards 最大传输跳转树
    Proxy-Authorization 代理服务器要求客户端的认证信息
    Range 实体的字节范围请求
    Referer 对请求方URI的原始获取方(告诉服务器我是从哪个页面链接过来的)
    TE 传输编码的优先级
    User-Agent HTTP客户端程序的信息(告知服务器,客户端使用的操作系统和浏览器的名称和版本,可以进行浏览器类型判断,做不同的兼容设计)
  • 响应报文头

    首部字段名 说明
    Accept-Ranges 是否接受字节范围请求
    Age 推算资源创建经过时间
    ETage 资源的匹配信息
    Location 令客户端重定向至指定URI
    Proxy-Authenticate 代理服务器对客户端的认证信息
    Retry-After 对再次发起请求的时机要求
    Server HTTP服务器的安装信息
    Vary 代理服务器缓存的管理信息
    WWW-Authenticate 服务器对客户端的认证信息
  • 实体报文头

    首部字段名 说明
    Allow 资源可支持的HTTP方法
    Content-Encoding 实体主体适用的编码方式
    Content-Language 实体主体的自然语言
    Content-Length 实体主体的大小(单位:字节)
    Content-Location 替代对应资源的URI
    Content-MD5 实体主体的报文摘要
    Content-Range 实体主体的位置范围
    Content-Type 报文体内对象的媒体类型
    Expires 实体主体过期的日期时间
    Last-Modified 资源的最后修改日期时间

HTTP请求方法

  • GET

    用来请求访问已被URI识别的资源,通过URL提交数据,数据能被看到,有安全限制,有大小限制

    指定资源经服务器解析后返回响应内容

  • POST

    与GET功能类似,但是更加安全,无大小限制, 一般用来传输实体的主体,主要目的不是获取响应主体的内容

  • PUT

    与POST功能相似,但PUT是幂等,而POST是不幂等的,更多把PUT用作更新对象,不常用

  • HEAD

  • DELETE:请求服务器删除指定资源

  • OPTIONS:用来查询针对请求URI指定的资源支持的方法

  • TRACE:回显服务器收到的请求,主要用于测试和诊断

  • CONNECT:开启一个客户端和所请求资源之间的双向沟通的通道,可以用来创建隧道

HTTP状态码

状态码: 用于表示网页服务器超文本传输协议响应状态的3位数字代码

  • 1XX: 代表消息,这一类型的状态码代表消息已被接受,需要继续处理,这类响应是临时响应

  • 2XX: 代表成功,代表请求已被服务器成功接收,理解,并接受

    状态码 英文名称 描述
    200 OK 请求已成功,请求所希望的响应头或者数据体将随此数据返回
    202 Accepted 已接受,已经接受请求,但未处理完成
    206 Partial Content 部分内容,服务器已经成功处理了部分GET请求
  • 3XX: 代表重定向,重定向目标在本次响应的Location域中指明

    状态码 英文名称 描述
    301 Moved Permanently 永久重定向.请求资源已被永久的移动到新的URI,返回新的信息包括新的URI
    302 Found 临时重定向,资源被临时移动,客户端应继续使用老的URI
    304 服务器资源未发生变化 告诉浏览器可以从缓存中获取所请求的资源
  • 4XX: 代表请求错误,代表了客户端看起来可能发生了错误,妨碍了服务器的处理

    状态码 英文名称 描述
    400 Bad Request 客户端请求的语法错误,服务器无法理解
    401 Unauthorized 请求要求用户的身份认证
    403 Forbidden 服务器理解客户端的请求,但拒绝执行此请求
    404 NOt Found 服务器端无法根据客户端的请求找到资源(网页),提高网站的访问速度
  • 5XX: 代表服务器错误,代表了在处理请求过程中有错误或者异常状态发生

    状态码 英文名称 描述
    500 Internal Server Error 服务器内部错误,无法完成请求
    502 Bad Gateway 服务器暂时不可用,有时是为了防止发生系统过载
    503 Service Unavailable 服务器由于在维护或已经超载而无法响应,服务器可提供一个Retry-After头信息告诉客户端什么时候可以在试一次。
    504 Gateway Timeout 网关超时
    505 HTTP Version Not Supported 服务器不支持或拒绝请求头中指定的HTTP版本
HTTP状态管理: Cookie和Session(会话跟踪技术)

目的: 解决http无状态,无记忆的问题

  • COOKIE

    Cookie是一小段的文本信息. 客户端请求服务端,如果服务器需要记录该用户状态,就像客户端颁发一个Cookie,客户端就把cookie保存起来,当客户端再次请求该网站时,客户端会把请求的网址连同该cookie一同提交给服务器,服务器检查该cookie,以此来辨认用户状态
    HTTP协议_第2张图片

  • SESSION

    session是另一种记录用户状态的机制, 保存在服务器上,客户端访问浏览器时,服务器把客户端信息以某种形式记录在服务器上, 客户端再次访问的时候.只需要从该Session中查找该客户的状态就可以了
    HTTP协议_第3张图片

  • Cookie和Session的区别

    1.存放位置不同
    2.安全性(隐私策略)不同
    3.有效期不同
    4.服务器压力不同

HTTP的长连接与短连接

http协议是基于请求/响应模式的,只要服务端给了响应,本次HTTP请求就结束了

HTTP的长连接和短连接本质上是TCP(传输层)长连接和短连接

  • 短连接(HTTP/1.0)

    浏览器和服务器每进行一次HTTP操作,就建立一次连接,结束就中断

    建立连接-> 数据传输->关闭连接

  • 长连接(HTTP/1.1) 响应头: Connection: keep-alive

    用以保持连接特性,使用长连接必须得到浏览器和服务器的支持,设置长连接时间

    建立连接->数据传输… (保持连接)…数据传输 -----关闭连接

HTTP缓存
  • 为什么要使用缓存? 提高访问速度,降低网络传输

  • 缓存的内容又是什么?
    主要针对CSS(样式),JS(脚本)以及图片一系列更新频率不大的静态资源文件,通过请求头和响应头来实现缓存

  • HTTP缓存头部字段

    Cache-Control 请求/响应头,缓存控制字段 描述
    no-store 所有内容都不缓存
    no-cache 缓存,但是浏览器使用缓存之前,都会请求服务器判断请求资源是否是最新
    max-age = x(秒) 请求缓存后的x秒不再发起请求(HTTP1.1)
    s-maxage = x(秒) 代理服务器请求源站缓存后的x秒不再发起请求,只对CDN缓存有效
    public 客户端和代理服务器(CDN)都可缓存
    private 只有客户端可以缓存
    响应头字段 描述
    expires 代表资源过期时间,由服务器返回提供(HTTP1.0),在与max-age共存的情况下,优先级要低
    Last-Modified 资源最新修改时间,由服务器告诉浏览器
    ETag 资源标识,由服务器告诉浏览器
    请求头字段 描述
    if-Modifed-Since 资源最新修改时间,由浏览器告诉服务器,和Last-Modified是一对,会进行对比
    if-None-Match 缓存资源标识,由浏览器告诉服务器(就是上一次服务器给的Etag),会进行两两对比
  • 应用场景

  1. 场景一: 让服务器和浏览器约定一个过期时间 Expire, 但是如果约定时间是一个月, 时间到了,但请求文件还没更新,就去发送请求,就多发送了多余请求
  2. 场景二: 让服务器和浏览器在约定文件过期时间的基础上,再加上一个文件最新修改时间的对比,Last-Modified(只能精确到秒)和if-Modifed-Since 如果文件过期了,在核对文件修改时间,对的上就服务器就直接发送304,直接使用本地缓存 但是last-modified只能精确到秒,如果文件的变动在秒内,就无法感知到文件的变化,浏览器无法拿到最新的文件资源
  3. 场景三: 让服务器和浏览器在过期时间expires + Last-Modified 的基础上,增加一个文件内容对比标记–Etag和If-None-Match(优先级更高),Expires不稳定, 再加入一个max-age加以替换
    HTTP协议_第4张图片
  • 缓存改进方案

    md5/hash缓存: 通过不缓存html,为静态文件添加MD5或者Hash标识,解决浏览器无法调过缓存过期时间主动感知文件变化的问题

    CDN缓存: s-maxage = x(秒) 代理服务器请求源站缓存后的x秒不再发起请求,只对CDN缓存有效.

    原理: 用户通过输入域名来访问页面,首先进行dns处理,dns解析服务器会将用户访问请求定位到离用户最近、负载最轻的cdn缓存服务器上,返回该cdn节点的ip地址,缓存服务器拿到数据后,一方面将数据返回浏览器,另一方面进行本地保存,之后再次访问,数据将从cdn缓存服务器中被返回

    CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡,内容分发,调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率.

内容协商机制

指客户端和服务器端就响应的内容资源进行交涉,然后提供给客户端较为合适的资源,内容协商会以响应资源的语言,字符集,编码方式等作为判断的基准

内容协商方式
  • 客户端驱动

    客户端发起请求,服务器发送可选项列表,客户端做出选择后发送第二次请求

  • 服务器驱动

    服务器检查客户端的请求头,并决定提供那个版本的页面

    • Accept(响应头对应:Content-Type) 告知服务器发送何种媒体类型
    • Accept-Language(响应头对应:Content-Language) 告知服务器发送何种语言
    • Accept-Charset(响应头对应:Content-Type) 何种字符集
    • Accept-Encoding (响应头对应:Content-Encoding) 采用何种编码
  • 透明协商

    某个中间设备(通常是代理缓存)代表客户端进行协商

HTTP中介
  • 代理(相同协议的通讯)

    web客户端 -> web代理 -> web服务器

    对于web客户端来说,web代理扮演的是服务端的角色,接收Request,返回Response

    对于服务端来说,web代理扮演的是web客户端的角色,发送Request,接收Response

  • 网关(不同协议的通讯)

    网关可以作为某种翻译器使用,他抽象出一种能够到达资源的方法,网关是资源和应用程序的粘合剂,扮演协议转换器的角色

    网关在一侧使用http协议,在另一侧使用另一种协议 <客户端协议> <服务器协议>

    (HTTP/)服务器端网关: 通过http协议与客户端对话,通过其他协议与服务器通讯

    (/HTTP)客户端网关: 通过http协议与服务端通讯,通过其他协议与客户端对话

HTTP2.0(基于TCP)

性能增强的核心: 二进制分帧

链接

WebSocket: 解决推送时,传统HTTP通信造成的资源浪费(如:ajax轮询)
HTTP与HTTPS的区别

你可能感兴趣的:(WEB安全,http,缓存,web,前端)