HTTP协议详解(上)

目录

前言:

认识URL

HTTP协议方法

通过Fiddler抓包

GET和POST之间典型区别

header详解

HTTP响应状态码

常见状态码解释

状态码分类

HTTP协议报文格式

小结:


前言:

    HTTP协议属于应用层协议,称为超文本传输协议,以文本方式组织数据进行交互。当我们通过浏览器输入一个URL,它就会发送一个HTTP请求到服务器,服务器就会返回相应的一些数据,经过浏览器的运行,渲染最终得到我们所看到的画面。

认识URL

    hppts//:www.baidu.com/?tn=15007414_8_dg

注意:

    1)https:协议名称,还有http协议。(两者的区别下篇博客详细介绍)

    2)www.baidu.com:服务器地址,域名通过DNS域名解析服务器会得到网络中唯一的地址IP。

    3)端口号:URL中可以省略端口号。浏览器会默认提供端口号,http为80端口,https为443端口。

    4)/:带层次的路径,/为根目录。服务器找到程序管辖内的一个具体文件。

    5)tn=15007414_8_dg:query string查询字符串。描述一些具体信息,以键值对的方式来组织。会根据urlencode进行重新编码,因为URL有一些特定的符号,这样可以根据URL中所规定的规则来体现。

    URL:唯一资源定位符,标识互联网上唯一资源的位置。

    URI:唯一资源标识符,用来身份标识。

HTTP协议方法

注意:

    http的方法描述了这次请求具体是干嘛的。最常用的是GET方法和POST方法。

    GET:发请求获取资源。POST:给服务器提交资源。(以客户端为基准)

    一般在浏览器里直接输入URL,html里的link,script,img,a...还有通过js构造GET请求等等都会发送GET请求。

    一般修改头像,登录等操作都是给服务器提交数据。这些都属于POST请求。

通过Fiddler抓包

抓包原理:

    当启动抓包程序后,我们电脑上的http请求都会经过抓包程序的服务器。这个时候通过这个程序就很容易得到数据包了。

    使用抓包程序需要注意主机上有没有代理服务器启动着,这个时候就有可能导致抓包失败,原因是可能被代理服务器给截胡了。

注意:

    上面是访问百度和浏览器发起请求所抓的包,有一个GET请求,POST请求。http请求可分为四个部分:首行,请求头(header),空行,正文(body)。

    一般GET请求没有body,发送数据会使用query string。POST请求发送数据一般使用body。

GET和POST之间典型区别

    首先GET和POST没有本质区别。大部分场景下可以相互替换,只是在平常使用中有一定的区别。

    1)GET也可以给服务器传递一些信息,一般放在query string。POST传递消息通过body。

    2)语义上的差别,GET请求一般从服务器获取数据。POST请求一般用于给服务器提交数据。

    3)GET通常会被设计为幂等,而POST不要求幂等。(幂等:相同的输入,得到的结果也一定相同)。

    4)GET可以被缓存,POST一般不能缓存。(请求结果缓存下,下次可以直接读取缓存数据,例如:浏览器缓存)。

注意:

    GET请求数据大小的上限,官方文档没有明文规定。

header详解

    使用键值对表示,都是http实现事先定义好的,都有特定的含义。

    1)Host:描述了服务器的IP和端口号。这个内容大概率和URL中IP和端口号一样,也可能不一样(存在代理服务器)。

    2)Content-Length:表示body中数据长度。

    3)Content-Type:表示body中数据类型。(GET请求,没有body,则没有这两字段。POST有body则需要有)

    4)User-Agent:描述了浏览器和操作系统版本。方便程序员进行多版本开发,也可区分PC端和移动端。

    5)Referer:描述当前页面的“来源”。如果直接地址栏输入地址则没有referer。

    6)Cookie:本质上是浏览器给网页提供的 本地存储数据 的机制。网页默认是不允许访问计算机硬盘的。

      Cookie从哪来:Cookie中数据来自服务器,服务器通过Set-Cookie字段来设置浏览器的Cookie存什么。

      Cookie在哪里存:可以认为存于浏览器 硬盘中。Cookie在存的时候按照 浏览器 + 域名 维度进行细分的。不同浏览器对应不同Cookie。同一浏览器不同域名也对应不同Cookie。Cookie存在过期时间。

      Cookie到哪里去:回到服务器里。客户端通过Cookie保存用户使用的中间状态,当客户端请求服务器时,就会自动把Cookie内容带入到请求中。服务器就可以知道当前客户端处于什么状态了。

      Cookie就像是服务器在浏览器搞的一个寄存处,可以方便感知到当前网页的中间状态。

HTTP响应状态码

    http响应状态码描述了这次响应的结果和具体原因。

注意:

    这是访问百度抓到的响应数据包。可以清楚看到首行包含协议名称和版本号,以及响应的状态和状态描述。

 常见状态码解释

    1)200 OK:这次响应一切OK。

    2)404 Not Found:访问资源不存在,服务器上没找找到。

    3)403 Forbidden:访问被拒绝,没有权限。

    4)302 Move:重定向。域名迁移,当访问被迁移的域名,服务端会返回迁移好的域名。客户端再次访问新域名。(涉及两次交互)

    5)500 Internal Server Error:服务器内部错误,代码抛异常。

    6)504 Geteway Timeout:响应超时,时间太久了。

状态码分类

    1)2** 成功

    2)3** 重定向

    3)4** 客户端错误

    4)5** 服务器错误

HTTP协议报文格式

 注意:

    上图可解释http超文本传输,数据组织的格式。上图抓包的数据文本同样是按照这样的格式组织数据。

小结:

    学习http协议离不开抓包。我们要多使用抓包程序进行抓包,然后分析请求数据和响应数据,可进一步让我们理解http协议。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++中的string类【详细分析及模拟实现】

string类 目录string类一、stirng的介绍及使用1.为什么学习string类?2.标准库中的string类2.1 引入:编码2.2 basic_string3.string类的使用3.1 构造函数3.2 遍历string方式1:for循环方式2:范围for4.迭代器4.1 正向迭代器4.2反向迭…

STM-32:按键控制LED灯 程序详解

目录一、基本原理二、接线图三、程序思路3.1库函数3.2程序代码注:一、基本原理 左边是STM322里电路每一个端口均可以配置的电路部分,右边部分是外接设备 电路图。 配置为 上拉输入模式的意思就是,VDD开关闭合,VSS开关断开。 浮空…

互联网数据挖掘与分析讲解

一、定义 数据挖掘(英语:Data mining),又译为资料探勘、数据采矿。它是数据库知识发现(英语:Knowledge-Discovery in Databases,简称:KDD)中的一个步骤。数据挖掘一般是指从大量的数…

多线程(四):线程安全

在开始讲解线程安全之前我们先来回顾一下我们学了那些东西了: 1. 线程和进程的认识 2. Thread 类的基本用法 3. 简单认识线程状态 4. 初见线程安全 上一章结束时看了一眼线程安全问题,本章将针对这个重点讲解。 一个代码在单线程中能够安全执行&am…

204. 计数质数 (埃式筛法详解)——【Leetcode每日一题】

素数最朴素判断思路:(一般会超时) 对正整数 n,如果用 2 到 n\sqrt{n}n​ 之间的所有整数去除,均无法整除,则 n 为素数又称为质数。 为什么到n\sqrt{n}n​ 就可以了,因为因数如果存在一定是成对…

【三】一起算法---栈:STL stack、手写栈、单调栈

纸上得来终觉浅,绝知此事要躬行。大家好!我是霜淮子,欢迎订阅我的专栏《算法系列》。 学习经典算法和经典代码,建立算法思维;大量编码让代码成为我们大脑的一部分。 ⭐️已更系列 1、基础数据结构 1.1、链表➡传送门 1…

使用Node.js+Koa 从零开始写个人博客系统——后端部分(一)

使用Node.jsKoa 从零开始写个人博客系统系列 提示:在此文章中你可以学习到的内容如下: 1 如何使用Koa快速搭建项目 2 对Koa的核心组件Koa-Route的简单使用 3 3层架构思想 4 nodejs的ORM框架——sequelize的使用 5 sequelize-auto的使用 6 简单的增删查改…

【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛客观题以及详细题解

题1 概念题。 USRAT:异步串口通信,常用于数据传输;SW-DP:SWD 的全称应该是 The Serial Wire Debug Port (SW-DP),也就是串行调试端口,是 >ARM 目前支持的两种调试端口之一;JTAG-DP:另一个调试…

git基本用法教程(fork软件+git命令)

git基本用法教程1. git commit2. git branch3. git checkout4. git merge5. git rebase6. 在提交树中移动7. 撤销变更8. 整理提交记录9. 提交的技巧10. git clone11. git push12. git pull13. git fetch14. git flow15. git stash16. fork的使用当然除了环境和demo的运行和改写…

chartgpt 告诉我的,loss 函数的各种知识

一、libtorch中常见的损失函数及其使用场景的总结1. CrossEntropyLoss:CrossEntropyLoss(交叉熵损失)主要用于分类任务。它适用于多分类问题,其中每个样本只属于一个类别(互斥)。该损失函数将预测概率与真实标签的one-…

应届生投腾讯,被面试官问了8个和 ThreadLocal 相关的问题。

问:谈一谈ThreadLocal的结构。 ThreadLocal内部维护了一个ThreadLocalMap静态内部类,ThreadLocalMap中又维护了一个Entry静态内部类,和Entry数组。 Entry类继承弱引用类WeakReference,Entry类有一个有参构造函数,参数…

【数据结构】用队列实现栈

💯💯💯 本篇总结利用队列如何实现栈的相关操作,不难观察,栈和队列是可以相互转化的,需要好好总结它们的特性,构造出一个恰当的结构来实现即可,所以本篇难点不在代码思维,…

大数据应用——Hadoop运行模式(伪分布式运行)

4.2 伪分布式运行模式4.2.1 启动HDFS并运行MapReduce程序1. 分析 (1)配置集群(2)启动、测试集群增、删、查没有改(多台机子麻烦)(3)执行WordCount案例2. 执行步骤(1&…

前端vue实现导出pdf文件报告组件

大屏项目有一个需求,需要对展示的内容进行文件导出,但是目前后台没有相关的逻辑,所以只能前端硬上,在参考了其他许多的逻辑之后,目前我自己这边做了一套比较笨的组件,通过拼接标签这种方法来实现对你想需要…

队列-我的基础算法刷题之路(六)

本篇博客旨在整理记录自已对队列的一些总结,以及刷题的解题思路,同时希望可给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉 💪。…

seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots

seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots总结参考关系-分布-分类分类绘图-Visualizing categorical data图形级接口catplot--figure-level interface导入库与查看tips和diamonds 数据分类散点图参考分布散点图stripplot分布密度散点图-swarmplot&#…

进程与线程

文章目录进程与线程进程什么是进程进程的组成程序段数据段程序控制块例子线程什么是线程线程的组成线程描述信息程序计数器栈内存例子进程与线程的区别进程与线程 进程 什么是进程 ​ 什么是进程呢?简单来说,进程是程序的一次启动执行。什么是 程序呢…

【C#进阶】C# 集合类

序号系列文章16【C#进阶】C# 索引器17【C#进阶】C# 委托18【C#进阶】C# 事件文章目录前言1、集合类是什么2、动态数组(ArrayList)3、压缩数组(BitArray)4、哈希表(Hashtable)5、队列(Queue&…

【数据结构】链表OJ题

目录面试题 02.04 分割链表剑指 Offer II 027 回文链表160 相交链表141 环形链表142 环形链表 II138 复制带随机指针的链表面试题 02.04 分割链表 定义lesshead和greaterhead链接小于和大于等于k的值分别设置哨兵位和尾节点指针最后将两表去除哨兵位再链接 struct ListNode* p…

内存泄漏和内存溢出的区别

参考答案 内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory。内存泄露(memory leak):指程序在申请内存后,无法释放已申请的内存空间,内存泄露堆积会导致内存被…