目录
[1. DNS与域名](#1. DNS与域名)
[1.1 域名概述](#1.1 域名概述)
[1.2 域名小结](#1.2 域名小结)
[1.3 DNS 解析](#1.3 DNS 解析)
[1.4 域名](#1.4 域名)
[域名注册 *](#域名注册 *)
[2. 网页的概念](#2. 网页的概念)
[2.1 网页(HTTP/HTTPS)](#2.1 网页(HTTP/HTTPS))
[2.2 HTML](#2.2 HTML)
[3. Web](#3. Web)
[3.2 Web1.0 vs Web2.0](#3.2 Web1.0 vs Web2.0)
[3.3 静态页面 与动态页面 *](#3.3 静态页面 与动态页面 *)
[4. HTTP协议(无状态协议)](#4. HTTP协议(无状态协议))
[4.1 cookie和session会话管理](#4.1 cookie和session会话管理)
[4.2 cookie和session区别](#4.2 cookie和session区别)
[4.3 HTTP协议的版本(0.9/1.0/1.1/2.0)](#4.3 HTTP协议的版本(0.9/1.0/1.1/2.0))
[HTTPS 协议(加密)](#HTTPS 协议(加密))
[4.4 HTTP 请求格式( GET / POST 方式 )](#4.4 HTTP 请求格式( GET / POST 方式 ))
[4.5 HTTP状态码 *](#4.5 HTTP状态码 *)
[4.6 HTTP协议请求流程分析](#4.6 HTTP协议请求流程分析)
1. DNS****与域名
1.1****域名概述
- 网络是基于 TCP/IP 协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的 IP 地址)用以区别在网络上成千上万个用户和计算机。网络在区分所有与之相连的网络和主机时,均采用一种唯一、通用的地址格式,即每一个与网络相连接的计算机和服务器都被指派一个独一无二的地址
- 为了保证网络上每台计算机的 IP 地址的唯一性,用户必须向特定机构申请注册 ,分配 IP 地址
网络中的地址方案分为两套: IP 地址系 统和 域名地址系统 。这两套地址系统其实是一一对应的关系由于 IP 地址是数字标识,使用时难以记忆和书写,因此在 IP 地址的基础上又发展出一种符号化的地址方案,来代替数字型的 IP 地址七层参考模型和五层 ,逻辑网卡和物理网卡 bond'
1.2****域名小结
1 、网络上交互是基于 TCP/IP 协议的,每个主机在逻辑上有一个唯一位置标识( IP 地址),物理地址为MAC地址
2 、为了保证地址唯一性,用户协议向特地给机构申请注册,分配 IP 地址网络中的地址有两套方案:
① IP 地址系统
② 域名地址系统
而由于 IP 是由 32 位二进制数字标识,不方便记忆,所以以 IP 地址为基础发展出了符号化地址来代替解决方案,也是是域名
扩展 面试点 01
1、阿里云域名怎么申请
申请 查询重名 给钱20-60块 备案(阿里云)拍照(负责人拍照人) 10-20天 申请之后就可以解析和用,但是如果有问题 会被封
1.3 DNS****解析
DNS 解析方式,三种 :
① /etc/hosts
linux 系统中负责快速解析的文件,包含了 ip 与主机名的映射关系,在没有 DNS 服务器的情况下,使用本地/etc/hosts 完成解析 / 映射,实现快速访问
PS: 主要用于主机之间( IP 和主机名)的映射 / 解析关系,示例:
192.168.226.128 master
192.168.226.129 node1
192.168.226.130 node2
② /etc/resolv.conf
DNS 客户端配置文件,主要用于设置 DNS 服务器的 IP 和域名,还包含了主机域名的搜索顺序等等,这个文件是由域名解析器(resolver ,一个根据主机名解析 IP 地址的库)使用的配置文件。
PS: 主要用与匹配 DNS 服务器,示例:
nameserver 114.114.114.114
nameserver 8.8.8.8
nameserver 218.2.135.1
③ /etc/sysconfig/network-scripts/ifcfg-ens33
我们也可以在网卡配置文件中定义 DNS1= DNS2=
生效顺序 1 hosts文件 2 网卡配置文件 3 /etc/resolv.conf
1.4 域名
1、定义: 标识一组主机并提供它们的有关信息的树形结构(主要确定了根在哪,就可以确定每个分支)
www.baidu.com
域名服务器(分布式,每台主机维护一个部分):
① 保持和维护域名空间的程序
② 响应解析器的请求
解析端(客户端)
向 DNS 服务器发出请求的设备
2、域名空间结构(从右往左看 )
① 根域位于域名空间最顶层,一般用一个 "." 表示
基础单位,除了根域 其他都只有一个上级域,有 0 或多个子域,同层域不可重复的子域或域名
② 顶级域
一般代表一种类型的组织机构或国家地区(主要有此两种类型构成),如 net (网络公司)、 com (商业)、org (民间团体组织)、 edu (教育)、 gov (政府)、 mil (军事)、 cn (中国)、 jp (日本)、 hk(中国香港)
③ 二级域
用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,如 .cn 顶级域名下面设置的二级域名:.com.cn 、 .net.cn 、 .edu.cn ...
④ 子域
子域名(或子域;英语: Subdomain )是在域名系统等级中,属于更高一层域的域。比如,
mail.example.com 和 calendar.example.com 是 example.com 的两个子域,而 example.com 则是顶级
域 .com 的子域。凡顶级域名前加前缀的都是该顶级域名的子域名,而子域名根据技术的多少分为二级子域名,三级子域名以及多级子域名
主机
主机位于域名空间最下层,就是一台具体的计算机,如 www 、 mail 、都是具体的计算机名字,可用 www.sina.com.cn . 、 mail.sina.com.cn. 来表示,这种表示方式称为 FQDN ( 完全合格域名 ) ,也是这台主机在域名中的全名
域名注册 *
域名注册是Internet中用于解决地址对应问题的一种方法遵循先申请先注册原则
域名注册步骤:
准备申请资料 ---> 寻找域名注册网站 ---> 查询域名 ---> 正式申请 ------> 申请成功
**2.**网页的概念
2.1****网页(HTTP/HTTPS)
1 、网页基本概念
①网页
纯文本格式文件
编写语言为 HTML
在用户的浏览器中被 " 翻译 " 成网页形式显示出来
② 网站
由一个一个页面构成的,是多个网页的结合体主页
打开网站后出现的第一个网页称为网站主页(或首页)
③ 域名
浏览网页时输入的网址
④ HTTP/HTTPS
http不加密,https加密
用来传输网页的通信协议(是否加密),是一种通讯 / 交互的标准 / 规范
⑤URL (路径)
是一种万维网寻址系统
扩展: URI : Uniform Resource Identifier 统一资源标识,分为URL 和 URN
URN(名称): Uniform Resource Naming , 统一资源命名 这个资源叫什么具体的名字
示例: P2P 下载使用的磁力链接是 URN 的一种实现
magnet:?xt=urn:btih:660557A6890EF888666 (只是描述了资源的名字,并没有明确该资源在
哪里) mac 地址全球唯一
URL: Uniform Resorce Locator , 统一资源定位符,用于描述某服务器某特定资源位置 资源的具体位置
⑥ HTML
用来编写网页的超文本标记语言
⑦超链接
超链接是将网站中不同网页链接起来的功能
⑧ 发布
将制作好的网页上传到服务器供用户访问的过程
如何在访问页面时正确使用URL
首先启动httpd服务
[root@localhost ~]# systemctl start httpd
①
[root@localhost ~]# cd /var/www/html[root@localhost html]# vim index.html
[root@localhost html]# cat index.html
为什么啊,重启就能用httpd
/var/www/html/index.html为默认路径,只要访问 http://192.168.190.10/就行
②
[root@localhost html]# mkdir URL
[root@localhost html]# cd URL
[root@localhost URL]# vim test.html
[root@localhost URL]# cat test.html
这是URL路径为/URL/test.html
路径为 /var/www/html/URL/test.html 时,访问 http://192.168.190.10/URL/test.html
2.2 HTML
2.2.1 HTML 超文本标记语言
前端 html css javascript
http Hyper Text Markup Language
网页的 " 源码 "
浏览器: " 解释和执行 "HTML 源码的工具
2.2.2 HTML 文档的结构
HTML 网页
头部部分
标题部分
主体部分
网页内容,包括文本、图像等
示例:
[root@localhost ~]# vim /var/www/html/index.html
<html>
<head>
<title> 我的第一个网页 </title>
</head>
<body >
Hello World!
</body>
</html>
头标签中常用标签
标签 描述
<title> 定义了文档的标题
<base> 定义了页面链接标签的默认链接地址
<link> 定义了一个文档和外部资源之间的关系
<meta> 定义了 HTML 文档中的元数据
<script> 定义了客户端的脚本文件
<style> 定义了 HTML 文档的样式文件
内容标签中常用标签
标签 描述
<table> 定义一个表格
<tr> 定义了表格中的一行
<td> 定义了表格中某一行的一列
<img> 定义了一个图像
<a> 定义了一个超链接
<p> 定义了一行
<br> 定义了换行
<font> 定义了字体
2.2.3 网页基本标签 2-1
网页摘要信息的作用
有利于浏览器解析
有利于搜索引擎搜索
<title> 标签 # 标题
<meta> 标签 # 元标志
2.2.4 标题标签类型
行控制相关标签
范围标签
图像标签
超链接标签
特殊符号
3. Web
3.1 Web 概述
互联网:是网络的网络,是所有类型网络的母集
因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。
Web ( World Wide Web )即全球广域网,也称为万维网
一种分布式图形信息系统
建立在 Internet 上的一种网络服务
万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信息贮藏库,使用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(超链技术),具有提 供分布式服务的特点。万维网是一个分布式的超媒体系统,是超文本系统的扩充,基于B/S 架构实现
URL :万维网使用统一资源定位符( Uniform Resource Locator )来标志万维网上的各种文档,并使每个文档在整个因特网的范围内具有唯一的标识符URL 。
HTTP :为解决 " 用什么样的网络协议来实现整个因特网上的万维网文档 " 这一难题,就要使万维网客户程序(以浏览器为主,但不限于浏览器)与万维网服务器程序之间的交互遵守严格的协议,即超文本传送协议(HyperText Transfer Protocol )。 HTTP 是处于应用层的协议,使用 TCP 传输层协议进行可靠的传送。因此,需要特别提醒的是,万维网是基于因特网的一种广泛因特网应用系统,且万维网采用的是HTTP( 80/TCP )和 HTTPS ( 443/TCP )的传输协议,但因特网还有其他的网络应用系统(如: FTP、 SMTP等等)。
HTML :为了解决 " 怎样使不同作者创作的不同风格的万维网文档,都能在因特网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接" 这一问题,万维网使用超文本标记语言( HyperTextMarkup Language),使得万维网页面的设计者可以很方便地用链接从页面的某处链接到因特网的任何一个万维网页面,并且能够在自己的主机品目上将这些页面显示出来。HTML 与 txt 一样,仅仅是是一种 文档,不同之处在于,这种文档专供于浏览器上为浏览器用户提供统一的界面呈现的统一规约。且具备结构化的特征,这是txt 所不具备的强制规定。
访问浏览器的流程
浏览器的渲染解释:
渲染过程
- 解析 HTML :
浏览器逐行解析 HTML 文档,构建 DOM 树( Document Object Model )。 - 解析 CSS :
解析 CSS 文件,构建 CSSOM 树( CSS Object Model )。 CSSOM 与 DOM 结合形成渲染树。 - 计算布局( Reflow ) :
根据渲染树计算每个元素的大小和位置,生成布局。 - 绘制( Paint ) :
将每个节点转换为屏幕上的像素,绘制出页面。
3.2 Web1.0 vs Web2.0
Web1.0(只读)
以编辑为特征,网站提供给用户的内容是编辑处理后的,然后用户阅读网站提供的内容 这个过程是网站到用户的单向行为 Web1.0以静态 单向阅读为主
Web2.0(可交互)
更注重用户的交互作用,用户既是网站内容的消费者(浏览者),也是网站内容的制造者加强了网站与用户之间的互动,网站内容基于用户提供,网站的诸多功能也由用户参与建设,实现了网站与用户双向的交流与参与
Web2.0 特征
用户分享、以兴趣为聚合点的社群、开放的平台,活跃的用户
3.3****静态页面 与动态页面 *
( 1 ) 静态页面定义
① 静态网页是标准的 HTML 文件
② 扩展名是 .htm 、 .html
例如文本、图像、声音、 Flash 动画、客户端脚本和 ActiveX 控件及 Java 小程序等
③ 是网站建设的基础,早期网站一般都由静态网页制作
④ 没有后台数据库、不含程序和不可交互的网页
⑤ 相对更新起来比较麻烦,适用于一般更新较少的展示型网站
( 2 )静态页面特点:
① 每个静态网页都有一个固定的 URL ,且 URL 以 .htm 、 .html 、 .shtml 等常见形式为后缀,而不含有 "?"
② 网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页都是保存在网站服务器上的
③ 静态网页的内容相对稳定,容易被搜索引擎检索
④静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠,静态网页制作方式比较困难
⑤ 静态网页的交互性较差,在功能方面有较大的限制
⑥ 页面浏览速度迅速,过程无需连接数据库,开启页面速度快于动态页面
( 3 ) 动态页面
①网页 URL 不固定,能通过后台与用户交互
② 在动态网页网址中有一个标志性的符号 ------"?"
③ 常用的语言有 PHP 、 JSP 、 Python 、 Ruby 等
( 4 ) 动态页面特点
① 交互性
网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后 WEB 发展的大势所趋
② 自动更新
无须手动地更新 HTML 文档,便会自动生成新的页面,可以大大节省工作量
③ 因时因人而变
当不同的时间,不同的人访问同一网址时会产生不同的页面
总结:
静态页面由于很多内容都是固定的,在功能方面有很大的限制,所以交互性较差
动态网页则可以实现更多的功能,如用户的登录、注册、查询等
4. HTTP****协议(无状态协议)
4.1 、 HTTP 协议简介
HTTP (超文本传输协议 HyperText Transfer Protocol )协议是互联网上应用最为广泛的一种网络协议, 它是 基于TCP协议的应用层传输协议 ,简单来说就是客户端和服务端进行数据传输的一种规则。
HTTP/HTTPS 是应用层上的协议,建立在传输层 TCP 之上,客户端通过与服务端进行 TCP 连接 ( 三次握手) ,之后发送 HTTP 请求与接收 HTTP 响应都是通过访问 Socket 接口来调用 TCP 协议实现。
HTTP 是一种无状态 (stateless) 协议 , HTTP 协议本身不会对发送过的请求和相应的通信状态进行持久化处理(存储,保存)。这样做的目的是为了保持HTTP 协议的简单性,从而能够快速处理大量的事务 , 提高效率。
4.1 cookie和session会话管理
无状态协议是指协议对事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它应答就很快。
HTTP 是超本文传输协议,这个协议支持超文本的传输。什么是超文本?说白了就是使用HTML编写的页面。通常,我们使用客户端浏览器访问服务器的资源,最常见的 URL 也是以 html 为后缀的文件,因此可以说超文本是网络上最主要的资源。
一般而言,一个URL 对应着一个唯一的超文本 ,正是因为这样的唯一性,使得记录用户的行为状态变得毫无意义,所以,HTTP 协议 被设计为无状态的连接协议符合它本身的需求。
HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求 " 点到为止 " ,不会造成不必要的连接占用,缺点在于如果为了保留状态,每次请求都会传输大量的重复信息内容。
可是随着 Web 的不断发展,很多业务都需要对通信状态进行保存 . 如果是一次性会话的过程: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器但目前有很多 WEB 访问场景,并不是一次性会话,而是多次相关的会话,比如:
登录场景:
打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页 ( 显示用户名 ) -> 修改密码(输入原密码)-> 修改收货地址 .......
问题:在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢?
购物场景:
打开浏览器 -> 浏览商品列表 -> 加入购物车 ( 把商品信息保存下来 ) -> 关闭浏览器打开浏览器 -> 直接进入购物车 -> 查看到上次加入购物车的商品 -> 下订单 -> 支付
问题: 在购物会话过程中,如何保存商品信息?
以上场景都需要保留会话数据,需要会话管理机制。
会话管理 : 管理浏览器客户端和服务器端之间会话过程中产生的会话数据。
为了会话管理, HTTP 就需要传输大量重复信息内容的问题,造成大量的网络带宽消耗。于是 Cookie 和 Session 技术闪亮登场了,它们可以为用户进行会话管理,实现保存状态。
4.1.1 cookie
然而,在许多应用场景中,我们需要保持用户登录的状态或记录用户购物车中的商品。由于 HTTP 是无状 态协议,所以必须引入一些技术来记录管理状态,例如Cookie 。
Cookie 基于 HTTP 协议,也叫 Web Cookie 或浏览器 Cookie ,是服务器发送到用户浏览器并保存在客户端本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HTTP协议记录稳定的状态信息成为了可能。
① 第一次请求过程
浏览器第一次发送请求时,不会携带任何cookie信息
服务器接收到请求之后,发现请求中没有任何cookie信息
服务器生成和设置一个cookie.并将此cookie设置通过set_cookie的首部字段保存在响应报文中返回给浏览器
浏览器接收到这个响应报文之后,发现里面有cookie信息,浏览器会将cookie信息保存起来
② 第二次及其之后的过程
当浏览器第二次及其之后的请求报文中自动 cookie的首部字段携带第一次响应报文中获取的cookie信息
服务器再次接收到请求之后,会发现请求中携带的cookie信息,这样的话就认识是谁发的请求了
之后的响应报文中不会再添加set_cookie首部字段
Cookie 主要用于以下三个方面:
- 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- 个性化设置(如用户自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。当服务器收到 HTTP 请求时,服务器可以在响应头里面添加一个Set-Cookie 选项。浏览器收到响应后通常会保存下 Cookie ,之后对该服务器每一次请求中都通过Cookie 请求头部将 Cookie 信息发送给服务器。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息. 另外, Cookie 的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。
4.1.2 session
4.2 cookie和session****区别
cookie 和 session 的相同和不同:
cookie 通常是在服务器生成 , 但也可以在客户端生成 ,session 是在服务器端生成的
session 将数据信息保存在服务器端,可以是内存,文件,数据库等多种形式 ,cookie 将数据保存在
客户端的内存或文件中
单个cookie保存的数据不能超过4K ,每个站点 cookie 个数有限制,比如 IE8 为 50 个、 Firefox 为 50
个、 Opera 为 30 个;(其实也不可能一次打开这么多页面)
session存储在服务器,没有容量限制
cookie 存放在用户本地,可以被轻松访问和修改,安全性不高; session 存储于服务器,比较安全
cookie 有会话 cookie 和 持久 *cookie ,生命周期为浏览器会话期的会话 cookie 保存在缓存,关闭浏
览器窗口就消失,持久 cookie 被保存在硬盘,知道超过设定的过期时间;随着服务端 session 存储
压力增大,会根据需要定期清理 session 数据
session 中有众多数据,只将 sessionID 这一项可以通过 cookie 发送至客户端进行保留,客户端下次
访问时,在请求报文中的 cookie 会自动携带 sessionID ,从而和服务器上的的 session 进行关联
cookie 缺点:
1 、使用 cookie 来传递信息,随着 cookie 个数的增多和访问量的增加,它占用的网络带宽也很大,试想假如cookie 占用 200 字节,如果一天的 PV 有几个亿,那么它要占用多少带宽?
PV(访问量) : 即 Page View, 页面浏览量或点击量,用户每次刷新即被计算一次, PV 反映的是浏览某网站的页面数,PV 与来访者的数量成正比, PV 并不是页面的来访者数量,而是网站被访问的页面数量
2 、 cookie 并不安全,因为 cookie 是存放在客户端的,所以这些 cookie 可以被访问到,设置可以通过插件添加、修改cookie 。所以从这个角度来说,我们要使用 sesssion , session 是将数据保存在服务端的,只是通过cookie 传递一个 sessionId 而已,所以 session 更适合存储用户隐私和重要的数据
session 缺点:
1 、不容易在多台服务器之间共享,可以使用 session 绑定, session 复制, session 共享解决
2 、 session 存放在服务器中,所以 session 如果太多会非常消耗服务器的性能 cookie 和 session 各有优缺点,在大型互联网系统中,单独使用cookie 和 session 都是不可行的
cookie 和 session 都为了实现的是 http 的短期的持久化 ( 内存 / 缓存方式,查询快、效率比较高 )cookie
是缓存在用户端( client) 浏览器中的(默认缓存一天),当下次客户端通过同一个浏览器访问客户端的时候,会优先读取cookie 中的缓存信息,向服务端进行请求,同时服务端收到客户端请求的时候,读取到cookie 文件,知道客户端之前找的是服务器 A 处理的任务,为了省事儿,省资源,干脆直接讲请求直接再交给服务器A 处理
两者对比 :
cookie 省服务器性能
session 更安全
- 为后面服务、集群、功能优化做铺垫
- 具体解释了怎么解决 HTTP 无状态协议的持久化 / 存储。
4.3 HTTP****协议的版本(0.9/1.0/1.1/2.0)
HTTP/0.9: 已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于
该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。
HTTP/1.0: 这是第一个在通讯中指定版本号的 HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。
PV( 访问量 ) : 即 Page View, 页面浏览量或点击量,用户每次刷新即被计算一次, PV 反映的是浏览某网站 的页面数,PV 与来访者的数量成正比, PV 并不是页面的来访者数量,而是网站被访问的页面数量 HTTP/1.1: 引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用,能很好地配合代理服务器工作。还支持管道方式机制,即在同-- 个 TCP 连接里面,客户端可以同时发送多个请求,以便降低线路负载,提高传输速度。
HTTP/2.0: 完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且
不用按照顺序 . 对应。引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送。支持服务端推
送,允许服务器未经请求,主动向客户端发送资源。
扩展面试
HTTP1.0 和 HTTP1.l 之间的区别 HTTP1.0 和 HTTP1.1 是两种不同版本的 HTTP 协议,它们之间有以下区别:
- 持久连接:
HTTP1.0 中每次请求都需要在请求头中加上 connection: keep-alive 来指示服务器不断开连接。而
HTTP1.1 中默认为持久连接,不需要再加上这个头。 - 分块传输编码:
HTTP1.1 中支持分块传输编码( chunked transfer encoding ),可以将数据分成多个块传输,避
免了等待整个响应全部到达之后才开始渲染页面的问题。 - 缓存处理:
HTTP1.1 中使用更多的缓存策略,有强缓存和协商缓存两种。 HTTP1.0 只有强缓存。 - 虚拟主机:
HTTP1.1 支持虚拟主机,可以在同一 IP 地址下使用多个域名。 HTTP1.0 不支持虚拟主机。 - 状态码:
HTTP1.1 将状态码增加到了 101 、 201 、 202 、 203 、 204 、 205 、 206 和 307 等状态。 - 传输编码:
HTTP1.1 中新增了一种传输编码: gzip 。可以使用 gzip 来压缩传输内容,减少传输数据量,提高传
输速度。
总结: HTTP1.1 相对于 HTTP1.0 来说是更加高效、灵活、安全的,但对于一些老旧的浏览器或服务器, HTTP1.0仍然是必要的。
HTTPS****协议(加密)
HTTPS 就是安全版的 HTTP ,目前大型网站基本实现全站 HTTPS
HTTPS 特点
HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费
HTTP 协议运行在 TCP 之上,所有传输的内容都是明文, HTTPS 运行在 SSL/TLS 之上, SSL/TLS 运行在TCP之上,所有传输的内容都经过加密的
HTTP 和 HTTPS 使用的是不同的连接方式,端口不同,前者是 80 ,后者是 443
HTTPS 可以有效的防止运营商劫持,解决了防劫持的一个大问题
HTTPS 实现过程降低用户访问速度,但经过合理优化和部署, HTTPS 对速度的影响还是可以接受
的
SPDY协议( 降低延迟**)**
SPDY : 2009 年谷歌研发,综合 HTTPS 和 HTTP 两者有点于一体的传输协议,主要特点:
降低延迟,针对 HTTP 高延迟的问题, SPDY 优雅的采取了多路复用( multiplexing )。多路复用通 过多个请求stream 共享一个 tcp 连接的方式,解决了 HOL blocking 的问题,降低了延迟同时提高了带宽的利用率请求优先级(request prioritization )。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY 允许给每个 request 设置优先级,重要的请求就会优先得到响应。比如
浏览器加载首页,首页的 html 内容应该优先展示,之后才是各种静态资源文件,脚本文件 等加载,可以保证用户能第一时间看到网页内容header压缩。 HTTP1.x 的 header 很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量基于HTTPS 的加密协议传输,大大提高了传输数据的可靠性 服务端推送(server push ),采用了 SPDY 的网页,例如网页有一个 sytle.css 的请求,在客户端收到sytle.css数据的同时,服务端会将 sytle.js 的文件推送给客户端,当客户端再次尝试获取 sytle.js 时 就可以直接从缓存中获取到,不用再发请求了
HTTP2 协议
http/2.0 : 2015 年, HTTP2.0 是 SPDY 的升级版
头信息和数据体都是二进制,称为头信息帧和数据帧
复用 TCP 连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一 一对应,避免了" 队头堵塞 ", 此双向的实时通信称为多工( Multiplexing )
引入头信息压缩机制( header compression ) , 头信息使用 gzip 或 compress 压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段, 只发送索引号,提高速度
HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送( server push )
HTTP2.0 和 SPDY 区别:
HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
HTTP2.0 消息头的压缩算法采用 HPACK ,而非 SPDY 采用的 DEFLATE
4.4 HTTP请求格式( GET / POST方式)
GET 请求 方式
POST 请求方式
4.4.3 GET 与 POST 区别
① 区别一 : 语义上的区别
Get向服务器请求数据,依照 HTTP 协议, get 是用来请求数据。
Post 向服务器发数据,依照 HTTP 协议, Post 的语义是向服务器添加数据,也就是说按照 Post 的语义, 该操作是会修改服务器上的数据
② 区别二:服务器请求的区别
Get 请求是可以被缓存,示例:
访问百度,访问的方式就是 GET ,此时访问后的内容会缓被存在浏览器中,短时间再次访问,其实是拿到的浏览器中的缓存内容另外Get 请求只能接收 ASCII 码的回复
Post 请求是不可以被缓存的。对于 Post 方式提交表单,刷新页面浏览器会弹出提示框 " 是否重新提交表单" ,Post可以接收二进制等各种数据形式,所以如果要上传文件一般用 Post 请求
③ 区别三 : 参数放请求头和请求体的差别
Get 请求通常没有请求体(当然这也是可以由程序猿心情改变的),在 TCP 传输中只需传输一次(而不是一个包),所以Get 请求效率相对高。
Post 请求将数据放在请求体中,而实际传输中,会先传输完请求头,再传输请求体,是分为两次传输的(而不是两个包)。
Post 请求头会比 Get 更小(一般不带参数),请求头更容易在一个 TCP 包中完成传输,更何况请求头中有Content-Length的标识,可以更好地保证 Http 包的完整性。
简单的理解:
###GET 方法:
从指定的服务器上获得数据
GET 请求能被缓存
GET 请求会保存在浏览器的浏览纪录里( cookit )
GET 请求有长度的限制
主要用于获取数据
查询的字符串会显示在 URL 中,不安全
###POST 方法:
提交数据给指定服务器处理
POST 请求不能被缓存
POST 请求不会保存在浏览器的浏览纪录里
POST 请求没有长度限制
查询的字符串不会显示在 URL 中,比较安全
4.5 HTTP状态码*
当使用浏览器访问某一个 URL ,会根据处理情况返回相应的处理状态
通常正常的状态码为 2xx , 3xx (如 200 )
如果出现异常会返回 4xx , 5xx (如 404 )
状态码首位 已定义范围 分类
1xx 100-101 信息提示
2xx 200-206 成功
3xx 300-305 重定向
4xx 400-415 客户端错误
5xx 500-505 服务器错误
301 永久性跳转,百度一下,你就知道 会重定向到 百度一下,你就知道
在企业常见的状态码
403 会禁止访问该页面
1、没有访问权限
2、ip地址限制(访问控制(限制ip地址登录)、防火墙)
3、身份验证(用户限制,被禁止访问)
404 服务器无法找到被请求的页面
1、网页不存在,2、URL路径错误,3、文件被删除或移动
500 内部服务器错误
1、应用程序错误(解决方法:查看后端日志,tail -f,刷新页面) 2、数据库问题(查询的时候查询失败,连接资源耗尽) 3、服务器配置(服务端配置文件不正确,更新服务器版本也可能导致)
502 Bad Gateway 无效网关
1、后端服务器出现故障(检查上游服务器健康状态)
apache是静态页面,一旦动了静态页面就要转发到后端
2、代理服务器设置有问题 查看配置 或者网络是否不可达导致 不能转发到后端地址
503 Service Unavailable 当前服务不可用
1、服务器过载(CPU资源占有率100%) 网络流量(双11,流量过大)
2、服务器临时维护(不提供服务,要去做网页说明)
504 Gateway Timeout 网关请求超时
1、后端服务器响应延迟(上游机器服务器,响应的时间和可用性)
2、网络问题(分析网络连接路由器 ;网络是否故障;流量过大;网络调整导致连接超时)
状态码大全地址:
https://product.pconline.com.cn/itbk/software/llq/1508/6862518.html
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
4.6 HTTP****协议请求流程分析
用户输入 URL (地址链接 )( http://www.baidu.com:80/tools.html ) 客户端获取到端口及主机名后,客户端利用DNS 解析域名,首先客户端的浏览器会先找自身的缓存,如果有解析结束,如果没有客户端会去找host 文件,如果 host 文件没有的话,客户端会去找本地的 DNS 缓存服务器,本地的 DNS 缓存服务器没有的话,缓存服务器会去找根域,根域没有,会返回一个.com. 然后本地缓存服务器会去找顶级域,顶级域没有的话会返回baidu.com., 然后本地缓存服务器会去找二级域,二级域解析完后会返回客户端。 客户端解析到 IP 地址后会通过 TCP 的三次握手与服务器建立连接
HTTPS请求的整个过程的详细分析
https://blog.csdn.net/seujava_er/article/details/90018326