HTTP通信基础
一、WEB介绍
Web(World wids Web)也称万维网,是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供图形化易于访问的直观页面。
1.1HTTP介绍
HTTP(超文本传输协议),是一种实现客户端浏览器和网站服务器之间通信的请求响应协议,它是用作客户端和服务器之间的请求和响应。请求:Request:req,响应:Response :rsp。客户端(浏览器)会向服务器提交HTTP请求;然后服务器向客户端返回响应;其中响应包含有关请求的状态信息以及内容信息(图片、音频、视频、超链接、文本等)。其格式又分为URL(统一资源定位符)和URI(统一资源标识符)。
URL地址格式:
协议://域名(主机名 / IP地址):端口/访问得路径文件?参数名=参数值&参数2=参数值
例:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baiduhttp://www.atmcn.com/index.php?a=shows&catid=285&id=123https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu
其中a=shows,&,catid=285等

URL是URI的一个子集,也可以理解为URI是抽象的,URL是具体的 。
1.2通信流程
1:输入访问 www.baidu.com
2:DNS服务器将域名解析成IP地址:www.baidu.com > 1.15.136.212对应得IP地址
3:浏览器请求web服务器获取web资源
4:web服务器将资源返回给客户端
5:客户端浏览器渲染
6:最后呈现在用户面前
二、DNS域名解析
DNS最基本也是最重要的作用就是进行域名和IP地址之间对应关系的记录和查询。协议+IP+端口,例:www.baidu.com -> 1.15.136.212
2.1 简介
DNS(Domain Name System)服务提供域名到IP地址之间的解析服务。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。因为IP是由数串组成,难记忆,所以DNS系统的出现,完美解决了这个问题。
DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。DNS使用TCP和UDP协议的53端口。STDD SNMP TFTP DNS DHCP。
可以理解为DNS就是一个记录着域名 -> IP之间对应关系的数据库
2.2DNS记录
你买了一个域名之后需要配的解析记录
A记录
返回域名对应的IPv4地址 www.baidu.com -》 1.15.13.44
NS记录
域名服务器
返回该域名由哪台域名服务器解析
PTR记录
反向记录 1.15.13.44 -> www.baidu.com
从IP地址到域名的记录
MX记录
电子邮件交换记录
记录邮件域名对应的IP地址
2.4 DNS服务器类型
根服务器
根服务器是DNS的核心,负责互联网顶级域名的解析,用于维护域的权威信息,并将DNS查询引导到相应的域名服务器。
根服务器在域名树中代表最顶级的 "." 域, 一般省略。www.baidu.com.
它并不提供直接的DNS域名解析服务,而是负责将对应的顶级域名DNS服务器的地址返回给查询的客户端
顶级域名
.com .net .us .cn .edu
顶级DNS服务器
顶级域名(top level domain,简写为 TLD),负责的顶级域名,同样的,顶级域名服务器也不提供直接的DNS域名解析服务,而是负责将对应的权威域名服务器返回给查询的客户端
权威服务器
权威DNS服务器,这时候权威DNS服务器会返回对应域名的IP地址,客户端拿到了IP地址就可以进行访问了。

域名例子:# 顶级域名
.com 商业网站
.org 国际网站
.net 互联网中心
.edu 教育机构
.gov 政府网站
# 国家域名
.cn
.jp
.us
2.5 域名系统工作原理
解析过程

接下来我们以访问百度(baidu.com)为例,对应下图进行解析:
- 首先客户端发送请求需要访问 baidu.com,然后第一步是访问本地的DNS缓存;
- 本地的DNS缓存会读取系统下对应的hosts文件,如果这里面定义了baidu.com这个域名对应的IP地址,则直接访问这个IP,就没有后面什么事儿了; Hosts文件位于:C:\Windows\System32\drivers\etc\hosts
- 如果本地的缓存文件没有记录,那么客户端就会发送请求到 本地DNS服务器,一般来说会是默认提供的DNS服务器,当然我们也可以手动指定成第三方的DNS服务器。本地DNS服务器查询服务器内的记录,如果有则直接返回记录给客户端;
- 如果本地DNS服务器没有记录,那么就会访问根域名服务器,询问baidu.com对应的顶级域名服务器的地址;
- 根域名服务器根据请求判断出是访问.com域名的请求,就会给客户端返回.com的顶级域名服务器地址;
- 本地DNS服务器获取到地址之后,发送请求给.com的顶级域名服务器,询问baidu.com对应的权威域名服务器的地址;
- .com的顶级域名服务器给客户端返回了baidu.com的权威域名服务器的地址;
- 本地DNS服务器获取到地址之后,发送请求给baidu.com的权威域名服务器,询问baidu.com的IP地址;
- baidu.com的权威域名服务器给本地DNS服务器返回了baidu.com的IP地址;
- 本地DNS服务器给客户端返回了baidu.com的IP地址,客户端和这个IP建立连接,开始传输数据,该次DNS请求结束。
2.6 域名知识
域名相当于一个人名,也能让人们更清楚的记住网站,域名是网站的三大组成元素之一,其余为程序和空间,所有域名也是世界上独一无二的。域名是两个或两个以上的词构成,中间由点号隔开。
顶级域名:最右边的那个词,顶级域名分为两类:一是国家或者地区顶级域名,例:中国.cn 、美国.us ; 二是国际顶级域名, .com .net .org
一级域名:baidu.com jd.com xiaomi.com
二级域名: baike.baidu.com image.baidu.com
三、HTTP请求类型
3.1 简介
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式
最常用的四种请求方法:GET, POST, PUT,HEAD, DELETE, OPTIONS, CONNECT, TRACE、MOVE, COPY
1.GET请求
get:可以理解为 取 的意思,用来获取数据的,只是用来查询数据;发送一个GET请求获取到某服务器上的资源
PS:get请求会把请求的参数附加在URL后面,这样是不安全的,在处理敏感数据时不用,或者参数做加密处理。

2.POST请求
post可以理解为提交数据的意思, 发送一个POST请求向指定的提交数据或附加新的数据。
PS:post请求的请求参数都是请求body中

知识小结
3.2 GET与POST区别
1:URL可见性
i:Get传参方式是通过地址栏URL传递,可以直接看到GET传递的参数,GET把请求的参数数据在URL后通过?连接,通过&进行参数分割。
ii:Post传参方式参数URL不可见,post将从参数存放在HTTP数据包体内。
2:传输数据大小
i:Get传递数据是通过URL进行传递,对传递的数据长度是受到URL大小的限制,URL最大长度是2048个字符。
ii:Post没有长度限制。
3:后退页面
i: Get后退不会有影响,Post后退会重新进行提交
4:缓存
i:Get 请求可以被缓存,请求的记录会留在历史记录中。
ii:Post 不可以被缓存,请求不会留在历史记录。
5:编码方式:
i:Get 请求只URL编码。
ii:Post 支持多种编码方式。
3.3 HTTP请求响应过程

1:域名解析
首先浏览器会解析请求域名或叫主机名,得到域名对应的IP地址。
2:发起TCP3次握手
客户端拿到域名对应的IP地址之后,浏览器会随机开放一个端口(1024 < 端口 < 65535)向Web服务器的80/443端口发起TCP的连接请求
3:建立TCP连接后发起HTTP请求
经过建立TCP三次握手之后,浏览器向Web服务器发起HTTP请求。
4:服务器端响应http请求,浏览器得到html代码
服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html等资源信息。
5:浏览器接收到响应后,解析html代码,并请求html代码中的资源
浏览器接收到响应后,解析其中的HTML代码,遇到JS/CSS/图片/视频等资源时,就向服务器端区请求获取对应的资源信息(建立一次HTTP连接,可以请求多个资源。)
6:浏览器对页面进行渲染呈现给用户
浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户。
四、HTTP请求/响应包介绍
4.1 HTTP请求报文

1:组成
一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据
2:HTTP请求报文格式

3:请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1
方法字段就是HTTP使用的请求方法,比如常见的GET/POST
4:空行
它的作用是通过一个空行,告诉服务器请求头部到此为止。
5:请求数据/请求体
若方法字段是GET,则此项为空,没有数据;
若方法字段是POST,则通常来说此处放置的就是要提交的数据;
比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
6:常见的请求头部
- Host
-
- 指定请求的服务器的域名和端口号
- Referer
-
- 先前网页的地址,当前请求网页紧随其后,即来路地址
- User-Agent *
-
- User-Agent的内容包含发出请求的用户信息
- Content-Length
-
- 请求的内容长度
- Content-Type *
-
- 请求的与实体对应的MIME信息(多用于POST请求)
- X-forward-for(XFF):*
-
- 记录客户端的IP地址。
- Cookie: *
-
- HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器
- Cookie: role=admin;ssid=1
- Accept
-
- 指定客户端能够接收的内容类型
- Accept: text/plain, text/html
- Accept-Charset
-
- 浏览器可以接受的字符编码集
- Accept-Charset: iso-8859-5
- Accept-Encoding
-
- 指定浏览器可以支持的web服务器返回内容压缩编码类型
- Accept-Encoding: compress, gzip
- Accept-Language
-
- 浏览器可接受的语言
- Accept-Language: en,zh
- Date
-
- 请求发送的日期和时间
- Date: Tue, 15 Nov 2010 08:12:31 GMT
POST请求

4.2 HTTP响应报文
1:响应行
响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK;
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
2:响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理它回送的数据。
3:响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

4:常见的响应头
- Allow
-
- 对某网络资源的有效的请求行为,不允许则返回405
- Allow: GET, HEAD allow:get,head,put,delete
- Content-Encoding
-
- web服务器支持的返回内容压缩编码类型。
- Content-Encoding: gzip
- Content-Language
-
- 响应体的语言
- Content-Language: en,zh
- Content-Length
-
- 响应体的长度
- Content-Length: 348
- Content-Type *
-
- 返回内容的MIME类型
- Content-Type: text/html; charset=utf-8
- Date
-
- 原始服务器消息发出的时间
- Date: Tue, 15 Nov 2010 08:12:31 GMT
- Location
-
- 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
- Location: http://www.zcmhi.com/archives/94.html
- Refresh
-
- 应用于重定向或一个新的资源被创造,在5秒之后重定向
- Refresh: 5; url=http://www.zcmhi.com/archives/94.html
- Server *
-
- web服务器软件名称
- Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
- Set-Cookie *
-
- 设置Http Cookie
- Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
- Accept-Ranges
-
- 表明服务器是否支持指定范围请求及哪种类型的分段请求
- Accept-Ranges: bytes
- Access-Control-Allow-Origin *
-
- 配置有权限访问资源的域
- Access-Control-Allow-Origin: <origin>|*
4.3 HTTP响应码
5.1:1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。

5.2:2xx(成功)
200 201
表示成功处理了请求的状态代码。

5.3:3xx(重定向)
301 302 * 304 305
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

5.4:4xx(请求错误)
400 401 403 404 405 408

这些状态代码表示请求可能出错,妨碍了服务器的处理。

5.5:5xx(服务器错误)
500 502 504*
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

五、HTTPS
5.1 简介
HTTPS (HyperText Transfer Protocol over Secure Socket Layer)可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL。

# HTTP和HTTPS的区别
1.端口号:HTTP:80 / HTTP:443
2.数据:HTTP传输明文数据/ HTTPS传输的是密文数据

数据传输阶段
- 当证书验证合法后,在本地生成随机数;
- 通过公钥加密随机数,并把加密后的随机数传输到服务端;
- 服务端通过私钥对随机数进行解密;
- 服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输;
CA:CA (Certificate Authority) 是颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA 证书颁发机构:CSP云服务提供商生成颁发证书 用在网站程序/FTP站点/APP程序中!
.cdx .der .cert --> 证书文件!
证书的功能:
- 身份校验: 非对称加密算法-->RSA
- 完整性校验:哈希算法--> MD5 / HMAC
六、Cookie&Session
6.1 Cookie
HTTP Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器或用户,如保持用户的登录状态。
生成流程
客户端请求目标网站,由目标网站服务器为客户端颁发一个Cookie,随后该Cookie保存在本地浏览器中,下次再次请求该网站时带入请求包中。
作用
- 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- 个性化设置(如用户自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
6.2 Session
Session 代表着服务器和客户端一次会话的过程。Session 对象存储着用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当客户端关闭会话,或者 Session 超时失效时会话结束。
生成流程

Cookie与Session区别:作用范围不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端。Cookie:用于保持用户的登录网站的状态!Cookie信息保存到客户端本地!Session:用于保持用户的登录网站的状态!Session信息保存到WEB服务端!
更多推荐


所有评论(0)