自学内容网 自学内容网

网络原理(HPPT/HTTPS)

应用层(重点)

HTTP协议

HTTP 是⼀个⽂本格式的协议. 可以通过 Chrome 开发者⼯具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节.

Fiddler 抓包

左侧窗⼝显⽰了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
右侧上⽅显⽰了 HTTP 请求的报⽂内容. (切换到 Raw 标签⻚可以看到详细的数据格式)
右侧下⽅显⽰了 HTTP 响应的报⽂内容. (切换到 Raw 标签⻚可以看到详细的数据格式)
请求和响应的详细数据, 可以通过右下⻆的 View in Notepad 通过记事本打开

HTTP 请求 (Request)

认识 URL

平时我们俗称的 "⽹址" 其实就是说的 URL

https : 协议⽅案名. 常⻅的有 http 和 https, 也有其他的类型. (例如访问 mysql 时⽤的
jdbc:mysql )
user:pass : 登陆信息. 现在的⽹站进⾏⾝份认证⼀般不再通过 URL 进⾏了. ⼀般都会省略
v.bitedu.vip : 服务器地址. 此处是⼀个 "域名", 域名会通过 DNS 系统解析成⼀个具体的 IP 地
址. (通过 ping 命令可以看到, v.bitedu.vip 的真实 IP 地址为 118.24.113.28 )
端⼝号: 上⾯的 URL 中端⼝号被省略了. 当端⼝号省略的时候, 浏览器会根据协议类型⾃动决定使⽤
哪个端⼝. 例如 http 协议默认使⽤ 80 端⼝, https 协议默认使⽤ 443 端⼝.
/personInf/student : 带层次的⽂件路径.
userId=10000&classId=100 : 查询字符串(query string). 本质是⼀个键值对结构. 键值对之
间使⽤ & 分隔. 键和值之间使⽤ = 分隔.
⽚段标识: 此 URL 中省略了⽚段标识. ⽚段标识主要⽤于⻚⾯内跳转. 

认识 "⽅法" (method)

1. GET ⽅法

GET 是最常⽤的 HTTP ⽅法. 常⽤于 获取服务器 上的某个资源. 在浏览器中直接输⼊ URL, 此时浏览器就会发送出⼀个 GET 请求.
另外, HTML 中的 link, img, script 等标签, 也会触发 GET 请求.
2.GET 请求的特点
⾸⾏的第⼀部分为 GET
URL 的 query string 可以为空, 也可以不为空.
header 部分有若⼲个键值对结构.
body 部分为空

POST ⽅法

POST ⽅法也是⼀种常⻅的⽅法. 多⽤于 提交⽤⼾输⼊的数据给服务器 (例如登陆⻚⾯).
通过 HTML 中的 form 标签可以构造 POST 请求, 或者使⽤ JavaScript 的 ajax 也可以构造 POST Z
2.POST 请求的特点
⾸⾏的第⼀部分为 POST
URL 的 query string ⼀般为空 (也可以不为空)
header 部分有若⼲个键值对结构.
。body 部分⼀般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的⻓度
由 header 中的 Content-Length 指定

GET与POST区别(经典面试问题)

其他⽅法

认识请求 "报头" (header)

header 的整体的格式也是 "键值对" 结构.
每个键值对占⼀⾏. 键和值之间使⽤分号分割.

报头的种类有很多, 此处仅介绍⼏个常⻅的:

Host :表⽰服务器主机的地址和端⼝.
Content-Length :表⽰ body 中的数据⻓度.
Content-Type :表⽰请求的 body 中的数据格式

Host

Content-Length

Content-Type

Referer :这个⻚⾯是从哪个⻚⾯跳转过来的

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

Cookie:浏览器在本地实体化的一个机制

Cookie 中存储了⼀个字符串, 这个数据可能是客⼾端(⽹⻚)⾃⾏通过 JS 写⼊的, 也可能来⾃于服务器 (服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据).

cookie登录过程

HTTP/方法/URL/版本号(总结)

请求头(总结)

HTTP 响应

状态码

认识响应 "报头" (header)

响应报头的基本格式和请求报头的格式基本⼀致.
  Content-Type , Content-Length 等属性的含义也和请求中的含义⼀致.

Content-Type/Content-Length

响应中的 Content-Type 常⻅取值有以下⼏种:
text/html : body 数据格式是 HTML
text/css : body 数据格式是 CSS
application/javascript : body 数据格式是 JavaScript
application/json : body 数据格式是 JSON

认识响应 "正⽂" (body)

正⽂的具体格式取决于 Content-Type. 

通过 form 表单构造 HTTP 请求

form (表单) 是 HTML 中的⼀个常⽤标签. 可以⽤于给服务器发送 GET 或者 POST 请求.
不要把 form 拼写成 from!!

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 就对应了按钮上显⽰的⽂本

通过 Java socket 构造 HTTP 请求

HTTPS 

HTTPS 也是⼀个应⽤层协议. 是在 HTTP 协议的基础上引⼊了⼀个加密层.
HTTP 协议内容都是按照⽂本的⽅式明⽂传输的. 这就导致在传输过程中出现⼀些被篡改的情况

"加密" 

加密就是把 明⽂ (要传输的信息)进⾏⼀系列变换, ⽣成 密⽂ .
解密就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂

HTTPS 的⼯作过程

既然要保证数据安全, 就需要进⾏ "加密".
⽹络传输中不再直接传输明⽂了, ⽽是加密之后的 "密⽂".
加密的⽅式有很多, 但是整体可以分成两⼤类: 对称加密 和 ⾮对称加密

引⼊对称加密

对称加密其实就是通过同⼀个 "密钥" , 把明⽂加密成密⽂, 并且也能把密⽂解密成明⽂.

引⼊⾮对称加密

⾮对称加密要⽤到两个密钥, ⼀个叫做 "公钥", ⼀个叫做 "私钥".
公钥和私钥是配对的. 最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多.
通过公钥对明⽂加密, 变成密⽂
通过私钥对密⽂解密, 变成明⽂
也可以反着⽤
通过私钥对明⽂加密, 变成密⽂
通过公钥对密⽂解密, 变成明⽂


原文地址:https://blog.csdn.net/2301_80363309/article/details/143955461

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!