首页 > 其他分享 >HTTP相关基础

HTTP相关基础

时间:2024-03-17 22:57:11浏览次数:23  
标签:协议 HTTP 请求 GET 报文 基础 相关 数据

HTTP 是什么

HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol。
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

HTTP 知识地图

image.png

与HTTP相关的协议

HTTP报文

报文结构

拿 TCP 报文来举例,它在实际要传输的数据之前附加了一个 20 字节的头部数据,存储 TCP 协议必须的额外信息,例如发送方的端口号、接收方的端口号、包序号、标志位等等:
image.png
有了这个附加的 TCP 头,数据包才能够正确传输,到了目的地后把头部去掉,就可以拿到真正的数据。
HTTP 协议也是与 TCP/UDP 类似,同样也需要在实际传输的数据前附加一些头数据,不过与 TCP/UDP 不同的是,它是一个“纯文本”的协议,所以头数据都是 ASCII 码的文本,可以很容易地用肉眼阅读,不用借助程序解析也能够看懂。
HTTP 协议的请求报文和响应报文的结构基本相同,由三大部分组成:

  • 起始行(start line):描述请求或响应的基本信息;
  • 头部字段集合(header):使用 key-value 形式更详细地说明报文;
  • 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

这其中前两部分起始行和头部字段经常又合称为“请求头”或“响应头”,消息正文又称为“实体”,但与“header”对应,很多时候就直接称为“body”。
HTTP 协议规定报文必须有 header,但可以没有 body,而且在 header 之后必须要有一个“空行”,也就是“CRLF”,十六进制的“0D0A”。
所以,一个完整的 HTTP 报文就像是下图的这个样子:
image.png

一个抓包信息如下,第一行“GET / HTTP/1.1”就是请求行,而后面的“Host”“Connection”等等都属于 header,报文的最后是一个空白行结束,没有 body。
image.png

请求行

请求报文里的起始行也就是请求行(request line),它简要地描述了客户端想要如何操作服务器端的资源。

这三个部分通常使用空格(space)来分隔,最后要用 CRLF 换行表示结束。
image.png
用 Wireshark 抓包的数据来举例:

GET / HTTP/1.1

状态行


image.png
示例:

HTTP/1.1 200 OK

头部字段

请求行或状态行再加上头部字段集合就构成了 HTTP 报文里完整的请求头或响应头:
image.png
image.png
请求头和响应头的结构是基本一样的,唯一的区别是起始行。
HTTP 头字段非常灵活,不仅可以使用标准里的 Host、Connection 等已有头,也可以任意添加自定义头,这就给 HTTP 协议带来了无限的扩展可能。
头字段需要注意下面几点:

常用头字段

请求方法

请求方法描述

  • 请求方法是客户端发出的、要求服务器执行的、对资源的一种操作;
  • 请求方法是对服务器的“指示”,真正应如何处理由服务器来决定;
  • 最常用的请求方法是 GET 和 POST,分别是获取数据和发送数据;
  • HEAD 方法是轻量级的 GET,用来获取资源的元信息;

目前 HTTP/1.1 规定了八种方法,单词都必须是大写的形式:

  • GET:获取资源,可以理解为读取或者下载数据;
  • HEAD:获取资源的元信息;
  • POST:向资源提交数据,相当于写入或上传数据;
  • PUT:类似 POST;
  • DELETE:删除资源;
  • CONNECT:建立特殊的连接隧道;
  • OPTIONS:列出可对资源实行的方法;
  • TRACE:追踪请求 - 响应的传输路径。

安全与幂等


URI

注意:客户端和服务器看到的 URI 是不一样的。客户端看到的必须是完整的 URI,使用特定的协议去连接特定的主机,而服务器看到的只是报文请求行里被删除了协议名和主机名的 URI。

响应状态码

HTTP 特点

特点

优缺点

针对 HTTP1.1

参考:

  • 极客时间:《透传 HTTP 协议》


标签:协议,HTTP,请求,GET,报文,基础,相关,数据
From: https://www.cnblogs.com/xinbat/p/18079376

相关文章

  • 关于Gradle的相关参数和设置
    M2_HOME和GRADLE_USER_HOME变量在$M2_HOME/conf/settings.xml文件中指定Gradle的本地仓库配置信息。在$GRADLE_USER_HOME/caches/modules-2/files-2.1路径下保存通过Gradle下载的依赖包,Gradle可以直接使用Maven的本地仓库。如果没有明确配置环境变量GRADLE_USER_HOME,Gradle默认......
  • FastJson反序列化1-FastJson基础使用及反序列化流程分析
    1、FastJson简介及使用fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。1.1序列化JavaBean;假设现在程序中有一个类User,基本信息如下(省略构造方法及getset方法):packageorg.exampl......
  • linux libc.so.6软链接错误 导致ls等基础命令无法使用,系统无法登录
    转:linuxlibc.so.6软链接错误导致ls等基础命令无法使用_error:/lib64/libpthread.so.0:symbol__libc_dl_er-CSDN博客目录 一、背景说明二、处置步骤1、故障状态2、通过ls命令tab补全键查看文件列表3、查看glibc版本4、重建libc.so.6的软链接5、ssh远程连接报错6、......
  • go语言请求http接口示例 并解析json
    本例请求了天气api接口对接流程注册一个账号,对接免费实况天气接口阅读接口文档http://tianqiapi.com/index/doc?version=day请求接口解析json开发流程创建一个json.go文件需要引入的包import( "encoding/json" "fmt" "io/ioutil" "net/http")定义Wea......
  • 计算机基础知识问答:数据库篇
    数据库系统数据库的三范式是什么?数据库的三范式(3NF,ThreeNormalForms)是关系型数据库设计的基础理论,它确保了数据的结构化和减少数据的冗余性。第一范式(1NF):确保每个列都不可再分,即列中存储的都是原子值,不可再分的数据项。第二范式(2NF):在满足第一范式的基础上,确保每个......
  • 学了 Python 但又感觉没学 Python 不如重学 Python - day2(基础内置函数与变量引用的详
    目录1、int函数2、bin、oct、hex 函数3、type函数4、complex函数5、布尔运算6、chr与ord函数7、max与min函数8、eval函数9、变量对象引用10、对象的垃圾回收11、变量命名规则12、序列赋值13、增强赋值1、int函数按n进制将整数字符串转换为......
  • 网络安全快速入门(四) python基础
    4.1初识python我们在前面已经了解了批处理和控制台命令,但这类语言输入显得过于复杂,并且需要注意的事项有很多。那么问题来了,有没有什么操作简单,门槛较低,容易学习操作的计算机语言呢?今天他来了,python!百度是这么说的:简单,易学,速度快等等一系列优点,今天我们就来了解一下python语......
  • Vue.js前端开发零基础教学(一)
    目录第一章 初识Vue.js前言 开发的好处一.前端技术的发展什么是单页Web应用?二.Vue的简介三.Vue的特性四.Vue的版本五.常见的包管理六.安装node环境第一章 初识Vue.js学习目标:了解前端技术的发展了解什么是Vue掌握使用方法掌握Node.js环境的搭建前言......
  • 数组基础使用
    关于数组①数组定义之后大小不能改变②数组内元素数据类型相通不允许出现不同类型③数组内的元素可以是任何数据类型包括基本数据类型和引用数据类型④数组变量属于引用类型,数组也可以看做是对象,数组的每个元素的相当于这个对象的成员变量⑤数组本身是对象Java中对象是在......
  • 为什么 HTTP3.0 使用 UDP 协议?
    HTTP2.0和TCP的关系HTTP2.0是2015年推出的,还是比较年轻的,其重要的二进制分帧协议、多路复用、头部压缩、服务端推送等重要优化使HTTP协议真正上了一个新台阶。像谷歌这种重要的公司并没有满足于此,而且想继续提升HTTP的性能,花最少的时间和资源获取极致体验。那肯定要问HTTP2.0......