【学习笔记】HTTP、TCP/IP及HTTPS

目录

一、HTTP是什么 

二、工作方式

浏览器:

⼿机 App:

三、报文格式

请求报文:Request

响应报文:Response

四、请求方式

GET

POST

PUT:

DELETE

HEAD

五、状态码

六、Header

Host:服务器主机地址

Content-Type:内容的类型

text/html:html文本,用于浏览器页面响应

application/x-www-form-urlencoded:普通表单

multipart/form-data; boundary=------:多部分形式,一般用于传输包含二进制内容的多项内容

application/json:json形式,用于Web Api的响应或POST/PUT请求

image/jpeg / application/zip ...:二进制单文件

Chunked Transfer Encoding:分块传输编码

Location:重定向到目标URL

User-Agent:用户代理 

Range / Accept-Range:指定Body的内容范围

Cookie / Set-Cookie:发送Cookie / 设置Cookie

Authorization:授权信息

Accept:客户端能接受的数据类型。如 text/html

Accept-Charset:客户端接受的字符集。如 utf-8

Accept_Encoding:客户端接受的压缩编码类型。如 gzip

Content-Encoding:压缩类型。如 gzip

Cache:缓存

七、TCP / IP 协议族

概念

为什么要分层?

具体分层:

什么叫做连接

三次握手

 四次挥手

为什么要⻓连接?

⻓连接的实现⽅式

八、HTTPS

定义

⼯作原理

为什么不直接⽤⾮对称加密?

HTTPS 连接建⽴的过程


一、HTTP是什么 

HyperText Transfer Protocol 超文本传输协议

超文本(HTML):在电脑中显示的、含有可以指向其他文本的链接的文本

二、工作方式

浏览器:

⽤户输⼊地址后回⻋或点击链接 -> 浏览器拼装 HTTP 报⽂并发送请求给服务器 ->
务器处理请求后发送响应报⽂给浏览器 -> 浏览器解析响应报⽂并使⽤渲染引擎显示
到界⾯
 

⼿机 App

⽤户点击或界⾯⾃动触发联⽹需求 -> Android 代码调⽤拼装 HTTP 报⽂并发送请求
到服务器 -> 服务器处理请求后发送响应报⽂给⼿机 -> Android 代码处理响应报⽂并
作出相应处理(如储存数据、加⼯数据、显示数据到界⾯)

三、报文格式

请求报文:Request

 

响应报文:Response

四、请求方式

GET

⽤于获取资源
对服务器数据不进⾏修改
不发送 Body

  

对应Retrofit代码:

@GET("/users/{id}")
Call<User> getUser(@Path("id") String id,
@Query("gender") String gender);

POST

⽤于增加或修改资源
发送给服务器的内容写在 Body ⾥⾯

  对应Retrofit代码:

@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name,
@Field("gender") String gender);

PUT

⽤于修改资源
发送给服务器的内容写在 Body ⾥⾯

对应Retrofit代码 

@FormUrlEncoded
@PUT("/users/{id}")
Call<User> updateGender(@Path("id") String id,
@Field("gender") String gender);

DELETE

⽤于删除资源
不发送 Body

对应Retrofit代码

@DELETE("/users/{id}")
Call<User> getUser(@Path("id") String id,
@Query("gender") String gender);
GET 使⽤⽅法完全相同
GET 唯⼀区别在于,返回的响应中没有 Body

用于获取信息;由于响应没有Body,响应比GET快,可在GET请求前进行一次HEAD请求

五、状态码

作用:对结果做出类型化描述(如「获取成功」「内容未找到」)

1xx :临时性消息。如: 100 (继续发送)、 101 (正在切换协议)
2xx :成功。最典型的是 200 OK )、 201 (创建成功)。
3xx :重定向。如 301 (永久移动)、 302 (暂时移动)、 304 (内容未改变)。
4xx :客户端错误。如 400 (客户端请求错误)、 401 (认证失败)、 403 (被禁
⽌)、 404 (找不到内容)。
5xx :服务器错误。如 500 (服务器内部错误)。

作用:HTTP消息的元数据(metadata:数据的属性,描述数据的数据)

Host:服务器主机地址

作用:1.通过DNS查找目标主机IP

           2.查找到目标主机后定位子主机

Content-Type:内容的类型

text/html:html文本,用于浏览器页面响应

application/x-www-form-urlencoded:普通表单

对应Retrofit代码

@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name,
@Field("gender") String gender);

multipart/form-data; boundary=------:多部分形式,一般用于传输包含二进制内容的多项内容

对应Retrofit代码

@Multipart
@POST("/users")
Call<User> addUser(@Part("name") RequestBody name,
@Part("avatar") RequestBody avatar);
...
RequestBody namePart =
RequestBody.create(MediaType.parse("text/plain"),
nameStr);
RequestBody avatarPart =
RequestBody.create(MediaType.parse("image/jpeg"),
avatarFile);
api.addUser(namePart, avatarPart);

application/json:json形式,用于Web Api的响应或POST/PUT请求

对应Retrofit代码

@POST("/users")
Call<User> addUser(@Body("user") User user);
...
// 需要使⽤ JSON 相关的 Converter
api.addUser(user);

image/jpeg / application/zip ...:二进制单文件

对应Retrofit代码

@POST("users/{id}/avatar")
Call<User> updateAvatar(@Path("id") String id, @Body
RequestBody avatar);
...
RequestBody avatarBody =
RequestBody.create(MediaType.parse("image/jpeg"),
avatarFile);
api.updateAvatar(id, avatarBody)

Chunked Transfer Encoding:分块传输编码

        Transfer-Encoding:chunked 

        表示Body长度无法确定,Content-Length不能使用

        目的:在服务端还未获取到完整内容时,更快对客户端做出响应,减少用户等待

  

Location:重定向到目标URL

User-Agent:用户代理 

        作用:⽤户代理,即是谁实际发送请求、接受响应的,例如⼿机浏览器、某款⼿机 App

Range / Accept-Range:指定Body的内容范围

        作用:断点续传;多线程加载(例如迅雷)

Accept-Range: bytes 响应报⽂中出现,表示服务器⽀持按字节来取范围数据
Range: bytes=<start>-<end> 请求报⽂中出现,表示要取哪段数据
Content-Range:<start>-<end>/total 响应报⽂中出现,表示发送的是哪段
数据

Cookie / Set-Cookie:发送Cookie / 设置Cookie

Authorization:授权信息

Accept:客户端能接受的数据类型。如 text/html

Accept-Charset:客户端接受的字符集。如 utf-8

Accept_Encoding:客户端接受的压缩编码类型。如 gzip

Content-Encoding:压缩类型。如 gzip

Cache:缓存

        作⽤:在客户端或中间⽹络节点缓存数据,降低从服务器取数据的频率,以提⾼⽹
络性能。

七、TCP / IP 协议族

概念

⼀系列协议所组成的⼀个⽹络分层模型

为什么要分层?

因为⽹络的不稳定性

具体分层:

Application Layer 应⽤层 HTTP FTP DNS
Transport Layer 传输层 TCP UDP
Internet Layer ⽹络层 IP
Link Layer 数据链路层:以太⽹、 Wi-Fi

什么叫做连接

通信双⽅建⽴确认「可以通信」,不会将对⽅的消息丢弃,即为「建⽴连接」

三次握手

 四次挥手

为什么要⻓连接?

因为移动⽹络并不在 Internet 中,⽽是在运营商的内⽹,并不具有真正的公⽹ IP,因此当某个 TCP 连接在⼀段时间不通信之后,⽹关会出于⽹络性能考虑⽽关闭这条TCP 连接和公⽹的连接通道,导致这个 TCP 端⼝不再能收到外部通信消息,即 TCP连接被动关闭。

⻓连接的实现⽅式

⼼跳。即在⼀定间隔时间内,使⽤ TCP 连接发送超短⽆意义消息来让⽹关不能将⾃⼰定义为「空闲连接」,从⽽防⽌⽹关将⾃⼰的连接关闭。

八、HTTPS

定义

HTTP over SSL 的简称,即⼯作在 SSL (或 TLS )上的 HTTP 。说⽩了就是加密通信
HTTP

⼯作原理

在客户端和服务器之间协商出⼀套对称密钥,每次发送信息之前将内容加密,收到
之后解密,达到内容的加密传输

为什么不直接⽤⾮对称加密?

⾮对称加密由于使⽤了复杂了数学原理,因此计算相当复杂,如果完全使⽤⾮对称
加密来加密通信内容,会严重影响⽹络通信的性能

HTTPS 连接建⽴的过程

大致过程:
1. 客户端请求建立TLS连接
2. 服务器发回证书
3. 客户端验证服务器证书
4. 客户端信任服务器后,和服务器协商对称密钥
5. 使用对称密钥开始通信
具体过程:
1. Client Hello
2. Server Hello
3. 服务器证书 信任建⽴
4. Pre-master Secret
5. 客户端通知:将使⽤加密通信
6. 客户端发送: Finished
7. 服务器通知:将使⽤加密通信
8. 服务器发送: Finished
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值