我正在参与「启航方案」

前言

本文全文2w字左右阅览完成需求二十分钟左右,文章介绍了HTTP和HTTPS,以及抓包软件fiddler的根本运用工程,了解根本网络协议对以后编程有莫大优点,本文不像高校《计算机网络》教程上所头头是道,文章以丰厚的例子,问答办法,代码实验来解决问题,关于入门的朋友能够值得一看,欢迎咱们积极提出问题,会逐个改正的。


一、HTTP是什么?

HTTP (全称为 “超文本传输协议”) 是一种运用十分广泛的 运用层协议.

HTTP协议,也能够说是后端交互的桥梁

咱们要先搞明白为什么当时咱们的网站 / 浏览器,一点击就能够拜访一个页面,
其实这都是HTTP协议的劳绩,咱们能够看看下面的图:

【HTTP协议】HTTP协议初体验,深入浅出网络协议
能够看见用户的浏览器(客户端)宣布一个恳求 ,服务器就给出相对的呼应

名词介绍: 客户端:主动建议网络恳求的一端 服务器:被动承受网络恳求的一端 恳求:客户端给服务器发的数据. 呼应:服务器给客户端回来的数据

这些操作都是根据 “网络” 来进行的.


协议:让传递音讯的双方,能够对上号,就像暗号那样~

HTTP重要的特色: 一发一收的形式

【HTTP协议】HTTP协议初体验,深入浅出网络协议

网络编程中,除了一发一收之外,还有其他的形式,场景

多发一收:上传大文件 一发多收:看直播 多发多收:串流~~


二、Fiddler软件抓包

咱们假如想看见浏览器和服务器之间的交互数据,能够运用浏览器自带的开发东西,可是那样数据并不详细

1.下载安装Fiddler

下载地址衔接~

【HTTP协议】HTTP协议初体验,深入浅出网络协议

2.关于Fiddler的运用

左侧窗口,显现了当时一切的恳求是啥 会记载下机器上每个程序和服务器之间的http恳求~ 不仅仅记载浏览器的, 由于后台还有许多程序 也会拜访服务器。

【HTTP协议】HTTP协议初体验,深入浅出网络协议

怎么清空Fiddler的窗口:

1.选中一条,怎么按ctrl+a ,然后按delete


咱们怎么去运用这个东西呢?

咱们能够试试 百度查找页

【HTTP协议】HTTP协议初体验,深入浅出网络协议

【HTTP协议】HTTP协议初体验,深入浅出网络协议
然后咱们想看到得宣布的HTTP恳求 能够先上面的那样~

也能够变成文本 直观的看:

【HTTP协议】HTTP协议初体验,深入浅出网络协议

看HTTP呼应也是相同:

右下角完好的HTTP呼应

【HTTP协议】HTTP协议初体验,深入浅出网络协议


那么为什么Fiddler能够获取这个恳求呢? Fiddler之所能够获取这些HTTP恳求的详细状况,主要是由于此处的Fiddler相当于一个 “署理”程序如下图:

【HTTP协议】HTTP协议初体验,深入浅出网络协议


三、HTTP协议格局

1.HTTP的恳求格局

  1. 首行

    能够看见这儿是HTTPS

    【HTTP协议】HTTP协议初体验,深入浅出网络协议

    那么HTTP和HTTPS有什么差异呢?

    HTTPS是HTTP的加强版~,当时网站上的许多网站,都是HTTPS HTTPS和HTTP相比十分相似,仅仅多了个 “加密层”


    注意假如咱们第一次运用发现没有HTTTPS 的能够像下面图片相同设置一下:

    【HTTP协议】HTTP协议初体验,深入浅出网络协议
    要勾选上,而且依照提示安装证书。


咱们来看看首行:

GET https://www.baidu.com/ HTTP/1.1

【HTTP协议】HTTP协议初体验,深入浅出网络协议


  1. 协议头(header)
    【HTTP协议】HTTP协议初体验,深入浅出网络协议
    里边都是键值对 结构,每一个键值对,占一行,键和值之间运用:空格来切割

  1. 空行 空行是协议头的完毕符号
    【HTTP协议】HTTP协议初体验,深入浅出网络协议

  1. 协议正文(Body) 空行后边的部分,有的恳求有,有的没有
    【HTTP协议】HTTP协议初体验,深入浅出网络协议

2.HTTP的呼应格局

呼应的格局在这儿看:

【HTTP协议】HTTP协议初体验,深入浅出网络协议

  1. 首行

    【HTTP协议】HTTP协议初体验,深入浅出网络协议

  2. 协议头(header)

    【HTTP协议】HTTP协议初体验,深入浅出网络协议

  3. 空行

    协议头完毕的符号

    【HTTP协议】HTTP协议初体验,深入浅出网络协议

  4. 呼应正文 呼应的正文,往往便是被显现在浏览器上的,最常见的呼应正文格局,便是html

    【HTTP协议】HTTP协议初体验,深入浅出网络协议
    可是咱们看上面是不是看不出来是HTML ,由于这儿是压缩了,咱们解压缩一下就能够了
    【HTTP协议】HTTP协议初体验,深入浅出网络协议
    然后翻开就看的清楚了
    【HTTP协议】HTTP协议初体验,深入浅出网络协议
    为什么要压缩呢?

    压缩之后,网络传输的数据量就变少了,然后更节约网络


3.HTTP格局总结

运用以下的图来看:

【HTTP协议】HTTP协议初体验,深入浅出网络协议


四、HTTP 恳求 (Request)

1、知道 URL

  1. URL 根本格局

平常咱们俗称的 “网址” 其实便是说的 URL (Uniform Resource Locator 一致资源定位符).

互联网上的每个文件都有一个唯一的URL,它包括的信息指出文件的方位以及浏览器应该怎么处理它.

URL 的详细规则由 因特网规范RFC1738 进行了约好.点击查看

最完好的URL如下:

【HTTP协议】HTTP协议初体验,深入浅出网络协议

URL不仅仅是运用在HTTP/HTTPS里边,许多协议也能够运用URL 比方JDBC 编程也运用URL,仅仅协议方案名纷歧样。

登录信息 现在咱们很少看见这样的格局了


服务器地址

地址能够是一个IP地址,也能够是域名

ip地址:便是描绘网络上的一个详细方位

由于ip地址有点长,不容易记,所以咱们大部分时分运用域名


端口

分别是哪一个运用程序

ip地址能够定位到是哪一个主机,一个主机上有许多运用程序一起在跑,详细把恳求交给谁,运用端口号来差异 每个程序在拜访网络的时分,都会相关上一个或许多个端口号~

经过端口号就能差异出当时的恳求给谁

平常在上网的时分,地址栏里一般看不到端口号,不是说没有,而是有时分假如端口号不是特别的,那么浏览器会加上默认端口:

关于HTTPS的恳求,浏览器会主动加上443端口 ,由于一般的HTTPS服务器都是用443

关于HTTP的恳求,浏览器会主动加上80的端口

一般的HTTP服务器都是用80的端口

当然咱们也能够手动的加上其他的端口(假如服务器运用的其他端口的话)


PATH 途径

dir / index.html

拜访该服务器程序上的哪个资源. 比方是要拜访哪个html,拜访哪个图片


查询字符串 QueryString

【HTTP协议】HTTP协议初体验,深入浅出网络协议
一般网址的查询词详细要害的有。

其实这个后边许多也是键值对, 大就能够看见搜狗以&作为键值对之间的切割符, 以 =作为键和值之间的分隔符。

【HTTP协议】HTTP协议初体验,深入浅出网络协议
这些键值对都是搜狗自己程序员界说的,百度也有自己的。


片段标识符

能让咱们跳转到哪一部分,html里边有 A标签的 #


上面许多内容会省掉,咱们要知道出来,常见状况:

假如省掉域名:持续拜访当时网站的其他资源 假如省掉端口号:浏览器主动填充默认端口(80 / 443) 假如是省掉带层次的途径: 表明拜访 /目录 假如省掉query String: 这个原本便是可选的,客户端能够给浏览器传递参数,也能够不传递 假如省掉片段标识符:这个常常没有


URL中的url encode

在浏览器看见的地址咱们仿制下来回你发现他纷歧样了

【HTTP协议】HTTP协议初体验,深入浅出网络协议
仿制下来:
【HTTP协议】HTTP协议初体验,深入浅出网络协议
是不是中文变成其他的了,为什么呢?

由于queryString 里边假如包括了特别的符号或许中文符号,就需求进行urlencode。

例如: / # ? & 等等

假如querystring 里边也存在特别符号,就或许导致URL格局过错 ,因而就需求对这些符号进行转义。

对特别符号的转义叫做urlencode,反过来解析叫做urldecode。

这儿的转义便是直接取当时的字符/字符串 的内存的16进制 把每个字节前加上一个%

咱们看看c++ 的转义:

【HTTP协议】HTTP协议初体验,深入浅出网络协议
C%2B%2B 其实 这儿的+ 便是 %2B 在内存的16进制中

咱们还有要注意这个的 有的浏览器会主动进行encode,有的不会~

关于解析 咱们能够去网上找一下urlencode解析


2、知道 “办法” (method)

2.1 什么是办法

HTTP的办法便是恳求报文中的首行的第一个部分~~

设计这个HTTP办法协议是期望不同的办法有不同的“语义”

【HTTP协议】HTTP协议初体验,深入浅出网络协议

比方GET是取得从服务器获取资源。

POST传输文件实体,作者是期望咱们这样运用,可是咱们现在程序员运用这些办法是‘’十分随心所欲‘’的,并不会依照规则的那样。


下面咱们来介绍两个常用办法: GET \ POST

2.1.1 介绍(GET)

在此之前,介绍一下HTTP的协议版别 1.0,1.1,以及 2 , 3,可是2和3 版别还没有普及,以下介绍的是1.1版别的

  1. 在浏览器中直接输入 URL, 此刻浏览器就会发送出一个 GET 恳求.

比方翻开搜狗的主页:

【HTTP协议】HTTP协议初体验,深入浅出网络协议

2.HTML 中的 link, img, script 等标签, 也会触发 GET 恳求.

img的scr特点,写了一个url,浏览器会主动依据img的src结构出一个HTTP的恳求

3.还能够运用JS,直接在浏览器前端结构HTTP GET 恳求(ajax)

4.各种编程言语(只需能够拜访网络)就能够结构HTTP恳求


GET 恳求特色

  1. 首行里边的第一个部分是GET

  2. URL里边query string 能够为空,也能够不为空

    【HTTP协议】HTTP协议初体验,深入浅出网络协议
    不为空:
    【HTTP协议】HTTP协议初体验,深入浅出网络协议
    3.GET 恳求里边有许多组header键值对~

  3. GET 恳求一般body是空的 (GET恳求也能够有body,可是很少见)


注意网上是GET 恳求有长度约束,这个上限主要是由于URL的长度存在上限,还有的把长度标出来了,其实这些都是过错的,

【HTTP协议】HTTP协议初体验,深入浅出网络协议
RFC这个文档里边约好了许多和网络协议相关的规范


2.1.2 介绍(Post)

POST恳求特色

最常见的场景便是 登录

输入 用户名和暗码之后就会发生一个post恳求

【HTTP协议】HTTP协议初体验,深入浅出网络协议
特色: 1.首行的第一个部分便是post 2.URL后边没有query string (一般都没有个别状况会有) 3.header这儿也是有若干的键值对结构 4.body一般不为空这儿的详细数据格局,由恳求header中的Content-Type来描绘 (Body的详细长度,由恳求header中的Content来描绘) 图片第四行有 。

其实互联网的信息,并不是很安全,咱们拜访的各种数据都是在网络上要经过各种的硬件设备进行传输,在这些设备上进行“抓包”能够看见详细内容。

咱们解决的方案便是“加密”,不用明文传输暗码,而是在客户端这边对暗码进行加密,以密文进行传输。

相似于:你上课叫妹纸正午去干饭,你写纸条给她,可是有点间隔,你又不好意思让其他的同学知道你们之间的小秘密,以特别的字符替代要害字

【HTTP协议】HTTP协议初体验,深入浅出网络协议


2.1.3Get和Post的差异

回答这个问题首先要盖棺事定:没有本质上的差异,运用Get的场景也能够运用Post 可是在详细运用上,仍是存在一些细节上的区其他:

  1. (最经典)Get习惯上,吧客户端的数据经过query String 来传输,(body部分是空),post习惯上把客户端的数据经过body来传输,(query string)是空的 (习惯上不是有必要更不是百分之百)
  2. 语义上的差异:Get习惯上用于从服务器获取数据,post习惯上客户端给服务器提交数据
  3. Get办法程序员一般状况下,程序员会完成成为“幂等”,post恳求不要求完成幂等(恳求假如重复被发送了,不会发生负面作用

正面影响:(比方你要去抢一个物品,翻开页面的时分发送一个恳求,这儿翻开的是否是开端买的状况,改写一次发送一个恳求,可是这个恳求不会影响,由于仅仅是否能够购买 没有其他操作)

负面影响:现在我进行下单,服务器正卡着,我不知道是否成功,退出又从头下单,重复3次,问题来了这几个恳求会不会发生负面作用,到底是一个单,仍是3个单呢?

所以咱们Get一般完成幂等,重复不会呈现影响,下单post一般不完成幂等,或许会呈现问题。(也是“规范文档”的建议,也不是程序员有必要要遵守的

【HTTP协议】HTTP协议初体验,深入浅出网络协议

  1. Get恳求能够缓存,能够被浏览器保存到收藏夹中,可是post不行

关于这个问题,网上有些说法,也是不准确的
 1. Post比Get更安全
 	问:由于Get完成登录,习惯上是把参数放到queryString 此刻浏览器的url显现了用户的用户名和暗码,这样就感觉不安全,post完成登录,把参数放在body里,此刻不显现在浏览器里,不就更加安全吗?
 	答:其实安全和不安全取决于是否加密,以及加密算法的强度,和你的东西在url仍是body里,没有啥联系,毕竟一抓包都一望而知。
2.传输的数据量比Get的更多~~,原因Get的URL上有上限
	答:其实RFC规范中明确说了,不对URL长度做约束
3.Get只能传输文本数据,POST能够传输文本和二进制数据
	答:Get完全能够传输二进制数据,只需对二进制数据进行urlencode就能够放到url里边了,Get大不了也能够直接把数据放到body

3、其他办法

  • PUT 与 POST 相似,仅仅具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 回来服务器所支撑的恳求办法
  • HEAD 相似于GET,只不过呼应体不回来,只回来呼应头
  • TRACE 回显服务器端收到的恳求,测验的时分会用到这个
  • CONNECT 预留,暂无运用

了解即可,能说出来就能够了


4、知道恳求 “报头” (header)

1、Host

【HTTP协议】HTTP协议初体验,深入浅出网络协议

表明恳求所对应的服务器的地址,地址里边能够是域名,也能够是IP,也能够是手动指定的端口号,有人就会问,那host信息,在url里边是不是也存在,其实网络上存在一种特别的程序:“署理”,署理就像海淘,能够自己出国,也能够找朋友给你买,这样就叫署理,不方便的时分,能够经过这样的状况来署理购买。


2 、Content-Length、 Content-Type

Content-Length表明body的长度,单位是字节

Content-Type表明body的格局

假如这个恳求是有body的(post),此刻就会一起带上这两个header

假如这个恳求没有body(Get),此刻就不会带有这两个参数


2.1、 Content-Type 常见取值

  • application/x-www-form-urlencoded: form 表单提交的数据格局. 此刻 body 的格局形如 queryString的格局来组织
title=test&content=hello
  • multipart/form-data: form 表单提交的数据格局(在 form 标签中加上 enctyped=”multipart/form-data” . 一般用于提交图片/文件. body 格局形如:

Content-Type:multipart/form-data; boundary=—- WebKitFormBoundaryrGKCBY7qhFd3TrwA ——WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name=”text” title ——WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name=”file”; filename=”chrome.png” Content-Type: image/png PNG … content of chrome.png … ——WebKitFormBoundaryrGKCBY7qhFd3TrwA

  • application/json: 数据为 json 格局. body 格局如下,咱们抓包会常常遇见这样的

{“username”:”123456789″,”password”:”xxxx”,”code”:”jw7l”,”uuid”:”d110a05ccde64b16 a861fa2bddfdcd15″}

js里的目标也是这样的格局 json格局便是源自于js的目标格局。


3、User-Agent (简称 UA)

表明浏览器/操作体系的特点. 形如

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36

大概知道一下:(Windows NT 10.0; Win64; x64) windows10,64位,(Chrome/91.0.4472.77 Safari/537.36)当时浏览器Chrome 浏览器版别 Safari/537.36

UA是一个十分有用的字段,在曾经浏览器只能够显现文字图片,后边网页丰厚了,能够显现视频、音频,不过并不是悉数浏览器都能够正常播映,网站开发者能够依据HttP恳求的UA来锁定浏览器详细型号,开发者就知道能否能够放视频,假如能就回来视频,假如不能就回来不带视频的页面,这样做到了兼容性。

现在的UA不像曾经那么有意义,可是现在主要是差异恳求是移动端,仍是pc端。

不过现在更干流的做法是选用“呼应式布局”,在页面css中经过“媒体查询”功用依据屏幕的尺寸主动设置不同的款式,来兼容不同的设备。

4、Referer

表明这个页面是从哪个页面跳转过来的. 形如

【HTTP协议】HTTP协议初体验,深入浅出网络协议
假如当时的页面是直接输入url或许是在收藏夹点击链接此刻Referer是空的。

假如你百度查找,然后点击网站就会有从哪里来

那么Referer有什么用呢??

当咱们点击网站广告,就会有是从什么查找引擎过来的,这样查找引擎就能够赚钱,完毕的时分,就能够看看这个查找引擎带来了网站多少的拜访,能够和广告主结账计算,广告主的计算就依据Referer来计算。

5、Cookie

Cookie 中存储了一个字符串, 这个数据或许是客户端(网页)自行经过 JS 写入的, 也或许来自于服务器(服 务器在 HTTP 呼应的 header 中经过 Set-Cookie 字段给浏览器回来数据). 往往能够经过这个字段完成 “身份标识” 的功用.

Cookie里边看起来是一些键值对结构~

键值对之间运用;号切割, 键值直接运用=切割,Cookie里的键值对表明的含义都是程序员自己自界说的。

cookie机制存在的目的,为了能够在浏览器这一段,保存程序员自界说的数据。

那么有人会问可不能够把存的数据保存在客户端浏览器所在的主机的硬盘上(存个文件)

当然是不能够的,浏览器为了确保安全性,制止网页中的代码拜访主机的硬盘~~(无法在js读写文件) 就让端开发失去了耐久化存储的才干(可是很有必要) 虽然浏览器不让程序员去操作客户端的文件,,可是也供给了一个cookie这样的机制,依照键值对存储,来替代直接拜访文件,这个cookie的内容是浏览器办理的(本质也是保存在硬盘)会耐久化存在。 假如不是浏览器关于拜访文件有约束,其实就不必要存在cookie 。

假如浏览器能够拜访本地文件,那么你翻开一个不知名的小网站,网页直接在给你硬盘写个病毒程序,你电脑就挂了。。

【HTTP协议】HTTP协议初体验,深入浅出网络协议

cookie便是浏览器供给一个让程序员在客户端这边耐久保存数据的一种机制!!! 至于是什么完全看程序员怎么界说。

  1. cookie是什么?

cookie是浏览器供给的一种让程序员在本地存储数据的才干。

  1. cookie里边存的是什么?

cookie里存的是键值对格局的数据,键值对之间运用;切割,键和值之间运用=切割。

  1. cookie从哪里来?程序员怎么往cookie里存东西?

【HTTP协议】HTTP协议初体验,深入浅出网络协议
每一个这个便是键值对
【HTTP协议】HTTP协议初体验,深入浅出网络协议
cookie在浏览器这边是依照域名维度来分别存储的。 baidu.com 有一组cookie,是百度程序员界说的,百度网站运用的 sogo.com 有一组cookie,是搜狗程序员界说的,搜狗网站运用的

在抓包咱们能够看见这样的呼应set-cookie header头

【HTTP协议】HTTP协议初体验,深入浅出网络协议

和cookie对应起来了

【HTTP协议】HTTP协议初体验,深入浅出网络协议

浏览器里存储的cookie都是从服务器的呼应报头里边的set-cookie字段中来的,每个set-cookie字段包括一个cookie的键值对,浏览器拿到这个呼应之后,就会吧set-cookie中的内容给保存到本地. set – cookie便是程序员在服务器代码中填写结构。

  1. Cookie要到哪里去?(谁来运用)

cookie字段会在后续的恳求中,把浏览器本地存储的这些键值对,再发回给服务器(服务器端的代码来运用cookie)

【HTTP协议】HTTP协议初体验,深入浅出网络协议
来自服务器,回来服务器。

咱们能够试试把网站的登录cookie删除然后从头登陆,要从头输入暗码。

到今天2022年,cookie是唯一浏览器本地存储的机制吗?并不是的

浏览器供给了其他的本地存储机制

  1. LocalStrorage这个是HTML5开端,浏览器供给的一种新的本地存储的机制,只用这个完成能够替代cookie。
  2. indexDB这个是更新的一个东西,浏览器供给了一组相似于SQL这样的接口,能够在浏览器本地以相似数据库的办法存储数据

Cookie的缺陷:每次恳求都要把该域名下一切的cookie经过HTTP恳求传给服务器。这就注定Cookie的存储是有限的,相比之下新机制没有这个问题。

五、HTTP 呼应详解

1、知道 “状况码” (status code)

状况码表明拜访一个页面的成果. (是拜访成功, 仍是失利, 仍是其他的一些状况…)

表白之后,妹纸会给你回来一个成果

  1. 好的我乐意
  2. 你是个好人
    【HTTP协议】HTTP协议初体验,深入浅出网络协议

以下为常见的状况码.状况码是一个3位数的整数

200 OK

这是一个最常见的状况码, 表明拜访成功

【HTTP协议】HTTP协议初体验,深入浅出网络协议

404 Not Found 没有找到资源.

【HTTP协议】HTTP协议初体验,深入浅出网络协议

403 Forbidden 表明拜访被回绝. 有的页面一般需求用户具有一定的权限才干拜访(登陆后才干拜访). 假如用户没有登陆 直接拜访, 就容易见到 403

【HTTP协议】HTTP协议初体验,深入浅出网络协议

405 Method Not Allowed 前面咱们已经学习了 HTTP 中所支撑的办法, 有 GET, POST, PUT, DELETE 等. 可是对方的服务器纷歧定都支撑一切的办法(或许不允许用户运用一些其他的办法).

500 Internal Server Error 服务器呈现内部过错. 一般是服务器的代码履行进程中遇到了一些特别状况(服务器反常溃散)会发生这个 状况码. 咱们平常常用的网站很少会呈现 500 (可是偶尔也能看到)

504 Gateway Timeout 当服务器负载比较大的时分, 服务器处理单条恳求的时分耗费的时间就会很长, 就或许会导致呈现超时的 状况

这种状况在双十一等 “秒杀” 场景中容易呈现, 平常不太容易见到.

302 Move temporarily 暂时重定向

了解 “重定向” 就相当于手机号码中的 “呼叫转移” 功用. 比方我原本的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需求让我的朋 友知道新号码, 只需我去办理一个呼叫转移事务, 其他人拨打 186-1234-5678 , 就会主动转移到 135-1234-5678 上

在登陆页面中常常会见到 302. 用于完成登陆成功后主动跳转到主页. 呼应报文的 header 部分会包括一个 Location 字段, 表明要跳转到哪个页面

例如: 码云的登陆页面 gitee.com/login 抓包看到的呼应成果: HTTP/1.1 302 Found Date: Thu, 10 Jun 2021 06:49:26 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Keep-Alive: timeout=60 Server: nginx X-XSS-Protection: 1; mode=block …….

301 Moved Permanently 永久重定向. 当浏览器收到这种呼应时, 后续的恳求都会被主动改成新的地址. 301 也是经过 Location 字段来表明要重定向到的新地址


状况码小结

【HTTP协议】HTTP协议初体验,深入浅出网络协议

2、知道呼应 “报头” (header)

3、Content-Type

呼应中的 Content-Type 常见取值有以下几种:

  • text/html : body 数据格局是 HTML
  • text/css : body 数据格局是 CSS
  • application/javascript : body 数据格局是 JavaScript
  • application/json : body 数据格局是 JSON

4、经过 form 表单结构 HTTP 恳求

form (表单) 是 HTML 中的一个常用标签. 能够用于给服务器发送 GET 或许 POST 恳求.

不要把 form 拼写成 from!!

4.1、form 发送 GET 恳求

form 的重要参数:

  • action: 结构的 HTTP 恳求的 URL 是什么.
  • method: 结构的 HTTP 恳求的 办法 是 GET 仍是 POST (form 只支撑 GET 和 POST)input 的重要参数:
  • type: 表明输入框的类型. text 表明文本, password 表明暗码, submit 表明提交按钮.
  • name: 表明结构出的 HTTP 恳求的 query string 的 key. query string 的 value 便是输入框的用户输入的内容.
  • value: input 标签的值. 关于 type 为 submit 类型来说, value 就对应了按钮上显现的文本
<form action="http://sogo.com/" method="GET">
    <input type="text" name="userId">
    <input type="text" name="classId">
    <input type="submit" value="提交">
</form>

页面展示的作用:

【HTTP协议】HTTP协议初体验,深入浅出网络协议
在输入框随意填写数据,点击 “提交”, 此刻就会结构出 HTTP 恳求并发送出去.
【HTTP协议】HTTP协议初体验,深入浅出网络协议

  • form 的 action 特点对应 HTTP 恳求的 URL
  • form 的 method 特点对应 HTTP 恳求的办法
  • input 的 name 特点对应 query string 的 key (userid)
  • input 的 内容 对应 query string 的 value(123)

4.2、form 发送 POST 恳求

代码把get变成post

 <form action="http://sogou.com/" method="post">
        <input type="text" name="userId">
        <input type="text" name="classId">
        <input type="submit" value="提交">
    </form>

【HTTP协议】HTTP协议初体验,深入浅出网络协议

body里边的数据,get在querystring里边 post在body里也是输入框的值

【HTTP协议】HTTP协议初体验,深入浅出网络协议
这个内型决议了咱们是以键值对办法来进行
【HTTP协议】HTTP协议初体验,深入浅出网络协议

4.3、经过 ajax 结构 HTTP 恳求

从前端角度, 除了浏览器地址栏能结构 GET 恳求, form 表单能结构 GET 和 POST 之外, 还能够经过 ajax 的办法来结构 HTTP 恳求. 而且功用更强大

ajax 全称 Asynchronous Javascript And XML, 是 2005 年提出的一种 JavaScript 给服务器发送 HTTP 恳求的办法. 特色是能够不需求 改写页面/页面跳转 就能进行数据传输.

同步:当你去买2个东西,你有必要买完第一个东西,才干够去买第二个 异步:当你去买面,又想去买包子,你能够先叫老板娘做着,自己去隔壁包子铺买包子

在 JavaScript 中能够经过 ajax 的办法结构 HTTP 恳求

先引进:

【HTTP协议】HTTP协议初体验,深入浅出网络协议
能够引进jquery cdn源:
【HTTP协议】HTTP协议初体验,深入浅出网络协议
cdn也是互联网中的一种基础设施,这是一组服务器 ,服务器是由运营商供给,存在的目的是为了加速用户的拜访速度

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
        //$是一个变量名 是jquery界说好的一个目标 jquery里边的各种办法都是这个目标的成员
        $.ajax({
            url:'http://42.192.83.143:8080/AjaxMockServer/info',
            method:'GET',
            success:function(data,status){
            	//data呼应的body
                //status呼应的状况
                console.log(data);
            }
        });
    </script>
</body>
</html>

图解:

【HTTP协议】HTTP协议初体验,深入浅出网络协议
那么有没有或许ajax能够来完成爬虫呢?

这个是不能够,由于ajax里边有约束是不能够跨域的 由于ajax是经过js代码触发的,js代码又是在一个html里边,拜访这个html就有一个域名,ajax结构也有一个域名,就有2个纷歧样的域名了,有必要要域名1和域名2相同才干够完成,假如要写一个抢票体系此刻域名1和域名2 (12306)不在同域不能够跨,重复自己的服务器翻开跨域。

不仅仅是ajax和form能够结构恳求,恣意编程言语,只需是能拜访的网络,就能够结构HTTP恳求,java也能够!(这个以后在写文章说)


六、知道HTTPS

1、HTTPS 是什么

现在互联网上,越来越多的网站,都是HTTPS的,也是根据HTTP(报文格局都相同),在HTTP的基础上,引进了一个加密层,SSL\TLS.

HTTPS 也是一个运用层协议. 是在 HTTP 协议的基础上引进了一个加密层. HTTP 协议内容都是依照文本的办法明文传输的. 这就导致在传输进程中呈现一些被篡改的状况.

臭名远扬的 “运营商绑架” 下载一个 天天动听 未被绑架的作用, 点击下载按钮, 就会弹出天天动听的下载链接.

【HTTP协议】HTTP协议初体验,深入浅出网络协议
已被绑架的作用, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接
【HTTP协议】HTTP协议初体验,深入浅出网络协议
由于咱们经过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网 络设备就能够解分出你传输的数据内容, 并进行篡改. 点击 “下载按钮”, 其实便是在给服务器发送了一个 HTTP 恳求, 获取到的 HTTP 呼应其实就包括了该 APP 的下载链接. 运营商绑架之后, 就发现这个恳求是要下载天天动听, 那么就主动的把交给用户的呼应给篡 改成 “QQ浏览器” 的下载地址了
【HTTP协议】HTTP协议初体验,深入浅出网络协议

那么咱们要怎么确保安全呢?HTTP不安全的根本原因在于“明文传输”,要想安全,就得加密


2、”加密” 是什么

加密便是把 明文 (要传输的信息)进行一系列改换, 生成 密文 . 解密便是把 密文 再进行一系列改换, 还原成 明文 . 在这个加密和解密的进程中, 往往需求一个或许多个中间的数据, 辅佐进行这个进程, 这样的数据称为 密 钥 (正确发音 yue 四声, 不过咱们平常都读作 yao 四声) .


3、HTTPS 的作业进程

既然要确保数据安全, 就需求进行 “加密”.

网络传输中不再直接传输明文了, 而是加密之后的 “密文”.

加密的办法有许多, 可是全体能够分成两大类: 对称加密 和 非对称加密


3.1引进对称加密

对称加密其实便是经过同一个 “密钥” , 把明文加密成密文, 而且也能把密文解密成明文.(加密运用的密钥和解密运用的密钥是同一个)

一个简略的对称加密, 按位异或 假定 明文 a = 1234, 密钥 key = 8888 则加密 a ^ key 得到的密文 b 为 9834. 然后针对密文 9834 再次进行运算 b ^ key, 得到的便是本来的明文 1234. (关于字符串的对称加密也是同理, 每一个字符都能够表明成一个数字) 当然, 按位异或仅仅最简略的对称加密. HTTPS 中并不是运用按位异或.

【HTTP协议】HTTP协议初体验,深入浅出网络协议

引进对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因而就无法进行解密, 也就不知道恳求的 真实内容是啥了.

但事情没这么简略. 服务器同一时间其实是给许多客户端供给服务的. 这么多客户端, 每个人用的秘钥都 有必要是不同的(假如是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因而服务器就需求保护每个客户 端和每个密钥之间的相相联系, 这也是个很费事的事情

【HTTP协议】HTTP协议初体验,深入浅出网络协议
比较理想的做法, 便是能在客户端和服务器建立衔接的时分, 双方洽谈确认这次的密钥是啥

【HTTP协议】HTTP协议初体验,深入浅出网络协议
可是假如直接把密钥明文传输, 那么黑客也就能取得密钥了~~ 此刻后续的加密操作就形同虚设了.

因而密钥的传输也有必要加密传输! 可是要想对密钥进行对称加密, 就依然需求先洽谈确认一个 “密钥的密钥”. 这就成了 “先有鸡仍是先有蛋” 的问题了. 此刻密钥的传输再用对称加密就行不通了. 就需求引进非对称加密.


3.1非对称加密

非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥”. 运用公钥来加密,私钥来解密 也能够私钥加密,公钥解密

  1. 首先服务器自己生成一个公钥私钥密钥对,公钥公开出去,谁都能够获取(黑客也能够拿到)私钥自己保存(不让他人知道)
  2. 客户端拿到公钥之后,运用公钥,对对称秘钥进行加密,把加密后的密钥密文经过网络传输给服务器
  3. 黑客能够获取到这儿的密文,可是黑客只有公钥,没有私钥,公钥加密,私钥解密,黑客拿到也无法解密,只有服务器自己有私钥才干够解密,这样就安全抵达服务器了
  4. 后续客户端之间就能够运用对称秘钥钥进行加密解密了

如下图:

【HTTP协议】HTTP协议初体验,深入浅出网络协议
另一个重要的问题: 已经引进非对称加密了,为什么还要有对称加密,对称加密的成本(对机器资源的耗费)是远远低于非对称加密的


那么接下来问题又来了: 客户端怎么获取到公钥? 客户端怎么确认这个公钥不是黑客假造的?

【HTTP协议】HTTP协议初体验,深入浅出网络协议

4、引进证书

在客户端和服务器刚一建立衔接的时分, 服务器给客户端回来一个 证书. 这个证书包括了方才的公钥, 也包括了网站的身份信息.

这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA组织先请求 一个证书. (相似于去公安局办个身份证).

这个 证书 能够了解成是一个

  • 证书发布组织
  • 证书有效期
  • 公钥
  • 证书一切者
  • 签名
  • …..

当客户端获取到这个证书之后, 会对证书进行校验(避免证书是假造的).

  • 断定证书的有效期是否过期
  • 断定证书的发布组织是否受信赖(操作体系中已内置的受信赖的证书发布组织).
  • 验证证书是否被篡改: 从体系中拿到该证书发布组织的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 比照 hash1 和 hash2 是否持平. 假如持平, 则说明证书是没有被篡改正的.

5、完好流程

HTTPS作业流程

  1. 对称加密,用于传输的数据进行加密(恳求,呼应)需求有一个对称密钥,客户端生成,要奉告服务器
  2. 非对称加密,服务器供给一个公钥(服务器自己持有一个私钥),客户端运用公钥对对称密钥加密,密文传输给服务器
  3. 中间人攻击,黑客或许绑架了服务器给客户端的公钥,用自己生成的公钥替代,然后导致对称密钥的走漏
  4. 为了解决中间人攻击,引进了证书机制,经过第三方工证组织,向网站颁发证书,证书里边就包括公钥,客户端向服务器恳求的便是证书,客户端那着证书去公证组织进行验证,看看证书是否合法。

面试最常常问HTTPS问题的便是上面的4步进程,准确来说这个进程便是SSL/TLS的一个流程,而SSL/TLS不仅仅运用在HTTPS中,也在许多其他地方会用到