当前位置: 首页 > article >正文

HTTP—01

1. HTTP概念

HTTP ( 全称为 " 超文本传输协议 ") 是一种应用非常广泛的 应用层协议

所谓 " 超文本 " 的含义 , 就是传输的内容不仅仅是文本 ( 比如 html, css 这个就是文本 ), 还可以是一些
其他的资源 , 比如图片 , 视频 , 音频等二进制的数据
HTTP的报文格式分为:请求  响应
HTTP协议是一种“一问一答”结构模型的协议,请求和响应的格式有所差异
HTTP 往往是基于传输层的 TCP 协议实现的 . (HTTP1.0, HTTP1.1, HTTP2.0 均为 TCP, HTTP3 基于 UDP 实现 )
目前我们主要使用的还是 HTTP1.1 HTTP2.0
我们平时打开一个网站 , 就是通过 HTTP 协议来传输数据的——>
当在浏览器中输入一个京东网址(URL)时,浏览器会给京东服务器发送一个HTTP请求,京东的服务器就返回一个HTTP响应
这个响应被浏览器解析后,就展示成我们看到的界面(这个过程中,浏览器可能会发送多个HTTP请求,服务器会对应返回多个响应(页面HTTP,CSS,JavaScript,图片,字体...))
上述行为可简述为:
当我们在浏览器中输入一个 " 网址 ", 此时浏览器就会给对应的服务器发送一个 HTTP 请求 . 对方服务器收到这个请求之后 , 经过计算处理 , 就会返回一个 HTTP 响应(当我们访问一个网站的时候 , 可能涉及不止一次的 HTTP 请求 / 响应 的交互过程

Fiddler安装

HTTP 是一个文本格式的协议 . 可以通过 Chrome 开发者工具或者 Fiddler 抓包 , 分析 HTTP 请求 /响应的细节
Fiddler官方网址:
Web Debugging Proxy and Troubleshooting Tools | Fiddler
选择  Fiddler Classic,点击安装
选择  Try For Free*
填写邮箱进行注册
       

 注册完成后,会自动触发下载 

安装包加载好后,按照提示即可安装
  页面如图

Fiddler抓包原理

Fiddler 相当于一个 " 代理 "
浏览器访问 jingdong.com , 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 jingdong  的服务器. 当 jingdong  服务器返回数据时 , Fiddler 拿到返回数据 , 再把数据交给浏览器
因此 Fiddler 对于浏览器和 jingdong 服务器之间交互的数据细节, 都是非常清楚的
下图就是一个HTTP请求/响应抓包的结果(上段为请求,下段为响应)

Fiddler内容介绍

Fiddler打开后是一个左右结构的程序,左边的列表是抓到的包,右边的列表是包的详情

Fiddler是服务器的代理,是“正向代理”,给服务器代理是“反向代理”

1)在左边的表中,蓝色的代表  html(网页) 

2)此处点击   Raw  可以查看请求/响应的最原始的数据格式

HTTP协议是文本格式的协议(内容都是字符串)

TCP,UDP,IP...都是二进制格式的协议

3)HTTP响应也是文本的,直接查看往往是二进制的数据(压缩后)

解压后,可以看到相应的数据是 html

往往是浏览器先请求对应的服务器,从服务器这边拿到页面数据(html)

HTTP协议报文格式

 HTTP协议中的  “空行”——>

因为 HTTP 协议并没有规定报头部分的键值对有多少个 . 空行就相当于是 " 报头的结束标记 ", 或者是 " 报头和正文之间的分隔符 "
HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题" 

2. 请求和响应

请求:

1)首行

HTTP请求的第一行,有三个部分信息,使用 空格 分隔

1. GET:HTTP请求的“方法”(method)

2. URL:唯一资源定位符,描述了一个资源在网络上的位置

3. 版本号:HTTP/1.1

2)请求头(Header)

是一个键值对结构(有很多对键值对)

每个键值对之间,都是独占一行

键和值之间,使用 空格 来区分(此处的键值对都是“标准规定”的)

3)空行

请求头的结束标记

4)正文(body)

有的HTTP请求有,有的没有

响应:

1)首行

1. 版本号:HTTP/1.1

2. 状态码:描述了请求的结果

3. 状态描述:一串数字

2.)响应头(header) 

键值对结构(有多个键值对)

每个键值对独占一行

键和值之间,使用 空格 来区分(此处的键值对是“标准规定”的)

3)空行

响应头的结束标记

4)正文(body)

正文的内容可能比较长,可能是多种格式

HTML,CSS,JS,XML,图片,视频,音频...

3. URL

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

——>描述某个资源在网络上的所在位置

URL基本格式:

http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1

1)http                               协议方案名

常见的有 http https, 也有其他的类型

2)user:pass                     登录信息(认证)

现在的网站进行身份认证一般不再通过 URL 进行了 . 一般都会省略

3)@www.example.jp       服务器地址

可以是IP地址,也可以是域名(域名会通过 DNS 系统解析成一个具体的 IP 地址

4)80                                 服务器端口号

通过IP地址,只是确定了网络资源所在主机的位置,使用端口号来区分是哪个程序

URL中的端口有时可以省略(浏览器给一个默认的值)——>

对于HTTP请求,端口号省略时默认是 80端口

对于HTTPS请求,端口号省略时默认是 44端口

5)/dir/index.htm                带层次的文件路径

描述了要访问的服务器的那个资源(写法像目录,但浏览器不一定按照目录形式存储资源)

此处的目录结构,与后续服务器代码的编写形式有关

6)?uid=1                            查询字符串(query String)

键值对结构的数据,以  ?  开头

键值对之间,使用  &  分割

键和值之间,使用  =  分割

(此处出的键值对都是自定义的)

7)#ch1                               片段标识符

有的网页内容比较长,就可以分成多个“片段”,通过片段标识符,可以完成页面内部的跳转

ping命令

1. 在开始菜单中输入 cmd , 打开 命令提示符
2. cmd 中输入 ping v.bitedu.vip , 即可看到域名解析的结果

encode

/ ? : 等这样的字符 , 已经被 url 当做特殊意义理解了 . 因此这些字符不能随意出现
比如 , 某个参数中需要带有这些特殊字符 , 就必须先对特殊字符进行转义
一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成 , 虽然在 URL 中没有特殊含义, 但是仍然需要进行转义.  否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号
转义的规则如下 : 将需要转码的字符转为 16 进制,然后从右到左,取 4 ( 不足 4 位直接处理 ) ,每 2位做一位,前面加上 % ,编码成 %XY 格式

query string

query string 中的内容是键值对结构 . 其中的 key value 的取值和个数 , 完全都是程序猿自己约
定的 . 我们可以通过这样的方式来自定制传输我们需要的信息给服务器

URL的可省略部分

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

http://www.kler.cn/a/450927.html

相关文章:

  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin
  • ES已死,文本检索永生
  • dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端
  • Unity3d 基于UGUI和VideoPlayer 实现一个多功能视频播放器功能(含源码)
  • 重温设计模式--2、设计模式七大原则
  • 内网穿透ubuntu20 docker coplar
  • MQTT协议在树莓派上的安全性和性能测试及其在物联网应用中的应用
  • 【网络云计算】2024第52周-每日【2024/12/24】小测-理论实操-解析
  • docker 安装minio
  • SpringBoot的Thymeleaf做一个可自定义合并td的pdf表格
  • LeetCode33题:搜索旋转排序数组(原创)
  • 【VMware虚拟机】安装win10系统教程双机可ping通
  • leetcode hot100回文字符串的链表
  • 帝国CMS:如何去掉帝国CMS登录界面的认证码登录
  • 类OCSP靶场-Kioptrix系列-Kioptrix Level 5(2014)
  • GB/T34944-2017 《Java语言源代码漏洞测试规范》解读——行为问题、路径错误、处理程序错误
  • 光谱相机在农业中的具体应用案例
  • C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
  • zabbix监控山石系列Hillstone监控模版(适用于zabbix7及以上)
  • vue实现打印指定页面内容
  • 消除视野盲区,保障行车安全--叉车四路环绕AI防撞系统
  • 迈向未来:.NET技术的持续创新与发展前景
  • 【华为OD-E卷-木板 100分(python、java、c++、js、c)】
  • Naive UI 分页组件二次封装
  • Dubbo简单总结
  • 【蓝桥杯——物联网设计与开发】基础模块8 - RTC