HTTP 协议的基本格式

一 HTTP是什么

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

HTTP协议的主要特点包括:

无连接:HTTP协议是无连接的,即每次请求都需要建立新的连接,请求处理完毕后就断开连接(HTTP/1.0)。不过,从HTTP/1.1开始,引入了持久连接(persistent connection),允许在同一个TCP连接中进行多个请求和响应。

无状态:HTTP协议本身是无状态的,这意味着服务器不会保留之前请求和响应的信息。为了实现状态管理,通常会使用Cookie或Session等技术。

请求/响应模型:HTTP是一个请求/响应协议。客户端发出一个请求,服务器则返回一个响应。

二.HTTP协议的⼯作过程

当我们在浏览器中输⼊⼀个"⽹址",此时浏览器就会给对应的服务器发送⼀个HTTP请求.对⽅服务器收到这个请求之后,经过计算处理,就会返回⼀个HTTP响应.

三.抓包⼯具的使⽤

以Fiddler为例.(下载地址)
安装过程⽐较简单,⼀路next即可.
 

1.原理 

• 左侧窗⼝显⽰了所有的HTTP请求/响应,可以选中某个请求查看详情.
• 右侧上⽅显⽰了HTTP请求的报⽂内容.(切换到Raw标签⻚可以看到详细的数据格式)
• 右侧下⽅显⽰了HTTP响应的报⽂内容.(切换到Raw标签⻚可以看到详细的数据格式)
• 请求和响应的详细数据,可以通过右下⻆的View in Notepad 通过记事本打开.
可以使⽤ctrl+a全选左侧的抓包结果,delete键清除所有被选中的结果.

2.抓包结果

1)HTTP请求 

• ⾸⾏:[⽅法]+[url]+[版本]
• Header:请求的属性,冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束
• Body:空⾏后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个Content-Length属性来标识Body的⻓度;

2)HTTP响应 

• ⾸⾏:[版本号]+[状态码]+[状态码解释]
• Header:请求的属性,冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束
• Body:空⾏后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个Content-Length属性来标识Body的⻓度;如果服务器返回了⼀个html⻚⾯,那么html⻚⾯内容就是在body中

四.协议格式

1.HTTP请求(Request)

1).认识URL

URL基本格式

平时我们俗称的"⽹址"其实就是说的URL(Uniform Resource Locator 统⼀资源定位符).
互联⽹上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它.
URL的详细规则由因特⽹标准RFC1738进⾏了约定(https://datatracker.ietf.org/doc/html/rfc1738)

 ⼀个具体的URL:

1 https://v.bitedu.vip/personInf/student?userId=10000&classId=100

可以看到,在这个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中省略了⽚段标识.⽚段标识主要⽤于⻚⾯内跳转.

注:URL中的可省略部分

• 协议名:可以省略,省略后默认为http://
• ip地址/域名:在HTML中可以省略(⽐如img,link,script,a标签的src或者href属性).省略后表
⽰服务器的ip/域名与当前HTML所属的ip/域名⼀致.
• 端⼝号:可以省略.省略后如果是http协议,端⼝号⾃动设为80;如果是https协议,端⼝号⾃动设为443.
• 带层次的⽂件路径:可以省略.省略后相当于/.有些服务器会在发现/路径的时候⾃动访问
/index.html
• 查询字符串:可以省略
• ⽚段标识:可以省略

1.GET⽅法

GET是最常⽤的HTTP⽅法.常⽤于获取服务器上的某个资源.
在浏览器中直接输⼊URL,此时浏览器就会发送出⼀个GET请求.
另外,HTML中的link,img,script等标签,也会触发GET请求

GET请求的特点

• ⾸⾏的第⼀部分为GET
• URL的querystring可以为空,也可以不为空.
• header部分有若⼲个键值对结构.
• body部分为空.

2.POST⽅法

POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤⼾输⼊的数据给服务器(例如登陆⻚⾯).
通过HTML中的form标签可以构造POST请求,或者使⽤JavaScript的ajax也可以构造POST请求.

POST请求的特点

• ⾸⾏的第⼀部分为POST
• URL的query string⼀般为空(也可以不为空)
• header部分有若⼲个键值对结构.
• body部分⼀般不为空.body内的数据格式通过header中的 Content-Type 指定.body的⻓度
由header中的 Content-Length 指定.

GET和POST的区别

• 语义不同:GET⼀般⽤于获取数据,POST⼀般⽤于提交数据.
• GET的body⼀般为空,需要传递的数据通过query string传递,POST的query string⼀般为空,需要传递的数据通过body传递
• GET请求⼀般是幂等的,POST请求⼀般是不幂等的.(如果多次请求得到的结果⼀样,就视为请求是幂等的).
• GET可以被缓存,POST不能被缓存.(这⼀点也是承接幂等性

3.其他⽅法

• PUT与POST相似,只是具有幂等特性,⼀般⽤于更新
• DELETE删除服务器指定资源
• OPTIONS返回服务器所⽀持的请求⽅法
• HEAD类似于GET,只不过响应体不返回,只返回响应头
• TRACE回显服务器端收到的请求,测试的时候会⽤到这个
• CONNECT预留,暂⽆使⽤

2).请求"报头"(header)

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

Host  表⽰服务器主机的地址和端⼝.
Content-Length  表⽰body中的数据⻓度.
Content-Type  表⽰请求的body中的数据格式.
User-Agent(简称UA)   表⽰浏览器/操作系统的属性
Referer  表⽰这个⻚⾯是从哪个⻚⾯跳转过来的
Cookie   Cookie中存储了⼀个字符串,这个数据可能是客⼾端(⽹⻚)⾃⾏通过JS写⼊的,也可能来⾃于服务器(服务器在HTTP响应的header中通过Set-Cookie字段给浏览器返回数据)
 

3).请求"正⽂"(body)

正⽂中的内容格式和header中的Content-Type密切相关

2.HTTP响应

1).状态码(status  code)

状态码表⽰访问⼀个⻚⾯的结果.(是访问成功,还是失败,还是其他的⼀些情况...).
以下为常⻅的状态码.

200  OK  表⽰访问成功.
404Not Found  没有找到资源.
403   Forbidden表⽰访问被拒绝.有的⻚⾯通常需要⽤⼾具有⼀定的权限才能访问(登陆后才能访问).如果⽤⼾没有登陆直接访问,就容易⻅到403.
405MethodNot Allowed
500InternalServer Error
服务器出现内部错误.⼀般是服务器的代码执⾏过程中遇到了⼀些特殊情况(服务器异常崩溃)会产⽣这个状态码.
504Gateway  Timeout当服务器负载⽐较⼤的时候,服务器处理单条请求的时候消耗的时间就会很⻓,就可能会导致出现超时的情况.

302 Move temporarily 临时重定向.
301Moved Permanently   永久重定向.当浏览器收到这种响应时,后续的请求都会被⾃动改成新的地址
 

2).响应"报头"(header)

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

• text/html :body数据格式是HTML
• text/css :body数据格式是CSS
• application/javascript :body数据格式是JavaScript
• application/json :body数据格式是JSON

3).认识响应"正⽂"(body)

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

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

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

相关文章

七、Audio,Paper or Kindle:What‘s the best way to read a book?听书、纸书、电纸书,阅读方式该怎么选?

Whats the most effective way to read a book?Should you stick to paper books you can flip the pages, dog-ear and write notes in the margin?What about Kindle or other eReaders, which let you download new books instantly and cheaply?Is it okay to listen to…

针对鼠标滚轮使用时滚动上下跳动失灵问题的极简有效处理办法

首先,如果你遇到时不时的往下滚屏幕却往上跳,这种情况下基本可以肯定是鼠标自身的问题,而非电脑上的程序出错。 解决方法: 1.深吸一口气,然后深情地稳住鼠标滚轮上方(打错了,应该是吻住&#…

经验分享:企微文档是什么?对企业有什么用处?

许多在企业单位工作的小伙伴应该都用过企业微信,这是一个专为企业打造的高效办公平台。然而,你是否了解其中的一个功能—企微文档呢?在这篇文章中,我将详细的解读一下企微文档是什么和它对企业的益处。 那么,什么是企微…

多目标优化算法 | Python实现多目标优化算法NSGA-II

目录 概述代码小结概述 多目标优化是解决同时优化多个目标函数的问题,通常涉及在多个决策变量的空间中找到一组解,这组解在一个目标上的优化会影响另一个目标。 NSGA-II(Non-dominated Sorting Genetic Algorithm II)是一种经典的多目标优化算法,它是基于遗传算法的改进版…

六、Django开发

六、Django开发 1.新建项目2.创建app2.1 第一种方法:2.2 利用pycharm中tools工具直接创建app 3.设计表结构(django)4.在MySQL中生成表5.静态文件管理6.部门管理6.1 部门列表 7.模板的继承8.用户管理8.1初识Form1.views.py2.user_add.html 8.2…

如何做一个知识博主? 善用互联网检索

Google 使用引号: 使用双引号将要搜索的短语括起来,以便搜索结果中只包含该短语。例如,搜索 "人工智能" 将只返回包含该短语的页面。 排除词汇: 在搜索中使用减号 "-" 可以排除特定词汇。例如,搜索 "苹果 -手机" 将返回关于苹果公司的结果,但…

7_springboot_shiro_jwt_多端认证鉴权_自定义AuthenticationToken

1. 目标 ​ 本小节会先对Shiro的核心流程进行一次回顾,并进行梳理。然后会介绍如果应用是以API接口的方式提供给它方进行调用,那么在这种情况下如何使用Shiro框架来完成接口调用的认证和授权。 2. 核心架构 引用官方的架构图: 2.1 Subje…

Kimball维度模型之迟到的事实

在数据仓库建设的过程中,面对不断涌现的数据和信息,处理“迟到的事实”是一个至关重要的挑战。所谓“迟到的事实”,指的是在数据仓库已经建立并开始运行后,新增的数据或信息却具有之前时间戳的情况。这可能由于数据采集的延迟(比如…

go: go.mod file not found in current directory or any parent directory.如何解决?

这个错误表明你正在执行 go get 命令&#xff0c;但是当前目录或任何父目录中都找不到 go.mod 文件。这可能是因为你的项目还没有使用 Go Modules 进行管理。 要解决这个问题&#xff0c;有几种方法&#xff1a; go mod init <module-name> 其中 <module-name>…

第四篇:3.3 无效流量(Invalid traffic) - IAB/MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xff09;第四篇广…

Vue3.0中的ref与reactive

Vue 3作为一种流行的JavaScript框架&#xff0c;提供了响应式编程的能力&#xff0c;使得前端开发更加便捷和高效。其中&#xff0c;ref和reactive是Vue 3中用于创建响应式数据的两个重要工具。 什么是响应式对象&#xff1f; 在介绍ref和reactive之前&#xff0c;我们先了解一…

Unix信号处理

信号的基本概念我已经在上一节中简单介绍了&#xff0c;大家可以去看我的上一篇博客&#xff1a; Unix中的进程和线程-2-CSDN博客 1.信号的产生 kill函数&#xff1a; #include <signal.h> #include <fcntl.h> #include<t_stdio.h> //自定义信号处理函数,n为…

LLM--打造Private GPT需要知道的一些概念及术语

文章目录 大模型存储格式GGMLGGUF Embedding概念分类 术语LlamaindexLlamaCPPPoetryASGIFastAPIChromaQdrantgradioMRL 大模型存储格式 大模型的存储一个很重要的问题是它的模型文件巨大&#xff0c;而模型的结构、参数等也会影响模型的推理效果和性能&#xff0c;为了让大模型…

云服务器8核32G配置报价大全,腾讯云、阿里云和京东云

8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题 一、运行环境 1、硬件 手机型号&#xff1a;NOVA 7 系统&#xff1a;HarmonyOS版本 4.0.0 2、软件 android SDK platforms&#xff1a;14.0(API Level 34)、13.0&#xff08;API Level 33&#xff09; SDK Build-T…

TCP长连接与短链接的区别

TCP短连接 在TCP短连接的通信模式中&#xff0c;每次通信都需要经历建立连接、传输数据和断开连接三个阶段。客户端和服务器每进行一次通信交互&#xff0c;就会建立一个新的连接&#xff0c;数据传输完成后立即断开连接。这种模式适用于请求次数不频繁、维持连接的开销大于重…

CentOS系统下Docker的安装教程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

K8S之Secret的介绍和使用

Secret Secret的介绍Secret的使用通过环境变量引入Secret通过volume挂载Secret Secret的介绍 Secret是一种保护敏感数据的资源对象。例如&#xff1a;密码、token、秘钥等&#xff0c;而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使…

【Linux】TCP网络套接字编程+守护进程

文章目录 日志类&#xff08;完成TCP/UDP套接字常见连接过程中的日志打印&#xff09;单进程版本的服务器客户端通信多进程版本和多线程版本守护进程化的多线程服务器 日志类&#xff08;完成TCP/UDP套接字常见连接过程中的日志打印&#xff09; 为了让我们的代码更规范化&…

前缀树实现字典添加查询

. - 力扣&#xff08;LeetCode&#xff09; Trie&#xff08;发音类似 "try"&#xff09;或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补完和拼写检查。 请你实现 T…