HTTP 完全解析

2023-05-16

Http 详解

HTTP 的定义

HTTP即是:Hypertext Transfer Protocol,超文本传输协议,⼀种⽹络传输协议,位于 TCP / IP 协议族的最顶层——应⽤层

URL

说到HTTP,不得不说URL,URL(统一资源定位符)是URI(统一资源标识符)的一个子集,用来标识网络上某一资源的位置。
URL格式:
三部分:协议类型、服务器地址(和端⼝号)、路径(Path)
也即是:协议类型://服务器地址[:端⼝号]路径

HTTP报文格式

请求报文:
在这里插入图片描述
请求报文分为三部分:请求行、请求头、请求体
请求行:方法类型:路径 Http版本
请求头:主机地址,内容编码、内容长度、Cookie等
请求体:请求携带的参数,GET请求会携带在URL后面(有长度限制),POST请求稍微复杂,后面会将到

响应报文:
在这里插入图片描述
同样,响应报文也分为三部分:状态行、响应头、返回内容

Request Method 请求⽅法

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
实际对Android开发来说,常用的方法就是GET和POST,这里主要对这两种请求方法做讲解

GET请求

  • 用途:⽤用于获取资源
  • 对服务器器数据不进⾏修改
  • 不发送 Body
//Android中发起一个GET请求,对应 Retrofit 的代码:
@GET("/users/{id}")
Call<User> getUser(@Path("id") String id);

POST请求

  • ⽤用于增加或修改资源
  • 发送给服务器器的数据带在body里面
//Android开发中 对应 Retrofit 的代码:
@FormUrlEncoded	
@POST("/users/update")
Call<User> addUser(@Field("name") String name;

HEAD

和 GET 使⽤用⽅方法完全相同
和 GET 唯⼀一区别在于,返回的响应中没有 Body

Status Code 状态码

当收到服务器响应的时候,会给我们带过来一个状态码
三位数字,⽤用于对响应结果做出类型化描述(如获取成功、内容未找到等等)。这里列表一些常用的标准状态码

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

Header中的Content-Type

指定 请求报文或者响应报文中Body 的类型。主要有四类:

  1. text/html
  2. x-www-form-urlencoded
  3. multitype/form-data
  4. application/json , image/jpeg , application/zip 等

1、text/html类型
请求 Web ⻚⾯是返回响应的类型,Body 中返回 html ⽂本。格式如下:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1111
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
......

2、x-www-form-urlencoded
Web ⻚⾯纯⽂本表单的提交⽅式
在这里插入图片描述
3、multitype/form-data
Web ⻚⾯含有⼆进制⽂件时的提交⽅式
格式如下:

  POST /users HTTP/1.1
Host: api.github.com
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundary7MDofjOjejdljXiqP
Content-Length: 8838
------WebKitFormBoundary77MDofjOjejdljXiqP
Content-Disposition: form-data; name="name"
nyc
------WebKitFormBoundary7MDofjOjejdljXiqP
Content-Disposition: form-data; name="header"; filename="header.jpg"
Content-Type: image/jpeg
JeOdiosfewjosfDSJofoodSODFosfd......
------WebKitFormBoundary7MDofjOjejdljXiqP--
//对应 Retrofit 的代码:
@Multipart
@POST("/users/update")
Call<User> addUser(@Part("name") RequestBody name, @Part("header")
RequestBody header);

//构造请求
RequestBody namePart = RequestBody.create(MediaType.parse("text/plain"),
nameStr);
RequestBody headerPart = RequestBody.create(MediaType.parse("image/jpeg"),
headerFile);
api.addUser(namePart, headerPart);

4、application/json , image/jpeg , application/zip
单项内容(⽂本或⾮⽂本都可以),⽤于 Web Api 的响应或者 POST / PUT 的请求或者GET请求

//请求中提交 JSON
POST /users HTTP/1.1
Host: hencoder.com
Content-Type: application/json; charset=utf-8
Content-Length: 288
{"name":"nyc"}
对应 Retrofit 的代码:
@POST("/users/update")
Call<User> addUser(@Body("user") User user);
api.addUser(user);

//响应中返回 JSON
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 234
[{"login":"mojombo","id":1,"node_id":"MDQ6VXNl
cjE=","header_url":"https://profile.csdnimg.cn/0/5/F/1_weixin_46055193""......

header中的Content-Length

指定 Body 的⻓度(字节)。
Transfer: chunked (分块传输编码 Chunked Transfer Encoding)
⽤于当响应发起时,内容⻓度还没能确定的情况下。和 Content-Length 不同时使⽤。⽤途是尽早给
出响应,减少⽤户等待。

Header中的User-Agent

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

Header中的Range / Accept-Range

按范围取数据Accept-Range: bytes 响应报⽂中出现,表示服务器⽀持按字节来取范围数据
Range: bytes=- 请求报⽂中出现,表示要取哪段数据
Content-Range:-/total 响应报⽂中出现,表示发送的是哪段数据
作⽤:断点续传、多线程下载

Cache

作⽤:缓存数据以降低从服务器取数据的频率,以加快响应速度和提⾼⽹络使用率

其他Headers

Accept: 客户端能接受的数据类型。如 text/html
Accept-Charset: 客户端接受的字符集。如 utf-8
Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
Content-Encoding:压缩类型。如 gzip

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP 完全解析 的相关文章

随机推荐

  • S-V信道模型理解

    Saleh和Valenzuela提出的S V信道模型是基于大量室内信道测试构建的 xff0c 更加符合室内真实路径的传播规律 xff0c 可以用来进行信道建模与仿真 下图显示了具有多簇射线的S V信道模型 xff0c 该模型中多径以簇形式达
  • wifi收发数据包分析

    根据802 11n协议WIFI每次发送64字节数据 Intel5300网卡接收的数据包大小为213字节或者393字节或者573字节 说明接受的数据包包含多个发送的包 猜想每个数据包是由多个主体重复加上固定的标志位组成 x 61 1 2 3
  • 清华大学 | 摄像头-激光雷达的时空在线集成标定方法

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 后台回复 多模态综述 获取论文 xff01 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 xff01 后台回复 领域综述
  • 操作系统-硬件结构(小林coding笔记)

    控制和管理整个计算机系统的硬件和软件资源 xff1b 提供给用户和其他软件方便的接口和环境 xff1b 主要包括进程管理 内存管理 文件系统 设备管理和网络系统 图灵机的工作方式 基本思想就是用机器模拟人类用纸笔进行数学运算的过程 主要包含
  • 操作系统-三、操作系统结构(小林coding笔记)

    3 1Linux内核和Windows内核 Windows和Linux是常见的两款操作系统 xff0c 操作系统最核心的东西就是内核 内核 内核作为应用连接硬件设备的桥梁 内核的四个基本功能 xff1a 进程调度 内存管理 硬件通信 系统调用
  • 操作系统-四、内存管理(小林coding笔记)

    虚拟内存 防止内存运行多个程序时崩溃 把进程所使用的地址隔离开 xff0c 让操作系统为每个进程分配一套独立的虚拟地址 操作系统会提供一种机制 xff0c 将不同进程的虚拟地址和不同内存的物理地址映射起来 内存分段 程序时由若干逻辑分段组成
  • libcurl库

    目录 1 libcurl简介2 libcurl的使用3 libcurl的安装Libcurl库等第三方库的通用编译方法 3 调用libcurl访问百度主页4 libcurl 相关API解读1 curl global init 2 curl g
  • ERROR: cannot launch node of type: rplidar_ros

    1首先使用rospack find 命令查找该功能包 xff0c 如果输出功能包路径则该功能包存在 xff0c 如果提示没有则说明我们需要下载一个rplidar ros rospack find rplidar ros 2使用sudo ap
  • 【jetson nano】jetson nano环境配置+yolov5部署+tensorRT加速模型

    目录 jetson nano环境配置 43 yolov5部署 43 tensorRT加速模型致谢主机和jetson nano环境jetson系统开机烧录 系统设置 换源python环境配置conda环境yolov5环境matplotlib和
  • MDK仿真出现NOT IN SCOPE(不在范围内)

    这两天刚拿到一套GD32F1系列的开发板 xff0c 想着测试一下 xff0c 看和STM32的有啥不同 xff0c 自己仿真时候 xff0c 想要在窗口观察一下数值 xff0c 结果总是提示NOT IN SCOPE没办法 xff0c 就查
  • Keil调试局部变量显示“not in scope“的问题解决

    Keil调试局部变量显示 34 not in scope 34 的问题解决 参考文章 xff1a xff08 1 xff09 Keil调试局部变量显示 34 not in scope 34 的问题解决 xff08 2 xff09 https
  • MPU6050可以读取ID值,温度值和原始数据值为零问题解决

    MPU6050可以读取ID值 xff0c 温度值和原始数据值为零问题解决 参考文章 xff1a xff08 1 xff09 MPU6050可以读取ID值 xff0c 温度值和原始数据值为零问题解决 xff08 2 xff09 https w
  • 英伟达Jetson Xavier NX部署YOLO5

    1 查看JetPack版本 新到手的NX首先需要确定一下JetPack的版本 xff1a sudo apt span class token operator span cache show nvidia span class token
  • 史上最全 | BEV感知算法综述(基于图像/Lidar/多模态数据的3D检测与分割任务)...

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 BEV综述 获取论文 xff01 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文
  • matlab-字符串的处理操作

    建立一个字符串向量 xff0c 然后对该向量做如下处理 xff1a 取第1 5个字符组成的子字符串 将字符串倒过来重新排列 将字符串中的小写字母变成相应的大写字母 xff0c 其余字符不变 统计字符串中小写字母的个数 代码 ch 61 39
  • curl发送带有Authorization的POST请求

    一 参数说明 格式 xff1a curl H 请求头 d 请求体 X POST 接口地址 参数内容格式 H header 请求头 Content Type application json d请求内容 remote host 10 163
  • AStar寻路算法 (C#)

    一 介绍 A星算法其实并不是最短路径算法 xff0c 它找到的路径并不是最短的 xff0c 它的目标首先是能以最快的速度找到通往目的地的路 B星实际上是A星的优化 但是B星的缺点是不能向后查找 所以会有问题 还有一种D星的可以用来找最短路径
  • 深度相机介绍(TOF、RGB双目、结构光参数对比)

    一 深度相机的介绍 随着计算机视觉与人工智能技术的飞速发展 xff0c 采用深度相机进行场景三维重建 目标检测 环境感知等应用越来越广泛 xff0c 与传统的2D相机不同 xff0c 深度相机可以通过拍摄空间来获得景深信息 xff0c 从而
  • 网络编程——UDP

    目录 UDP的服务器端 UDP的echo客户端代码 UDP的echo服务器端代码 UDP的服务器端 先运行服务器端 xff0c 再运行客户端 服务端 xff1a 开发者 xff1a Virtuous 开发版本 xff1a 1 0 开发时间
  • HTTP 完全解析

    Http 详解 HTTP 的定义 HTTP即是 xff1a Hypertext Transfer Protocol xff0c 超文本传输协议 xff0c 种 络传输协议 xff0c 位于 TCP IP 协议族的最顶层 应 层 URL 说到