网络原理HTTP/HTTPS(1)

news2024/11/17 3:26:42

文章目录

  • HTTP
  • 抓包工具FIddler
    • **HTTP请求**
    • **HTTP响应**
  • 认识URL
  • URL encode
  • 认识"方法"(method)
  • 1.GET方法
    • 使用Fiddler观察GET请求
  • 2.POST方法
    • 使⽤Fiddler观察POST⽅法
  • 经典面试题:GET和POST有啥区别
  • 请求报头(header)
    • Host
    • Content-Length
    • Content-Type
    • User-Agent(简称UA)
    • Referer
    • Cookie

HTTP

HTTP(全称为"超⽂本传输协议")是⼀种应⽤⾮常⼴泛的应⽤层协议.
HTTP协议最主要的应用场景就是网站,浏览器和服务器之间传输数据
客户端(手机,PC)和服务器也有可能是HTTP
在这里插入图片描述
HTTP协议的交互是典型的一问一答
HTTP是⼀个⽂本格式的协议.可以通过Chrome开发者⼯具或者Fiddler抓包,分析HTTP请求/响应的细节.

抓包工具FIddler

在这里插入图片描述
• 左侧窗⼝显⽰了所有的HTTP请求/响应,可以选中某个请求查看详情.
• 右侧上⽅显⽰了HTTP请求的报⽂内容.(切换到Raw标签⻚可以看到详细的数据格式)
• 右侧下⽅显⽰了HTTP响应的报⽂内容.(切换到Raw标签⻚可以看到详细的数据格式)
• 请求和响应的详细数据,可以通过右下⻆的 View in Notepad 通过记事本打开.

Fiddler相当于⼀个"代理".
浏览器访问sogou.com时,就会把HTTP请求先发给Fiddler,Fiddler再把请求转发给sogou的服务器.当sogou服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器.
因此Fiddler对于浏览器和sogou服务器之间交互的数据细节,都是⾮常清楚的.
在这里插入图片描述

HTTP请求

在这里插入图片描述

  1. 首行:[⽅法]+[url]+[版本]
  2. Header:请求的属性,冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空行表示Header部分结束
  3. 空行:请求头最下面会有一个空行,这一行就可以表示结束标记
  4. 正文(Body):空⾏后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个Content-Length属性来标识Body的⻓度;

HTTP响应

在这里插入图片描述

  1. ⾸⾏:[版本号]+[状态码]+[状态码解释]
  2. Header:请求的属性,冒号分割的键值对;每组属性之间使⽤\n分隔;遇到空⾏表⽰Header部分结束
  3. 空行:请求头最下面会有一个空行,这一行就可以表示结束标记
  4. Body:空⾏后⾯的内容都是Body.Body允许为空字符串.如果Body存在,则在Header中会有⼀个Content-Length属性来标识Body的⻓度;如果服务器返回了⼀个html⻚⾯,那么html⻚⾯内容就是在body中.
    在这里插入图片描述

认识URL

URL是描述一个网络上的资源位置,唯一资源定位符
互联⽹上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它.
在这里插入图片描述

  1. 登录信息:写在这里不太安全,现在都是通过“单独的登陆页面”来完成身份验证的
  2. 服务器地址,服务器端口号:如果url中不带端口号,浏览器就会自动给一个默认的端口
  3. 带层次的文件路径:这里可能会对应一个真实的硬盘文件,也可能会对应一个虚拟的文件
  4. 查询字符串:针对请求的内容做的补充说明
  5. 片段标识符:用来标识当前页面的某个部分,通过不同的片段标识可以完成页面内的跳转

网络上的资源位置

a)通过IP地址知道服务器在哪
b)通过端口号知道程序是哪个
c)通过路径知道是访问哪个资源

URL encode

像/ ?:等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现.
⽐如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进⾏转义.

⼀个中⽂字符由UTF-8或者GBK这样的编码⽅式构成,虽然在URL中没有特殊含义,但是仍然需要进⾏转义.否则浏览器可能把UTF-8/GBK编码中的某个字节当做URL中的特殊符号.

认识"方法"(method)

在这里插入图片描述

1.GET方法

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

使用Fiddler观察GET请求

打开Fiddler,访问搜狗主⻚,观察抓包结果.
观察请求的详细结果

GET https://www.sogou.com/ HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/w
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: SUID=19AA8B7B6E1CA00A000000005F9A2F76; SUV=1603940214073598; pgv_pvi=266

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

2.POST方法

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

使⽤Fiddler观察POST⽅法

在⽐特教务系统的登陆⻚⾯,输⼊⽤⼾名,密码,验证码之后,点击登陆,就可以看到POST请求.
点击这个请求,查看请求详情

POST https://v.bitedu.vip/tms/login HTTP/1.1
Host: v.bitedu.vip
Connection: keep-alive
Content-Length: 105
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
Access-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONS
Content-Type: application/json;charset=UTF-8
Access-Control-Allow-Origin: *
Accept: application/json, text/plain, */*
Access-Control-Allow-Headers: Content-Type, Content-Length, Authorization, Accep
Origin: https://v.bitedu.vip
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://v.bitedu.vip/login
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: username=123456789; rememberMe=true
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16

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

经典面试题:GET和POST有啥区别

GET和POST本质上没有区别,使用GET的场景,也可以替换成POST
使用POST的场景,也可以替换成GET
但是在使用习惯上还是有区别的

  1. GET习惯于把数据放到url的query string中,POST习惯于把数据放到body中,GET也是可以放到body,POST也是可以放到query string
  2. 关于幂等性,标准文档中,建议GET请求实现成幂等的(每次输出的内容一定,输出的结果也一定),POST则无要求
  3. 语义上的区别,标准文档中,GET的语义是用来获取数据,POST的语义是给服务器传输数据
  4. GET请求是可以被浏览器收藏夹收藏的,POST请求不可以

网上有些相关的资料,说法不太准确

  1. POST比GET更安全
    论据:登录的时候,如果使用GET,用户名密码就会显示在url,此时就会被别人直接看到,所以不安全
    解释:
    即使是POST数据没有显示在url,也是可以被黑客通过抓包获取的,真正保证安全性的关键在于加密,如果数据加密了,就算放到url也是安全的

  2. GET传输的数据量小(存在上限),POST传输的数据量更大
    解释:
    这说的是以前,实际上HTTP标准文档上明确说了,对于GET,URL的长度不做限制,目前比较长的URL也是很常见

  3. GET只能携带文本数据,POST则可以携带二进制数据
    解释:
    这个说法不能说是完全错误,确实有一定的局限性的,URL通过query string 来携带数据,query string是只能包含文本的,但是可以对二进制数据进行urlencode,自然就成了文本了,到了服务器自然进行urlencode,就能把数据还原成二进制
    PSOT请求body中也经常不是直接携带二进制,也有很多时候是对二进制数据进行urlencode/base64等方式进行转码

请求报头(header)

Host

表示服务器主机的地址和端口

Content-Length

表示body中的数据长度
通过这个长度来处理粘包问题,HTTP底层也是基于TCP,连续传输多个HTTP数据报,此时接收方这边的接收缓冲区里就会积累多个包的数据,应用程序在读取这些数据的时候就需要明确包之间的边界

Content-Type

表示请求的body中的数据格式
body可以传输很多种格式,包括程序员也可以自己约定任意的格式

User-Agent(简称UA)

表⽰浏览器/操作系统的属性.

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)

其中Windows NT 10.0; Win64; x64 表⽰操作系统信息
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77
Safari/537.36 表⽰浏览器信息.

Referer

表示这个页面是从哪个页面跳转过来的.形如

https://v.bitedu.vip/login

如果直接在浏览器中输⼊URL,或者直接通过收藏夹访问页面时是没有Referer的.

Cookie

Cookie本质上是一个浏览器这边本地持久化存储数据的机制

  1. Cookie从哪里来?
    服务器返回给浏览器的,通常都是首次访问/登陆成功之后
  2. Cookie到哪里去?
    Cookie会存储在浏览器本地主机硬盘上,后续每次访问服务器都会带上Cookie,不同的客户端,保存的Cookie是不同的,即使是同意主机,使用不同的浏览器,Cookie大概率也是不同的
  3. Cookie中存什么?
    键值对格式的数据,这里的内容都是程序员自定义的,和query string一样外人无从理解
  4. Cookie在浏览器这边如何组织?
    在硬盘本地保存,是按照不同的域名为维度分别存储
  5. Cookie的用途是什么?
    用来在客户端保存数据,其中最主要的是保存用户的身份标识,服务器就可以通过标识来区别用户

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

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

相关文章

Java+SpringBoot:构建稳定高效的计算机基础教学平台

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

2021年通信工程师初级 实务 真题

文章目录 一、第1章 现代通信网概述,通信网的定义。第10章 通信业务,普遍服务原则10.2.4 通信行业的发展趋势(六化) 二、第2章 传输网SDH帧结构SDH线路保护倒换,“11 保护”和“1:1保护”波长值λc/f,中心频…

YOLO部署实战(2):使用OpenCV优化视频转图片流程并设置帧数

在计算机视觉和图像处理领域,OpenCV是一个强大的开源库,它为处理图像和视频提供了丰富的工具和功能。本文将介绍如何使用OpenCV将视频文件转换为一系列图片,并演示如何通过设置转换的帧数来优化这一过程。 1 Win10配置OpenCV 在Windows操作…

常用ES技巧二

文章目录 一、Object.entries()和Object.fromEntries()1.1、Object.entries()1.2、Object.fromEntries() 二、Symbol类型和Symbol属性三、WeakMap和WeakSet四、Promise.allSettled()五、BigInt六、Array.of和Array.from七、.at和.flat八、总结九、最后 一、Object.entries()和O…

解决计算机“缺失ffmpeg.dll”报错?修复ffmpeg.dll文件方案

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“ffmpeg.dll丢失”。ffmpeg.dll是FFmpeg多媒体框架中的一个重要组件,它负责处理音频和视频的编解码。当打开某些软件时,如果系统找不到该文件,就会出现这…

C++入门学习(二十五)do-while循环

do { // 代码块,至少会执行一次 } while (条件); 对比一下while和do-while循环: 因为while循环先判断条件,所以数字10直接就没有进入for循环里,卡在了判断条件这一步,所以就没有输出数据; do-while循环是…

2023年全国职业院校技能大赛软件测试赛题第2套

2023年全国职业院校技能大赛 软件测试赛题第2套 赛项名称: 软件测试 英文名称: Software Testing 赛项编号: GZ034 归属产业: 电子与信息大类 …

【数据结构与算法】堆 / 堆排序 / TopK问题(Heap)

文章目录 1.堆2.C语言实现堆2.1 堆结构与基本操作2.2 其它辅助操作2.3 堆的基本操作2.3.1 插入2.3.2 删除 3. 堆排序4. TopK5. 所有代码 1.堆 堆总是一棵完全二叉树,而完全二叉树更适合使用**顺序结构(数组)**存储,完全二叉树前h…

蓝桥杯省赛无忧 课件92 行列式

01 什么是行列式 02 行列式的性质 03 高斯消元求行列式

linux之wsl2安装远程桌面

0. 安装后的效果 1. wsl中打开terminal并安装库 sudo apt-get purge xrdp sudo apt install -y xrdp sudo apt install -y xfce4 sudo apt install -y xfce4-goodies 2.优化显示 sudo sed -i s/max_bpp32/#max_bpp32\nmax_bpp128/g /etc/xrdp/xrdp.ini sudo sed -i s/xserverbp…

Linux下的多线程

前面学习了进程、文件等概念,接下里为大家引入线程的概念 多线程 线程是什么?为什么要有线程?线程的优缺点Linux线程操作线程创建线程等待线程终止线程分离 线程间的私有和共享数据理解线程库和线程id深刻理解Linux多线程(重点&a…

【Linux】gdb调试与make/makefile工具

目录 导读 1. make/Makefile 1.1 引入 1.2 概念 1.3 语法规则 1.4 示例 2. Linux调试器-gdb 2.1 引入 2.2 概念 2.3 使用 导读 我们在上次讲了Linux编辑器gcc\g的使用,今天我们就来进一步的学习如何调试,以及makefile这个强大的工具。 1. mak…

Hadoop3.x基础(4)- Yarn

来源:B站尚硅谷 目录 Yarn资源调度器Yarn基础架构Yarn工作机制作业提交全过程Yarn调度器和调度算法先进先出调度器(FIFO)容量调度器(Capacity Scheduler)公平调度器(Fair Scheduler) Yarn常用命…

《数电》理论笔记-第2章-组合逻辑电路

一,集成门电路 1TTL门电路 TTL门电路中双极型三极管构成,它的特点是速度快、抗静电能力强集成度低、功耗大, 目前广泛应用于中、小规模集成电路中。 TTL门电路有 74 (商用) 和 54 (军用) 两大系列,每个系列中又有若干子系列。 2 CMOS门电路 …

联合体的深入了解

1.联合体类型的声明 像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。 给联合体其中一个成员赋值…

洛希极限

L1-3 洛希极限 分数 10 作者 陈越 单位 浙江大学 科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木“…

华为WLAN无线配置实验

上面大概讲了配置的思路与原理,这里开始实际配置下。 一般建议采用旁挂AC,然后划分独立的设备管理网段,通过DHCP进行获取地址,其它的地址、接口、路由正常配置即可。 一、基本配置 拓扑图 AR1: # 配置接口地址和路由 interface Gi…

Vision Transformer(一):自注意力机制

1. 注意力机制 注意力本质上是模仿人的行为。这种行为可以描述为人在观察一些事物时,会对感兴趣的区域会产生更多的聚焦,而会选择性的忽视(或者减少关注)另一些区域。 举个简单的例子,一些对跑车感兴趣的人&#xff0…

个人博客说明

本人博客主要发布平台为博客园 https://www.cnblogs.com/carmi 更多详细,完整图片的文章还请师傅们动动小手到博客园去看吧。

npm 上传一个自己的应用(5) 删除自己发送到NPM官网的指定工具版本

上文 npm 上传一个自己的应用(4) 更新自己上传到NPM中的工具版本 并就行内容修改 我们更新了项目内容 然后更新了项目版本 那么 一些已经过时 甚至 当时上传的东西就有问题 我们又该怎么删除版本呢? 首先 我们还是要先登录 npm npm login然后 根据要求填写 Userna…