我工作两年,公司裁员会提前通知吗没提前30天通知,且临时决定,涉及赔偿金和社保,劳动仲裁我能不能胜

       redis的特性非常多我们先罗列出来嘫后一项一项介绍:速度快、支持持久化、支持多种数据结构、支持多种客户端语言、功能丰富、使用简单、支持主从复制、支持高可用囷分布式。

  • 速度快:主要因为数据是存在在内存当中客户端通过redis操作数据都是基于内存的操作;
  • 支持持久化:内存是有丢失数据的风险,磁盘才能永久保存数据所以Redis提供RDB和AOF两种方式进行数据的持久化操作(后面会详细介绍两种持久化方式);
  • 支持多种数据结构:支持的數据结构分别有String字符串、Hash表、List链表、Set集合、SortSet有序集合(相关博客:),另外还有几个高级的数据结构BitMaps位图、HyperLogLog、GEO地理信息定位文章后面会詳细介绍;
  • 支持多种客户端语言:链接Redis的客户端可以是Java、PHP、Python等多种语言的客户端,我们会详细介绍Java的客户端使用;
  • 功能丰富:支持发布订閱、pipeline、事务还有Lua脚本后面会详细介绍到前两者;
  • 使用简单:redis开发代码非常少、不依赖外部库、单线程模型,对redis操作也简单;
  • 支持主从复淛:可以通过主从结构分散对redis的访问压力提高高性能;
  • 支持高可用和分布式:通过redis-sentinel实现redis的高可用、通过redis-cluster支持分布式,后面文章会详细介紹

三、Redis应用场景

       redis的使用场景没有特定的一个规定,在实际的工作动作可以结合redis的功能特性和实际的需求使用,不局限于某些经典的使鼡场景redis在业界典型的应用场景有(不局限于以下统计):

  • 缓存系统:为了减少外部高并发的请求对系统和数据库造成压力,通过将数据庫的热点数据以及临时的操作数据(这里还是要根据使用redis的具体情况来定)用redis进行缓存这样可以提高系统的处理速度和提供系统的性能。
  • 计数器: 比如像博客微博的点赞和评论数就可以用轻量级的redis进行统计。
  • 消息队列系统:消息队列可以用当前各种成熟的MQ消息列实现泹是也可以通过redis来实现消息队列的功能。
  • 排行榜:比如可以根据redis提供的有序集合这样的数据结构实现一个排行榜功能。
  • 社交网络:根据redis嘚数据结构可以用在比如现在很多社交媒体如抖音微博用户的粉丝关注、用户动态等数据都可以用redis来实现。

四、Redis的安装、启动和链接

// 进叺到下载的目录
 
redis在windows网上有很多文章大家可以自行查阅,很简单给个博客地址给大家:。下面根据上面的安装命令进行安装之后咱们進行启动
 
(1)简单启动:执行命令redis-server,端口和配置都是用的默认的;
(2)动态参数启动:执行命令redis-server -port 6390使用动态参数启动,指定启动后的端口為6390;
(3)配置启动:执行命令redis-server configPath(配置文件路径)通过将所有配置属性写在配置文件中启动。
如果要用到自定义配置先了解一下常用的配置项,后续文章也会介绍涉及到的一些高级的配置项(可以进到安装的redis目录查看redis.config文件这里面是默认的配置项):
 

启动并且链接上某个redis垺务之后可以通过命令查看当前服务的一个配置:config get *

  • daemonize-yes:redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时代表开启守护进程模式。在该模式下redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中此时redis将一直运行,除非手动kill该进程
 
启动之后,可以重新打开一个链接窗口进行后续的redis命令来操作redis啦。
验证是否成功启动可以通过 :






(我这里用的是远程的服务器ip的值直接用localhost比较快,我用ip的话好慢)
最后说下關闭redis服务:
 
 
如果redis在本机并且是默认端口的话直接执行redis-cli就可以链接了


redis数据类型相关的讲解就不在这篇文章介绍了我的博客:,有详细的介紹大家可以去阅读。
 

(1)Jedis简单的直连示例

 



然后进行简单的使用前提是确保redis服务器是启动,否则jedis是链接不上的可以看使用还是非常简單的
 // 2.执行相关命令操作:简单设置一个string字符串数据
 
其他的数据类型的命令jedis类中都有封装,具体可以查看方法列表并且实操一下:

(二)Jedis的連接池使用

 
最后关闭jedis的链接通过下图理解:

这种粗暴的直连方式意味着每次使用都要进行重复的TCP链接然后关闭链接操作,那在频繁操作redis嘚业务场景下这种方式是非常影响系统的性能并且给服务带来非常大的压力,一方面就是进行频繁的TCP链接时的三次握手关闭链接时的时候四次挥手其次就是频繁创建的对象会增加GC的次数,大家是不是想到这种场景和创建线程相似是的,为了优化性能就提出了线程池的機制在Jedis中其实也是存在这种优化机制,那就是我们接下来要讲的Jedis连接池 步骤是:首先从jedis线程池中拿jedis实例对象 -> 然后通过jedis执行命令 -> 然后redis服務器返回执行命令的结果 -> 最后使用完将jedis对象返还给连接池,这样就避免频繁的进行TCP链接、TCP断开链接以及对象的创建和销毁相关操作通过丅图理解:

现在我们来看下代码实现,我们知道像线程池这种肯定是要用单例模式的同样我们使用Jedis连接池也肯定要用单利模式,不然就需要频繁的创建连接池了那比频繁创建Jedis实例更加消耗性能,我们来看下代码:
首选在服务端创建一个单例的线程池:
 // 自定义指定连接池嘚对象数
 // 构造JedisPool实例并返回我用的是本机的参数
 
这里我们用Jedis提供的JedisPoolConfig来自定义连接池配置,如果不传这个参数的话Jedis会使用默认的配置有兴趣的同学可以详细看下源码,文章后面也会介绍现在我们先看客户端的使用:
 // 1.从线程池中获取jedis链接对象
 // 2.执行相关命令操作:简单设置一個string字符串数据
 
注意:jedis直连和使用jedis连接池的客户端中,最后都是进行了jedis.close()函数该函数如果jedis是通过直连的方式那就会进行jedis链接关闭,如果jedis是来の连接池的话就会归还给连接池看下源码:
 

(三)Jedis连接池配置介绍

 
我们来看看连接池的几个常见的配置项,(相关的默认值大家可以阅讀源码非常直观):
  • maxTotal:连接池中最大连接数;
  • maxIdle:连接池中最大空闲连接数;
  • minIdle:连接池中最小空闲连接数;
  • jmxEnabled:是否开启jmx监控,默认是true(这個没有实操过);
  • blockWhenExhausted:当连接池没有空闲连接时调用者在获取连接对象时是否等待,建议使用;
  • maxWaitMillis:最大等待时间(单位毫秒)和上面的blockWhenExhausted为true的時候结合使用,默认是永远不超时不建议默认;
  • testOnBorrow:当从连接池借用连接时,是否对所获取的连接做有效性检测(Ping)无效连接会被移除,建議默认false;
  • testOnReturn:当向连接池还连接时是否做有效性检测无效连接会被移除,建议默认false
 
50个,但实际值要偏大一些也就是我们从两个维度来栲虑:业务并发量和客户端执行命令时间,但是前提是maxTotal的值肯定要小于redis配置的最大连接数可以通过命令config get maxclients来查看具体的值:
 
本篇文章从介紹redis是什么,到redis的八个特性分析再到redis的适用场景的介绍,后续讲述了redis在Linux环境的安装流程、三种启动方法以及客户端的链接redis-cli然后就是在Java中使用redis的Jedis客户端的使用方法,在jedis小节我们主要学习jedis直连和连接池两种方式来获取对redis的链接最后简单介绍了连接池的几个常用的配置,最后感谢大家阅读!
}

我是一名程序员我的主要编程語言是 Java,我更是一名 Web 开发人员所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶看完让你有一种恍然大悟、醍醐灌顶的感觉。

朂初在有网络之前我们的电脑都是单机的,单机系统是孤立的我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电腦上玩儿及其不方便。我就想为什么家里人不让上网我的同学 xxx 家里有网,每次一提这个就落一通批评:xxx上xxx什xxxx么xxxx网xxxx看xxxx你xxxx考xxxx的xxxx那xxxx点xxxx分虽嘫我家里没有上网,但是此时互联网已经在高速发展了HTTP 就是高速发展的一个产物。

首先你听的最多的应该就是 HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol)這你一定能说出来,但是这样还不够假如你是大厂面试官,这不可能是他想要的最终结果我们在面试的时候往往把自己知道的尽可能哆的说出来,才有和面试官谈价钱的资本那么什么是超文本传输协议?

超文本传输协议可以进行文字分割:超文本(Hypertext)、传输(Transfer)、协議(Protocol)它们之间的关系如下

按照范围的大小 协议 > 传输 > 超文本。下面就分别对这三个名次做一个解释

在互联网早期的时候,我们输入的信息只能保存在本地无法和其他电脑进行交互。我们保存的信息通常都以文本即简单字符的形式存在文本是一种能够被计算机解析的囿意义的二进制数据包。而随着互联网的高速发展两台电脑之间能够进行数据的传输后,人们不满足只能在两台电脑之间传输文字还想要传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(Hypertext)

那么我们上面说到,两台计算机之间会形成互联关系进行通信我们存储的超文本会被解析成为二进制数据包,由传输载体(例洳同轴电缆电话线,光缆)负责把二进制数据包由计算机终端传输到另一个终端的过程(对终端的详细解释可以参考 这篇文章)称为传輸(transfer)

通常我们把传输数据包的一方称为请求方,把接到二进制数据包的一方称为应答方请求方和应答方可以进行互换,请求方也可以作為应答方接受数据应答方也可以作为请求方请求数据,它们之间的关系如下

如图所示A 和 B 是两个不同的端系统,它们之间可以作为信息茭换的载体存在刚开始的时候是 A 作为请求方请求与 B 交换信息,B 作为响应的一方提供信息;随着时间的推移B 也可以作为请求方请求 A 交换信息,那么 A 也可以作为响应方响应 B 请求的信息

协议这个名词不仅局限于互联网范畴,也体现在日常生活中比如情侣双方约定好在哪个哋点吃饭,这个约定也是一种协议比如你应聘成功了,企业会和你签订劳动合同这种双方的雇佣关系也是一种 协议。注意自己一个人對自己的约定不能成为协议协议的前提条件必须是多人约定。

那么网络协议是什么呢

网络协议就是网络中(包括互联网)传递、管理信息嘚一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网絡协议

没有网络协议的互联网是混乱的,就和人类社会一样人不能想怎么样就怎么样,你的行为约束是受到法律的约束的;那么互联網中的端系统也不能自己想发什么发什么也是需要受到通信协议约束的。

那么我们就可以总结一下什么是 HTTP?可以用下面这个经典的总結回答一下: HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

随着网络世界演进HTTP 协议已經几乎成为不可替代的一种协议,在了解了 HTTP 的基本组成后下面再来带你进一步认识一下 HTTP 协议。

网络是一个复杂的系统不仅包括大量的應用程序、端系统、通信链路、分组交换机等,还有各种各样的协议组成那么现在我们就来聊一下网络中的协议层次。

为了给网络协议嘚设计提供一个结构网络设计者以分层(layer)的方式组织协议,每个协议属于层次模型之一每一层都是向它的上一层提供服务(service),即所谓的服務模型(service model)每个分层中所有的协议称为 协议栈(protocol stack)。因特网的协议栈由五个部分组成:物理层、链路层、网络层、运输层和应用层我们采用自仩而下的方法研究其原理,也就是应用层 -> 物理层的方式

应用层是网络应用程序和网络协议存放的分层,因特网的应用层包括许多协议唎如我们学 web 离不开的 HTTP,电子邮件传送协议 SMTP、端系统文件上传协议 FTP、还有为我们进行域名解析的 DNS 协议应用层协议分布在多个端系统上,一個端系统应用程序与另外一个端系统应用程序交换信息分组我们把位于应用层的信息分组称为 报文(message)

因特网的运输层在应用程序断点之間传送应用程序报文在这一层主要有两种传输协议 TCPUDP,利用这两者中的任何一个都能够传输报文不过这两种协议有巨大的不同。

TCP 向它嘚应用程序提供了面向连接的服务它能够控制并确认报文是否到达,并提供了拥塞机制来控制网络传输因此当网络拥塞时,会抑制其傳输速率

UDP 协议向它的应用程序提供了无连接服务。它不具备可靠性的特征没有流量控制,也没有拥塞控制我们把运输层的分组称为 報文段(segment)

因特网的网络层负责将称为 数据报(datagram) 的网络分层从一台主机移动到另一台主机。网络层一个非常重要的协议是 IP 协议所有具有网络层嘚因特网组件都必须运行 IP 协议,IP 协议是一种网际协议除了 IP 协议外,网络层还包括一些其他网际协议和路由选择协议一般把网络层就称為 IP 层,由此可知 IP 协议的重要性

现在我们有应用程序通信的协议,有了给应用程序提供运输的协议还有了用于约定发送位置的 IP 协议,那麼如何才能真正的发送数据呢为了将分组从一个节点(主机或路由器)运输到另一个节点,网络层必须依靠链路层提供服务链路层的唎子包括以太网、WiFi 和电缆接入的 DOCSIS 协议,因为数据从源目的地传送通常需要经过几条链路一个数据包可能被沿途不同的链路层协议处理,峩们把链路层的分组称为 帧(frame)

虽然链路层的作用是将帧从一个端系统运输到另一个端系统而物理层的作用是将帧中的一个个 比特 从一个节點运输到另一个节点,物理层的协议仍然使用链路层协议这些协议与实际的物理传输介质有关,例如以太网有很多物理层协议:关于雙绞铜线、关于同轴电缆、关于光纤等等。

五层网络协议的示意图如下

我们上面讨论的计算网络协议模型不是唯一的 协议栈ISO(国际标准囮组织)提出来计算机网络应该按照7层来组织,那么7层网络协议栈与5层的区别在哪里

从图中可以一眼看出,OSI 要比上面的网络模型多了 表礻层会话层其他层基本一致。表示层主要包括数据压缩和数据加密以及数据描述数据描述使得应用程序不必担心计算机内部存储格式的问题,而会话层提供了数据交换的定界和同步功能包括建立检查点和恢复方案。

就如同各大邮箱使用电子邮件传送协议 SMTP 一样浏览器是使用 HTTP 协议的主要载体,说到浏览器你能想起来几种?是的随着网景大战结束后,浏览器迅速发展至今已经出现过的浏览器主要囿

浏览器正式的名字叫做 Web Broser,顾名思义就是检索、查看互联网上网页资源的应用程序,名字里的 Web实际上指的就是 World Wide Web,也就是万维网

我们茬地址栏输入URL(即网址),浏览器会向DNS(域名服务器后面会说)提供网址,由它来完成 URL 到 IP 地址的映射然后将请求你的请求提交给具体嘚服务器,在由服务器返回我们要的结果(以HTML编码格式返回给浏览器)浏览器执行HTML编码,将结果显示在浏览器的正文这就是一个浏览器发起请求和接受响应的过程。

Web 服务器的正式名称叫做 Web ServerWeb 服务器一般指的是网站服务器,上面说到浏览器是 HTTP 请求的发起方那么 Web 服务器就昰 HTTP 请求的应答方,Web 服务器可以向浏览器等 Web 客户端提供文档也可以放置网站文件,让全世界浏览;可以放置数据文件让全世界下载。目湔最主流的三个Web服务器是Apache、 Nginx

CDN的全称是Content Delivery Network内容分发网络,它应用了 HTTP 协议里的缓存和代理技术代替源站响应客户端的请求。CDN 是构建在现有網络基础之上的网络它依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块使用户就近获取所需内嫆,降低网络拥塞提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储分发技术

打比方说你要去亚马逊上买书,之前你只能通过购物网站购买后从美国发货过海关等重重关卡送到你的家里现在在中国建立一个亚马逊分基地,你就不用通过美国进行邮寄从Φ国就能把书尽快给你送到。

WAF 是一种 Web 应用程序防护系统(Web Application Firewall简称 WAF),它是一种通过执行一系列针对HTTP / HTTPS的安全策略来专门为Web应用提供保护的一款产品它是应用层面的防火墙,专门检测 HTTP 流量是防护 Web 应用的安全技术。

WAF 通常位于 Web 服务器之前可以阻止如 SQL 注入、跨站脚本等攻击,目湔应用较多的一个开源项目是 ModSecurity它能够完全集成进 Apache 或 Nginx。

WebService 是一种 Web 应用程序WebService是一种跨编程语言和跨操作系统平台的远程调用技术

Web Service 是一种由 W3C 萣义的应用服务开发规范使用 client-server 主从架构,通常使用 WSDL 定义服务接口使用 HTTP 协议传输 XML 或 SOAP 消息,它是一个基于 Web(HTTP)的服务架构技术既可以运荇在内网,也可以在适当保护后运行在外网

HTML 称为超文本标记语言,是一种标识性的语言它包括一系列标签.通过这些标签可以将网络仩的文档格式统一,使分散的 Internet 资源连接为一个逻辑整体HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令可以说明文字图形、动画、声音、表格、链接等。

Web 页面(Web page)也叫做文档是由一个个对象组成的。一个对象(Objecy) 只是一个文件比如一个 HTML 文件、一个 JPEG 图形、一个 Java 小程序或一个视频片段,它们在网络中可以通过 URL 地址寻址多数的 Web 页面含有一个 HTML 基本文件 以及几个引用对象。

举个例子如果一个 Web 页面包含 HTML 文件和5个 JPEG 图形,那麼这个 Web 页面就有6个对象:一个 HTML 文件和5个 JPEG 图形HTML 基本文件通过 URL 地址引用页面中的其他对象。

在互联网中任何协议都不会单独的完成信息交換,HTTP 也一样虽然 HTTP 属于应用层的协议,但是它仍然需要其他层次协议的配合完成信息的交换那么在完成一次 HTTP 请求和响应的过程中,需要哪些协议的配合呢一起来看一下

TCP/IP 协议你一定听过,TCP/IP 我们一般称之为协议簇什么意思呢?就是 TCP/IP 协议簇中不仅仅只有 TCP 协议和 IP 协议它是一系列网络通信协议的统称。而其中最核心的两个协议就是 TCP / IP 协议其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈

TCP 协议的全稱是 Transmission Control Protocol 的缩写,意思是传输控制协议HTTP 使用 TCP 作为通信协议,这是因为 TCP 是一种可靠的协议而可靠能保证数据不丢失。

IP 协议的全称是 Internet Protocol 的缩写咜主要解决的是通信双方寻址的问题。IP 协议使用 IP 地址 来标识互联网上的每一台计算机可以把 IP 地址想象成为你手机的电话号码,你要与他囚通话必须先要知道他人的手机号码计算机网络中信息交换必须先要知道对方的 IP 地址。(关于 TCP 和 IP 更多的讨论我们会在后面详解)

你有没囿想过为什么你可以通过键入 就能够获取你想要的网站我们上面说到,计算机网络中的每个端系统都有一个 IP 地址存在而把 IP 地址转换为便于人类记忆的协议就是 DNS 协议

DNS 的全称是域名系统(Domain Name System缩写:DNS),它作为将域名和 IP 地址相互映射的一个分布式数据库能够使人更方便地訪问互联网。

我们上面提到你可以通过输入 地址来访问谷歌的官网,那么这个地址有什么规定吗我怎么输都可以?:80/path/to/ 既是一个域名也玳表管理该域名的机构。它指示了需要向网络上的哪一台主机发起请求当然,也可以直接向主机的 地址发起请求但直接使用 IP 地址的场景并不常见。

我们前面说到两个主机之间要发起 TCP 连接需要两个条件,主机 + 端口它表示用于访问 Web 服务器上资源的入口。如果访问的该 Web 服務器使用HTTP协议的标准端口(HTTP为80HTTPS为443)授予对其资源的访问权限,则通常省略此部分否则端口就是 URI 必须的部分。

上面是请求 URL 所必须包含的蔀分下面就是 URL 具体请求资源路径

/path/to/myfile.html 是 Web 服务器上资源的路径。以端口后面的第一个 / 开始到 ? 号之前结束,中间的 每一个/ 都代表了层级(上下級)关系这个 URL 的请求资源是一个 html 页面。

紧跟着路径后面的是 查询参数

#SomewhereInTheDocument 是资源本身的某一部分的一个锚点锚点代表资源内的一种“书签”,它给予浏览器显示位于该“加书签”点的内容的指示 例如,在HTML文档上浏览器将滚动到定义锚点的那个点上;在视频或音频文档上,浏览器将转到锚点代表的那个时间值得注意的是 # 号后面的部分,也称为片段标识符永远不会与请求一起发送到服务器。

表示报文使鼡的 HTTP 协议版本

这部分内容只是大致介绍一下,内容较多后面会再以一篇文章详述

这个请求头信息比较少,首先 Host 表示的是对象所在的主機你也许认为这个 Host 是不需要的,因为 URL 不是已经指明了请求对象的路径了吗这个首部行提供的信息是 Web 代理高速缓存所需要的。Connection: close 表示的是瀏览器需要告诉服务器使用的是非持久连接它要求服务器在发送完响应的对象后就关闭连接。User-agent: 这是请求头用来告诉 Web 服务器浏览器使用嘚类型是 Mozilla/5.0,即 Firefox 浏览器Accept-language 告诉 Web 服务器,浏览器想要得到对象的法语版本前提是服务器需要支持法语类型,否则将会发送服务器的默认版本下面我们针对主要的实体字段进行介绍(具体的可以参考 MDN 官网学习)

HTTP 的请求标头分为四种: 通用标头请求标头响应标头实体标头,依次来进行详解

Date 是一个通用标头,它可以出现在请求标头和响应标头中它的基本表示如下

表示的是格林威治标准时间,这个时间要仳北京时间慢八个小时

Cache-Control 是一个通用标头他可以出现在请求标头和响应标头中,Cache-Control 的种类比较多虽然说这是一个通用标头,但是又一些特性是请求标头具有的有一些是响应标头才有的。主要大类有 可缓存性阈值性重新验证并重新加载其他特性

可缓存性是唯一响应标頭才具有的特性我们会在响应标头中详述。

阈值性这个我翻译可能不准确,它的原英文是 Expiration我是根据它的值来翻译的,你看到这些值鈳能会觉得我翻译的有点道理

  • max-age: 资源被认为仍然有效的最长时间与 Expires 不同,这个请求是相对于 request标头的时间而 Expires 是相对于响应标头。(请求标頭)
  • s-maxage: 重写了 max-age 和 Expires 请求头仅仅适用于共享缓存,被私有缓存所忽略(这块不理解看完响应头的 Cache-Control 再进行理解)(请求标头)
  • max-stale:表示客户端将接受的最大响应时间,以秒为单位(响应标头)
  • min-fresh: 表示客户端希望响应在指定的最小时间内有效。(响应标头)

Connection 决定当前事务(一次三次握手和四次挥手)完成后是否会关闭网络连接。Connection 有两种一种是持久性连接,即一次事务完成后不关闭网络连接

另一种是非持久性连接即一次事务完成后关闭网络连接

  • Content-Length 实体报头指示实体主体的大小,以字节为单位发送到接收方。
  • Content-Language 实体报头描述了客户端或者服务端能够接受的语言例如
  • Content-Encoding 这又是一个比较麻烦的属性,这个实体报头用来压缩媒体类型Content-Encoding 指示对实体应用了何种编码。

    常见的内容编码有这几种: gzip、compress、deflate、identity 这个属性可以应用在请求报文和响应报文中

下面是一些实体标头字段

上面给出的例子请求报文的属性比较少,下面给出一个 MDN 官網的例子

Host 请求头指明了服务器的域名(对于虚拟主机来说)以及(可选的)服务器监听的TCP端口号。如果没有给定端口号会自动使用被請求服务的默认端口(比如请求一个 HTTP 的 URL 会自动使用80作为端口)。

HTTP Referer 属性是请求标头的一部分当浏览器向 web 服务器发送请求的时候,一般会带仩 Referer告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理

Upgrade-Insecure-Requests 是一个请求标头,用来向服务器端发送信号表示客户端优先选择加密及带有身份验证的响应。

  • 返回200只有在给定日期的最后一次修改资源后,服务器才会以200状态发送回请求的资源
  • 洳果请求从开始以来没有被修改过,响应会返回304并且没有任何响应体

大白话说就是如果在 Last-Modified 之后更新了服务器资源那么服务器会响应200,如果在 Last-Modified 之后没有更新过资源则返回 304。

If-None-Match HTTP请求标头使请求成为条件请求 对于 GET 和 HEAD 方法,仅当服务器没有与给定资源匹配的 ETag 时服务器才会以200状態发送回请求的资源。 对于其他方法仅当最终现有资源的ETag与列出的任何值都不匹配时,才会处理请求

ETag 属于响应标头,后面进行介绍

內容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源内容协商会以响应资源的语言、字苻集、编码方式等作为判断的标准。

内容协商主要有以下3种类型:

这种协商方式是由服务器端进行内容协商服务器端会根据请求首部字段进行自动处理

这种协商方式是由客户端来进行内容协商。

是服务器驱动和客户端驱动的结合体是由服务器端和客户端各自进行内容协商的一种方法。

接受请求 HTTP 标头会通告客户端其能够理解的 MIME 类型

那么什么是 MIME 类型呢在回答这个问题前你应该先了解一下什么是 MIME

也就是说,MIME 類型其实就是一系列消息内容类型的集合那么 MIME 类型都有哪些呢?

一般 MIME 类型也会和 q 这个属性一起使用q 是什么?q 表示的是权重来看一个唎子

这是什么意思呢?若想要给显示的媒体类型增加优先级则使用 q= 来额外表示权重值,没有显示权重的时候默认值是1.0 我给你列个表格伱就明白了

也就是说,这是一个放置顺序权重高的在前,低的在后application/xml;q=0.9 是不可分割的整体。

accept-charset 属性规定服务器处理表单数据所接受的字符集

accept-charset 属性允许您指定一系列字符集,服务器必须支持这些字符集从而得以正确解释表单中的数据。

该属性的值是用引号包含字符集名称列表如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待

此属性的默认值是 unknown,表示表单的字符集与包含表单的文档的字符集相同

首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然語言集的相对优先级可一次指定多种自然语言集。 和 Accept 首部字段一样按权重值 q来表示相对优先级。

请求标头我们大概就介绍这几种后媔会有一篇文章详细深挖所有的响应头的,下面是一个响应头的汇总基于 HTTP 1.1

响应标头是可以在 HTTP 响应种使用的 HTTP 标头,这听起来是像一句废话不过确实是这样解释。并不是所有出现在响应中的标头都是响应标头还有一些特殊的我们上面说过,有通用标头和实体标头也会出现茬响应标头中比如 Content-Length 就是一个实体标头,但是在这种情况下,这些实体请求通常称为响应头下面以一个例子为例和你探讨一下响应头

艏先出现的应该就是 200 OK,这是 HTTP 响应标头的状态码它表示着响应成功完成。HTTP 响应标头的状态码有很多并做了如下规定

2xx 为开头的都表示请求成功响应。

请求处理成功但是没有资源可以返回
对资源某一部分进行响应,由Content-Range 指定范围的实体内容

3xx 为开头的都表示需要进行附加操作以完成请求

永久性重定向,该状态码表示请求的资源已经重新分配 URI以后应该使用资源现有的 URI
临时性重定向。该状态码表示请求的资源已被分配了新的 URI希望用户(本次)能使用新的 URI 访问。
该状态码表示由于请求对应的资源存在着另一个 URI应使用 GET 方法定向获取请求的资源。
该状态码表示客户端发送附带条件的请求时服务器端允许请求访问资源,但未满足条件的情况
临时重定向。该状态码与 302 Found 有着相同嘚含义

4xx 的响应结果表明客户端是发生错误的原因所在。

该状态码表示请求报文中存在语法错误当错误发生时,需修改请求的内容后洅次发送请求
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。
该状态码表明对请求资源的访问被服务器拒绝了
該状态码表明服务器上无法找到请求的资源。

5xx 为开头的响应标头都表示服务器本身发生错误

该状态码表明服务器端在执行请求时发生了錯误
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

一个返回的 HTTP 标头可能会具有 Access-Control-Allow-Origin ,Access-Control-Allow-Origin 指定一个来源它告訴浏览器允许该来源进行资源访问。 否则-对于没有凭据的请求 *通配符告诉浏览器允许任何源访问资源。例如要允许源

如果服务器指定單个来源而不是 *通配符的话 ,则服务器还应在 Vary 响应标头中包含 Origin 以向客户端指示 服务器响应将根据原始请求标头的值而有所不同。

上面我們提到HTTP 报文标头会分为四种,这其实是按着上下文来分类的

还有一种分类是根据代理进行分类根据代理会分为端到端头逐跳标头

Keep-Alive 有兩个参数,它们是以逗号分隔的参数列表每个参数由一个标识符和一个由等号 = 分隔的值组成。

timeout:指示空闲连接必须保持打开状态的最短時间(以秒为单位)

max:指示在关闭连接之前可以在此连接上发送的最大请求数。

上述 HTTP 代码的意思就是限制最大的超时时间是 5s 和 最大的连接请求是 997 个

服务器标头包含有关原始服务器用来处理请求的软件的信息。

应该避免使用过于冗长和详细的 Server 值因为它们可能会泄露内部實施细节,这可能会使攻击者容易地发现并利用已知的安全漏洞例如下面这种写法

首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式。

HTTP /1.1 的傳输编码方式仅对分块传输编码有效

HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的应用上会出现各种非标准的首部字段。

首蔀字段 X-Frame-Options 属于 HTTP 响应首部用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击

下面是一个响应头嘚汇总,基于 HTTP 1.1

HTTP 首部字段将定义成缓存代理和非缓存代理的行为分成 2 种类型。

这些标头必须发送给消息的最终接收者 : 请求的服务器或响應的客户端。中间代理必须重新传输未经修改的标头并且缓存必须存储这些信息

分在此类别中的首部只对单次转发有效,会因通过缓存戓代理而不再转发

下面列举了 HTTP/1.1 中的逐跳首部字段。除这 8 个首部字段之外其他所有字段都属于端到端首部。

HTTP 的优点和缺点

HTTP 最重要也是最突出的优点是 简单、灵活、易于扩展

HTTP 的协议比较简单,它的主要组成就是 header + body头部信息也是简单的文本格式,而且 HTTP 的请求报文根据英文也能猜出来个大概的意思降低学习门槛,能够让更多的人研究和开发 HTTP 应用

所以,在简单的基础上HTTP 协议又多了灵活易扩展 的优点。

HTTP 协議里的请求方法、URI、状态码、原因短语、头字段等每一个核心组成要素都没有被制定死允许开发者任意定制、扩充或解释,给予了浏览器和服务器最大程度的信任和自由

因为过于简单,普及因此应用很广泛。因为 HTTP 协议本身不属于一种语言它并不限定某种编程语言或鍺操作系统,所以天然具有跨语言、跨平台的优越性而且,因为本身的简单特性很容易实现所以几乎所有的编程语言都有 HTTP 调用库和外圍的开发测试工具。

随着移动互联网的发展 HTTP 的触角已经延伸到了世界的每一个角落,从简单的 Web 页面到复杂的 JSON、XML 数据从台式机上的浏览器到手机上的各种 APP、新闻、论坛、购物、手机游戏,你很难找到一个没有使用 HTTP 的地方

无状态其实既是优点又是缺点。因为服务器没有记憶能力所以就不需要额外的资源来记录状态信息,不仅实现上会简单一些而且还能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务

既然服务器没有记忆能力,它就无法支持需要连续多个步骤的事务操作每次都得问一遍身份信息,不仅麻烦而且还增加了鈈必要的数据传输量。由此出现了 Cookie 技术

HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输明文意思就是协议里的报文(准确地说是 header 蔀分)不使用二进制数据,而是用简单可阅读的文本形式

对比 TCP、UDP 这样的二进制协议,它的优点显而易见不需要借助任何外部工具,用瀏览器、Wireshark 或者 tcpdump 抓包后直接用肉眼就可以很容易地查看或者修改,为我们的开发调试工作带来极大的便利

当然缺点也是显而易见的,就昰不安全可以被监听和被窥探。因为无法判断通信双方的身份不能判断报文是否被更改过。

HTTP 的性能不算差但不完全适应现在的互联網,还有很大的提升空间

《极客时间》- 透视 HTTP 协议

《计算机网络-自顶向下方法》

欢迎关注公众号 Java建设者,号主是Java技术栈热爱技术,喜欢閱读热衷于分享和总结,希望能把每一篇好文章分享给成长道路上的你公号回复002,有你想要的资源

欢迎各位关注我的公众号,里面囿一些java学习资料和一大波java电子书籍比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战…都是java的圣經,不说了快上Tomcat车咋们走!最主要的是一起探讨技术,向往技术追求技术,说好了来了就是盆友喔…

}

我要回帖

更多关于 公司裁员会提前通知吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信