网络原理--HTTPHTTPS

目录

一、HTTP

1.1 HTTP是什么

1.2 HTTP协议的工作过程

1.3 HTTP协议格式

1.3.1 抓包工具的使用

1.3.2 抓包结果

1.4 HTTP请求

1.4.1 URL

1.4.2 认识“方法” (method)

1.4.3 认识请求“报头”(header)

1.4.4 认识请求“正文”(body)

1.5 HTTP 响应详解

1.5.1 HTTP 状态码

1.5.2 响应“报头”(header)

1.5.3 响应“正文”(body)

二、HTTPS

2.1 HTTPS的工作过程


一、HTTP

1.1 HTTP是什么

HTTP(全称“超文本传输协议”)是一种应用非常广泛的 应用层协议

 我们平时打开一个网站,就是通过HTTP协议来传输数据的。

1.2 HTTP协议的工作过程

当我们在浏览器中输入一个“网址”,此时浏览器就会给对应的服务器发送一个HTTP请求,对应的服务器收到这个请求经过计算处理,就会返回一个HTTP响应。

事实上,当我们访问一个网站的时候,可能涉及布置一次的HTTP请求/响应的过程。

可以通过浏览器的开发者工具来观察这个详细的过程。

当前搜狗主页是利用了HTTPS协议进行通信的,HTTPS是在HTTP的基础上做了一个加密解密的工作后面再详细介绍。

1.3 HTTP协议格式

HTTP是一个文本格式的协议,可以通过浏览器的开发者工具或者抓包工具抓包来查看HTTP请求/响应的细节。

1.3.1 抓包工具的使用

这里以Fiddler为例。

左侧窗口显示了所有的HTTP请求/响应,可以选中某个请求查看详情。

右侧上方显示了HTTP请求的报文内容(切换到RAW标签页可以看到详细的数据格式)

右侧下方显示了HTTP响应的报文内容(切换到RAW标签页可以看到详细的数据格式)

请求和响应的详细数据,可以通过右下角的View in Notepad 通过记事本打开

1.3.2 抓包结果

以下是一个HTTP请求/响应的抓包结果

首行:[方法] + [url] + [版本]

Header:请求的属性,冒号分隔的键值对;每组数据之间使用 \n 分割;遇到空行表示Header部分结束。

Body:空行后面的内容都是Body。Body允许空字符串,如果Body存在,则在Header部分中有一个Content-Length属性来标识Body的长度

HTTP响应

首行:[版本号] + [状态码] + [状态码解释]

Header:请求的属性,冒号分隔的键值对;每组数据之间使用 \n 分割;遇到空行表示Header部分结束。

Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个Content-Length属性来标识Body的长度; 如果服务器返回了⼀个html页面, 那么html页面内容就是
在body中.

 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 "报头的结束标记", 或者是
报头和正文之间的分隔符".
HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题".

1.4 HTTP请求

1.4.1 URL

平时我们俗称的“网址”其实就是一个URL。

关于query string :query string 中的内容是键值对结构,其中的 key 和 value 的取值和个数,完全由程序员自己约定的,我们可以通过这样的方式来定制传输我们需要的信息给服务器。

1.4.2 认识“方法” (method)

GET方法 

GET方法是最常用的HTTP方法,常用于获取服务器的某个资源。在浏览器中直接输入URL,此时浏览器就会发出一个GET请求

在上面的抓包结果中可以看到最上面的

是通过浏览器地址栏发送的get请求。

选中这条观察请求的详细结果:

GET https://www.sogou.com/ HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/w
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: SUID=19AA8B7B6E1CA00A000000005F9A2F76; SUV=1603940214073598; pgv_pvi=266

GET请求的特点:

首行第一部分为GET

URL的query string 可以为空也可以不为空

header由若干个键值对结构

body部分为空

1.4.3 认识请求“报头”(header)

header 的整体格式也是“键值对” 的结构

Host 表示服务器主机的地址和端口

Content-Length 表示body中数据的长度

Content-Type 表示请求body中的数据格式。常见选项:

application/x-www-form-urlencoded: form 表单提交的数据格式. 此时 body 的格式形如:
 

title=test&content=hello

multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped="multipart/form-data" . 通常用于提交图片/文件. body 格式形如:

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3Trw
------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"}

User-Agent 表示浏览器/操作系统的属性

Referer 表示这个页面是从哪个页面跳转过来的。如果直接在浏览器输入URL或者直接通过收藏夹访问是没有 Referer 的。

Cookie 中存储了一个字符串,这个数据可能是客户端(网页)自行通过JS写入的,也可能来自于服务器(服务器在HTTP响应的header中通过set-cookie字段给浏览器返回数据)。往往可以通过这个字段实现“身份标识”的功能。可以通过抓包观察登陆的过程。

1.4.4 认识请求“正文”(body)

正文中的内容格式和header 中的 content-type 密切相关。上面也罗列了三种常见情况。

1.5 HTTP 响应详解

1.5.1 HTTP 状态码

状态码表示访问一个页面的结果(是访问成功还是失败还是其他的一些情况...)

以下为一些常见的状态码

200 OK 这是最常见的一个状态码,表示访问成功

404 Not Found 没有找到资源

403 Forbidden 表示访问被拒绝,有的页面需要一些权限才能够访问(登录后才能访问),如果用户没有登陆直接访问,就容易见到 403

405 Method Not Allowed 前面我们已经学习了 HTTP 中所支持的方法,但是对方的服务器不一定支持所有的方法

500 Internal Server Error 服务器出现内部错误,一般是服务器的代码执行过程中遇到了一些特殊情况。

504 Gateway Timeout 当服务器负载比较大的时候,服务器处理单条请求的时候耗时就会比较长,就很可能会出现超时的情况。

302 Move temporarily 临时重定向。

301 Moved Permanently 永久重定向。

1.5.2 响应“报头”(header)

响应报头的基本格式和请求报头的格式基本⼀致.

类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义⼀致.

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

 text/html : body 数据格式是 HTML

 text/css : body 数据格式是 CSS

 application/javascript : body 数据格式是 JavaScript

 application/json : body 数据格式是 JSON

1.5.3 响应“正文”(body)

text/html:

Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:09 GMT
Content-Type: text/html; charset=utf-8
Last-Modified: Thu, 13 May 2021 09:01:26 GMT
Connection: keep-alive
ETag: W/"609ceae6-3206"
Content-Length: 12806
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
......

text/css:

HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:09 GMT
Content-Type: text/css
Last-Modified: Thu, 13 May 2021 09:01:26 GMT
Connection: keep-alive
ETag: W/"609ceae6-3cfbe"
Content-Length: 249790
@font-face{font-family:element-icons;src:url(../../static/fonts/element-icons.53
......

application/JavaScript

HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:09 GMT
Content-Type: application/javascript; charset=utf-8
Last-Modified: Thu, 13 May 2021 09:01:26 GMT
Connection: keep-alive
ETag: W/"609ceae6-427d4"
Content-Length: 272340
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(t,
......

application/json:

HTTP/1.1 200
Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:10 GMT
1 2 3Content-Type: application/json;charset=UTF-8
Connection: keep-alive
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
vary: accept-encoding
Content-Length: 12268
{"msg":"操作成功","code":200,"permissions":[] }

二、HTTPS

HTTPS 也是应用层协议,是在HTTP协议的基础上引入了一个加密层。

HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中会出现被篡改的情况。臭名昭著的“运营商劫持”。就比如你下载一个天天动听,未被劫持的情况下你点击下载按钮就会弹出天天动听的下载链接,如果已被劫持就会弹出QQ浏览器的下载链接。

由于我们通过网络传输的任何数据包都会经过运营商的网络设备,那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改。点击 "下载按钮", 其实就是在给服务器发送了⼀个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP 的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改成 "QQ浏览器" 的下载地址了.

2.1 HTTPS的工作过程

既然要保证数据安全,就需要进行“加密”。

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

加密的方法有很多,但是大致可以分为对称加密非对称加密。

HTTPS加密完整流程:

HTTPS ⼯作过程中涉及到的密钥有三组.

第⼀组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.

第⼆组(非对称加密): 用于协商生成对称加密的密钥. 服务器生成这组 私钥-公钥 对, 然后通过证书把公钥传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.

第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91052.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『 C++ 入门到放弃 』- 哈希表

一、哈希的概念 哈希&#xff0c;也称「 散列 」是一种用来进行高效查找的数据结构&#xff0c;查找的时间复杂度平均为O(1)&#xff0c;其本质就是依赖哈希函数这个算法来将 key 和该 key 存储位置建立一个映射关系。 而因为是有着映射关系&#xff0c;所以哈希的事件复杂度为…

零售收银系统开源代码全解析:连锁门店一体化解决方案(含POS+进销存+商城)

过去10年&#xff0c;收银系统技术经历了从单机版到云服务、从单纯结算到全渠道整合的快速演进。面对连锁多门店、AI称重、智能分账、跨店库存同步等新需求&#xff0c;很多企业的现有传统saas系统已显乏力。本文将梳理收银系统关键技术指标&#xff0c;助您在系统升级时做出明…

能源高效利用如何实现?楼宇自控系统智能化监管建筑设备

随着全球能源危机日益严峻和“双碳”目标的持续推进&#xff0c;建筑领域作为能耗大户&#xff08;约占社会总能耗的40%&#xff09;&#xff0c;其节能潜力备受关注。楼宇自控系统&#xff08;Building Automation System&#xff0c;简称BAS&#xff09;作为建筑智能化的核心…

校园二手交易小程序的设计与实现

文章目录前言详细视频演示具体实现截图后端框架SpringBoot微信小程序持久层框架MyBaits成功系统案例&#xff1a;参考代码数据库源码获取前言 博主介绍:CSDN特邀作者、985高校计算机专业毕业、现任某互联网大厂高级全栈开发工程师、Gitee/掘金/华为云/阿里云/GitHub等平台持续…

Redis(二):Redis高级特性和应用(慢查询、Pipeline、事务)

Redis的慢查询 许多存储系统&#xff08;例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间&#xff0c;当超过预设阀值,就将这条命令的相关信息&#xff08;例如:发生时间&#xff0c;耗时&…

如何为你的WordPress网站选择合适的安全插件

在管理WordPress网站时&#xff0c;安全因素至关重要。由于WordPress的广泛使用&#xff0c;它也成为了黑客攻击的首要目标。为了避免潜在的安全风险&#xff0c;选择合适的安全插件至关重要。而Wordfence和iThemes&#xff0c;作为两款颇具人气的WordPress安全插件&#xff0c…

我们使用Rust开发的AI知识库应用

这段时间陆陆续续的开发了2个AI知识库应用&#xff0c;一个面向企业&#xff0c;一个面向C端用户。 飞树智库&#xff1a;一个安全高效的面向 企业的知识库平台&#xff08;https://fskb.coderbox.cn/&#xff09;。 小飞树&#xff1a;一个专注于个人知识管理的AI应用&#…

自动化测试实战篇

目录 1. 自动化实施步骤 1.1 编写web测试用例 1.2 自动化测试脚本开发 1.3 将自动化测试补充至测试报告 1. 自动化实施步骤 1.1 编写web测试用例 1.2 自动化测试脚本开发 TestDevelopment: 测试用例 - Gitee.comhttps://gitee.com/Axurea/test-development/tree/master/2…

idea 服务器Debug端口启动设置

一&#xff1a;在阿里云服务器安全组已经设置了端口授权对象&#xff1a;正确命令&#xff1a;nohup java -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address9998 -jar -Duser.timezoneGMT08 -Xms256m -Xmx256m /opt/projects/*/*/*-starter-1.0-SNAPSHOT.jar -…

大模型量化004

Bert P-tuning BertPET、BertP-Tuning Chain of Thought Few shot Cot Auto-COT 解决手动编写高质量CoT示例麻烦耗时的问题 Auto COT 自动思维链生成器 1.业务场景&#xff1a; 每天收到很多反馈&#xff0c;之前需要人工整理&#xff0c;找到重点&#xff0c;做判断那些需要立…

C#(基本语法)

数据类型C#是一种强类型语言&#xff0c;变量必须声明类型。基本数据类型包括整型&#xff08;int、long&#xff09;、浮点型&#xff08;float、double&#xff09;、布尔型&#xff08;bool&#xff09;、字符型&#xff08;char&#xff09;和字符串型&#xff08;string&a…

ARM-I2C软实现

开发流程引脚初始化引脚功能定义实现读操作实现写操作GD32F4软件I2C初始化void SoftI2C_init() {// 时钟配置rcu_periph_clock_enable(SCL_RCU);// 设置输出模式gpio_mode_set(SCL_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SCL_PIN);gpio_output_options_set(SCL_PORT, GPIO_O…

防水医用无人机市场报告:现状、趋势与洞察

市场规模与增长趋势在全球医疗科技快速发展的当下&#xff0c;防水医用无人机市场正崭露头角&#xff0c;展现出强劲的发展势头。据 QYR统计&#xff0c;2023 年全球医用无人机市场销售额达到 1.9 亿美元&#xff0c;预计到 2030 年将飙升至 8.5 亿美元&#xff0c;年复合增长率…

haproxy代理

一.负载均衡 1.1.什么是负载均衡 负载均衡&#xff1a;Load Balance&#xff0c;简称LB&#xff0c;是一种服务或基于硬件设备等实现的高可用反向代理技术&#xff0c;负载均 衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备&#xff0c;…

【面试】软件测试面试题

1. 测试用例如何编写 2. bug的生命周期 项目有多少人&#xff1f;多少条测试用例&#xff1f;多少bug&#xff1f;自己发现的第一条&#xff1f;&#xff08;是不是bug&#xff09; 3. 缺陷管理工具 包括Jira, PingCode, 禅道&#xff0c;BugZilla&#xff0c;Redmine, TAPD&am…

HbuilderX开发小程序

1.打卡HbuilderX&#xff0c;选择文件—新建—项目2.创建项目3.在HbuilderX中运行前要确定微信开发这工具的服务端口号是打开的4.HbuilderX中点击预览可以实时预览5.在微信开发者中进行本地测试点击后自动跳转到微信开发者工具中运行项目

Netty中FastThreadLocal解读

io.netty.util.concurrent.FastThreadLocal 是 Netty 中提供的高性能线程局部存储&#xff08;Thread-Local Storage&#xff09;实现&#xff0c;位于 io.netty.util.concurrent 包。它是 Java 标准库 ThreadLocal 的替代品&#xff0c;旨在优化性能&#xff0c;减少内存分配和…

上海迪士尼游玩攻略 小铁寄存柜让你轻松畅玩

去上海迪士尼玩最烦带一堆行李&#xff0c;其实有小铁寄存柜帮忙就能轻装上阵&#xff0c;各个关键位置都有分布&#xff0c;玩起来特别省心。​刚到迪士尼的时候&#xff0c;要是坐地铁到上海国际旅游度假区站&#xff0c;1/2 号口安检区就有小铁柜&#xff0c;行李箱、大背包…

飞算科技重磅出品:飞算 JavaAI 重构 Java 开发效率新标杆

在 Java 开发领域&#xff0c;一款由国家级高新技术企业自主研发的智能工具正引发行业关注 —— 飞算 JavaAI 不仅承载着中国原创技术的创新基因&#xff0c;更以贴合实际开发场景的功能设计&#xff0c;成为众多企业提升 Java 开发效率的核心助力。​作为飞算数智科技&#xf…

python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析

1&#xff0e;绪论1.1研究背景与意义1.1.1研究背景随着旅游业的快速发展&#xff0c;满意度分析成为评估旅游景点质量和提升游客体验的重要手段。作为中国的旅游城市之一&#xff0c;其旅游景点吸引了大量游客。然而&#xff0c;如何科学评估和提升旅游景点的满意度&#xff0c…