当前位置: 首页 > news >正文

web基础与HTTP

1. DNS与域名

1.1 域名概述

1. 网络是基于 TCP/IP 协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的 IP 地址)用以区别在网络上成千上万个用户和计算机。网络在区分所有与之相连的网络和主机时,均采用一种唯一、通用的地址格式,即每一个与网络相连接的计算机和服务器都被指派一个独一无二的地址
2. 为了保证网络上每台计算机的 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 网页
头部部分
标题部分
主体部分
网页内容,包括文本、图像等
示例:
<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 所不具备的强制规定。
访问浏览器的流程
浏览器的渲染解释:
渲染过程
1. 解析 HTML
浏览器逐行解析 HTML 文档,构建 DOM 树( Document Object Model )。
2. 解析 CSS
解析 CSS 文件,构建 CSSOM 树( CSS Object Model )。 CSSOM DOM 结合形成渲染树。
3. 计算布局( Reflow
根据渲染树计算每个元素的大小和位置,生成布局。
4. 绘制( 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.2 cookie session 扩展
4.2.1 cookie
无状态协议是指协议对事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须
重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它应答就很
快。
HTTP 是超本文传输协议,顾名思义,这个协议支持超文本的传输。什么是超文本?说白了就是使用
HTML 编写的页面。通常,我们使用客户端浏览器访问服务器的资源,最常见的 URL 也是以 html 为后缀
的文件,因此可以说超文本是网络上最主要的资源。
既然 HTTP 协议的目的是在于支持超文本的传输,也就是资源的传输,那么客户端浏览器向 HTTP 服务器
发送请求,继而 HTTP 服务器将相信资源发回给客户端这样一个过程中,无论对于客户端还是服务器,都
没有必要记录这个过程,因为每一次请求和响应都是相对独立的,一般而言,一个 URL 对应着一个唯一
的超文本,正是因为这样的唯一性,使得记录用户的行为状态变得毫无意义,所以, HTTP 协议被设计为
无状态的连接协议符合它本身的需求。
HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求 " 点到为止 " ,不会造成不必要
的连接占用,缺点在于如果为了保留状态,每次请求都会传输大量的重复信息内容。
可是随着 Web 的不断发展,很多业务都需要对通信状态进行保存 . 如果是一次性会话的过程: 打开浏览
-> 访问一些服务器内容 -> 关闭浏览器但目前有很多 WEB 访问场景,并不是一次性会话,而是多次相
关的会话,比如:
登录场景:
打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页 ( 显示用户名 ) -> 修改密码(输入
原密码) -> 修改收货地址 .......
问题:在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢?
购物场景:
打开浏览器 -> 浏览商品列表 -> 加入购物车 ( 把商品信息保存下来 ) -> 关闭浏览器打开浏览器 -> 直接进入
购物车 -> 查看到上次加入购物车的商品 -> 下订单 -> 支付
问题: 在购物会话过程中,如何保存商品信息?
以上场景都需要保留会话数据,需要会话管理机制。
会话管理 : 管理浏览器客户端和服务器端之间会话过程中产生的会话数据。
为了会话管理, HTTP 就需要传输大量重复信息内容的问题,造成大量的网络带宽消耗。于是 Cookie
Session 技术闪亮登场了,它们可以为用户进行会话管理,实现保存状态。
然而,在许多应用场景中,我们需要保持用户登录的状态或记录用户购物车中的商品。由于 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.2.2 session
4.2.3 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 更安全
1. 为后面服务、集群、功能优化做铺垫
2. 具体解释了怎么解决 HTTP 无状态协议的持久化 / 存储。
4.3 HTTP 协议的版本
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 协议,它们之间有以下区别:
1. 持久连接:
HTTP1.0 中每次请求都需要在请求头中加上 connection: keep-alive 来指示服务器不断开连接。而
HTTP1.1 中默认为持久连接,不需要再加上这个头。
2. 分块传输编码:
HTTP1.1 中支持分块传输编码( chunked transfer encoding ),可以将数据分成多个块传输,避
免了等待整个响应全部到达之后才开始渲染页面的问题。
3. 缓存处理:
HTTP1.1 中使用更多的缓存策略,有强缓存和协商缓存两种。 HTTP1.0 只有强缓存。
4. 虚拟主机:
HTTP1.1 支持虚拟主机,可以在同一 IP 地址下使用多个域名。 HTTP1.0 不支持虚拟主机。
5. 状态码:
HTTP1.1 将状态码增加到了 101 201 202 203 204 205 206 307 等状态。
6. 传输编码:
HTTP1.1 中新增了一种传输编码: gzip 。可以使用 gzip 来压缩传输内容,减少传输数据量,提高传
输速度。
总结: HTTP1.1 相对于 HTTP1.0 来说是更加高效、灵活、安全的,但对于一些老旧的浏览器或服务器,
HTTP1.0 仍然是必要的。
扩展:了解下
HTTPS 协议
为解决安全问题,网景在 1994 年创建了 HTTPS ,并应用在网景导航者浏览器中。 最初, HTTP 是与 SSL
一起使用的;在 SSL 逐渐演变到 TLS 时(其实两个是一个东西,只是名字不同而已),最新的 HTTPS 也由
2000 年五月公布的 RFC 2818 正式确定下来。 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 方式 )
4.4.1 GET 方式
① 请求行
请求的方式
请求的资源路径
请求的版本协议号 ② 请求头(描述信息 / 标准化信息)
Accept :客户端可以接受的数据类型
Accept-Language :客户端可以接受的语言类型
User-Agent :浏览器的信息
Accpect-Encoding :客户端可以接受的编码格式
Host :表示请求的 ip 和端口号
Connection :告诉服务器请求连接如何处理
Keep-Alive :通知服务器回传数据不要马上关闭,保持一小段的连接
Closed :马上关闭
4.4.2 POST 请求方式
① 请求行
请求的方式
请求的资源路径
请求的协议的版本号
② 请求头
Accept :客户端可以接受的数据类型
Accept-Language :客户端可以接受的语言类型
Referer :表示请求发起时,浏览器地址栏中的地址
User-Agent :浏览器的信息
Content-Type :发送的数据类型
Content-Length :发送的数据长度
③ 请求体:就是发送给服务器的数据
方法:
GET 获取资源 当前网络请求中,绝大部分使用的是 GET
HEAD : 获取报文首部,主要用于确认 URL 的有效性以及资源更新的日期时间等
POST 传输实体主体 (比如传输 用户名密码)
PUT 上传文件(比如写博客)
PATCH : 对资源进行部分修改
DELETE :删除文件
OPTIONS :查询支持的方法(查看服务端可以支持哪些方法)
CONNECT :要求在与代理服务器通信时建立隧道(类似加密)
TRACE :追踪路径
url :指明资源的具体位置 <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme
http 超文本传输协议
https 安全的 http 协议
ftp 文件传输协议
user :帐号
password :密码
host :主机名 或 域名 ip 地址
port : 服务器端口号
path :访问资源的路径,相当于组件路径
params :参数,但是这个不常用,指定一些参数,譬如指定传输方式
qurey :查询参数
frag html 资源片段,譬如 html 文档过大的时候, frag 定位到 html 的一部分
首部字段:使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等
内容, HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号 “:” 分隔
首部的分类:
通用首部 : 请求报文和响应报文两方都会使用的首部
Date: 报文的创建时间
Connection :连接状态,如 keep-alive( 长连接 ), close,
Via :显示报文经过的中间节点(代理,网关)
Cache-Control :控制缓存,如缓存时长
MIME-Version: 发送端使用的 MIME 版本
Warning :错误通知
请求首部 : 从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端
信息、请求内容相关优先级等信息
Accept :通知服务器自己可接受的媒体类型
Accept-Charset : 客户端可接受的字符集
Accept-Encoding :客户端可接受编码格式,如 gzip
Accept-Language :客户端可接受的语言
Client-IP: 请求的客户端 IP
Host: 请求的服务器名称和端口号
Referer :跳转至当前 URI 的前一个 URL
User-Agent :客户端代理,浏览器版本
Expect :允许客户端列出某请求所要求的服务器行为(条件式请求首部)
If-Modified-Since :自从指定的时间之后,请求的资源是否发生过修改(条件式请求首
部)
If-Unmodified-Since :与上面相反(条件式请求首部)
If-None-Match :本地缓存中存储的文档的 ETag 标签是否与服务器文档的 Etag 不匹配
(条件式请求首部)
If-Match :与上面相反 (条件式请求首部)
Authorization :向服务器发送认证信息,如账号和密码(安全请求首部)
Cookie: 客户端向服务器发送 cookie
Proxy-Authorization: 向代理服务器认证 ( 代理请求首部)
响应首部:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要
求客户端附加额外的内容信息
协商首部:某资源有多种表示方法时使用 Accept-Ranges :服务器可接受的请求范围类型
Vary :服务器查看的其它首部列表
安全响应首部:
Set-Cookie :向客户端设置 cookie
WWW-Authenticate :来自服务器对客户端的质询列表
信息性:
Age :从最初创建开始,响应持续时长
Server :服务器程序软件名称和版本
实体首部:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实
体有关的的信息
缓存相关:
ETag :实体的扩展标签
Expires :实体的过期时间
Last-Modified :最后一次修改的时间
Allow: 列出对此资源实体可使用的请求方法
Location :告诉客户端真正的实体位于何处
Content-Encoding: 对主体执行的编码
Content-Language: 理解主体时最适合的语言
Content-Location: 实体真正所处位置
Content-Type :主体的对象类型,如 text
扩展首部
实体:请求时附加的数据或响应时附加的数据,例如:登录网站时的用户名和密码,博客的上传文
章,论坛上的发言等。
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.4.4 HTTP 状态码 *
当使用浏览器访问某一个 URL ,会根据处理情况返回相应的处理状态
通常正常的状态码为 2xx 3xx (如 200
如果出现异常会返回 4xx 5xx (如 404
状态码首位 已定义范围 分类
1xx 100-101 信息提示
2xx 200-206 成功
3xx 300-305 重定向
4xx 400-415 客户端错误
5xx 500-505 服务器错误
生产环境常见的 HTTP 状态码
消息 描述
200 OK 请求成功(其后是对 GET POST 请求的应答文档)
301 Moved Permanently 请求的永久页面跳转
403 Forbidden 禁止访问该页面
404 Not Found 服务器无法找到被请求的页面
500 Internal Server Error 内部服务器错误
502 Bad Gateway 无效网关 503 Service Unavailable 当前服务不可用
504 Gateway Timeout 网关请求超时
状态码大全地址:
https://product.pconline.com.cn/itbk/software/llq/1508/6862518.html
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
4.3 HTTP 协议请求流程分析【图 2
用户输入 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

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • IEEE报告解读:存储技术发展趋势分析
  • 神经网络中的优化方法
  • 网络编程复习
  • 服务器模式
  • 【C++】-----多态及原理
  • 相机标定——小孔成像、相机模型与坐标系
  • 《数据结构(C语言版)第二版》第五章-树和二叉树(5.7 哈夫曼树及其应用)
  • 【AI学习】[2024北京智源大会]具身智能:具身智能关键技术研究:操纵、决策、导航
  • kafka 3.x 配置kerbos
  • 赋能未来园区:TSINGSEE视频AI智能管理平台如何引领园区管理智慧化转型
  • java selenium 设置代理,允许在其他环境中使用不同的IP访问
  • 分类预测 | Matlab实现PSO-XGBoost粒子群算法优化XGBoost的多特征分类预测
  • C# 方法的定义
  • JavaScript -- 总结 9 (小白)
  • k8s使用kustomize来部署应用
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • ES6之路之模块详解
  • Javascript Math对象和Date对象常用方法详解
  • Java读取Properties文件的六种方法
  • Joomla 2.x, 3.x useful code cheatsheet
  • Js基础——数据类型之Null和Undefined
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MySQL QA
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • tab.js分享及浏览器兼容性问题汇总
  • Zsh 开发指南(第十四篇 文件读写)
  • 好的网址,关于.net 4.0 ,vs 2010
  • 聚类分析——Kmeans
  • 微信小程序--------语音识别(前端自己也能玩)
  • 自动记录MySQL慢查询快照脚本
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #1014 : Trie树
  • #162 (Div. 2)
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (35)远程识别(又称无人机识别)(二)
  • (C++17) std算法之执行策略 execution
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)VirtualBox安装增强功能
  • (译)计算距离、方位和更多经纬度之间的点
  • **PHP分步表单提交思路(分页表单提交)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net 简单实现MD5
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调