网络原理---拿捏HTTP协议:请求和响应

news2024/10/6 5:57:16

文章目录

  • 认识请求
    • 首行
      • URL
        • URL的格式
        • URL的encode和decode
      • 版本号
      • 方法
        • GET方法
        • POST方法
        • GET VS POST
    • 请求头:header
      • Host
      • Content-Length 和 Content-Type
      • User-Agent(UA)
      • Referer
      • Cookie
    • 空行
    • 正文:body
      • 如何构造HTTP请求?
        • 浏览器自己构造
        • HTML构造
        • ajax构造
        • 第三方工具:postman构造
  • 认识响应
    • 首行
    • 响应头:header
    • 空行
    • 正文:body
      • 状态码
      • Content-Type

认识请求

首行

URL

我们平时俗称的“网站”,其实就是URL。还有一个与它相近的概念叫URI

URL:是唯一资源定位符,用来找到网络上唯一的资源。
URI:是唯一资源标识符,用来区分网络上的资源

这两个概念非常的相似,一般情况下我们不做区分。

URL的格式

URL的格式是什么样子的,是由“RFC标准文档”来进行描述的。我们下面介绍一个典型的URL:

一个完整的URL包括:
协议://主机名(域名):端口号/路径/查询字符串query string
在这里插入图片描述

注:

  1. HTTP协议的默认端口号是80
  2. HTTPS协议的默认端口号是443
URL的encode和decode

URL的encode(编码):把原始的字符转成转义后的字符
URL的decode(解码):把转义后的字符转成原始的字符

进行编码和解码的原因:
URL中已经包含了一些特殊含义的符号了,比如:/ ?
万一query string的value中也出现了这些字符。就可能导致截断错误(错误的区分每个字段包含了几个字符),浏览器可能会错误的识别URL,服务器也可能会错误的解析URL

转义的规则:
把待转义的字符串的每个字符按照十六进制表示,并且在每个字节前加上一个%
在这里插入图片描述

版本号

版本号:表示当前的版本

方法

在这里插入图片描述

HTTP请求的方法非常多,每个方法都有各自的用途。但是常用的只有两个:GET和POST。我们下面也只介绍这两个方法:

GET方法

在这里插入图片描述

特点:

  1. 首行中第一个是GET
  2. URL中的query string 可以为空,也可以不为空
  3. GET请求中有若干组header这样的键值对
  4. GET请求的body为空
POST方法

在这里插入图片描述

特点:

  1. 首行中第一个是POST
  2. URL中的query string为空
  3. POST请求中有若干组header这样的键值对
  4. POST请求的body一般不为空,POST要给服务器传递信息的时候就把信息放在body中传递
GET VS POST
  1. GET和POST没有本质区别。使用GET的场景基本都可以使用POST来代替;使用POST的场景基本也可以使用GET来代替

  2. 语义的区别:GET是“从浏览器获取数据”;POST是“向浏览器提交数据”

  3. 使用习惯的区别:给服务器传递数据时,GET通常把数据放在URL的query string中;POST通常把数据放在body中

  4. GET请求建议实现成“幂等的”;POST则一般不要求实现成“幂等的” 幂等:就是指输入是确定的,输出就是确定的

  5. 在“幂等”的基础上,GET的请求结果是可以被缓存的;POST的请求结果一般不缓存。

    如果当前的GET是幂等的,就让浏览器缓存
    如果当前的GET不是幂等的,就要让浏览器避免产生缓存(比如:让每次GET请求的URL不同)

  6. GET请求和POST请求都不安全。传递的信息没有加密,放在query string中和放在body中区别不大

请求头:header

header里面大部分放的都是一些规定好的键值对,每一组键值对都有固定的含义。当然也可以把一些自定义的键值对放到header里面

我们下面就来介绍一下这些固定的键值对的含义:

Host

Host表示服务器的主机地址和端口,其实就是放的IP地址和端口号。

URL中不是有IP地址和端口号嘛? 为啥还要再搞个Host?

其实,URL里的IP地址、端口号和Host里的IP地址、端口号不一定完全一样。(当请求是通过代理来访问服务器的时候就不一样)
在这里插入图片描述

Content-Length 和 Content-Type

Content-Length:表示body中的数据长度,可以用来解决“粘包问题”
Content-Type:表示body中的数据格式

这俩字段不一定会有,但是如果有,就一定是两个都有。
当请求中没有body(GET),就没有。
当请求中有body(POST),就有。

Content-Type常见的格式:

  1. application/x-www-form-urlencoded:

    由form表单提交数据时的格式,和query string一样。比如:username=“zhangsan”&password=“123456”

  2. multipart/form-data:

    上传文件时的格式

  3. application/json:

    数据为json格式,body内的数据组织形式是这样的:{username:“zhangsan”,password:“123456”}

User-Agent(UA)

UA:包含了操作系统信息和浏览器信息,描述了用户使用啥样的设备上网,来对不同的设备做出不同的“支持”(比如:页面支持等)
在这里插入图片描述

注:在如今UA的功能已经被削弱了(浏览器基本统一),它被用在服务器端统计用户的设备情况(有多少用户用哪个版本使用哪个设备访问)

Referer

Referer:指的是当前这个页面是从哪个页面跳转过来的,保存上个页面的地址。可能是没有的(比如:直接打开时)

应用场景:广告计费(按点击量计费:CPC广告)

Cookie

Cookie:是浏览器在本地存储数据的一种机制,存在硬盘上。

服务器端已经保存了需要的大部分信息,但是还有一些特殊信息需要持久化的保存在浏览器上。但是浏览器为了安全,禁止JS直接访问你的硬盘,防止对你的硬盘数据造成破坏。它就专门的提供了一些API让网页使用,使它能够存储一些简单的数据。这就是Cookie

注:

  1. Cookie是按域名来进行组织的,每个域名下会存一些Cookie
  2. 每个Cookie都是键值对,是由程序员定义的。
  3. Cookie保存在浏览器,但是来源是服务器,服务器在响应中可以构造Cookie
  4. Cookie来自于服务器,保存在浏览器,最后还会回到服务器。当前浏览器保存了Cookie之后,下次再访问同一个网站时,就会把本地存储的Cookie再通过HTTP请求传给服务器。

空行

正文:body

正文body只在POST请求中有,有常见的三种格式Content-Type,这些在上面介绍Header的时候已经介绍过了,大家想看可以翻上去看看!!!

如何构造HTTP请求?

浏览器自己构造

在浏览器地址栏中输入URL地址点击回车,就会自动构造出一个HTTP请求

HTML构造
  1. 通过a标签的href属性构造,点击a标签就会发起HTTP请求
  2. 通过img标签的src属性构造,在需要加载图片的时候就会自动发起HTTP请求
  3. 通过input标签使用form表单构造

注:form表单构造的请求是一定会触发页面跳转的

ajax构造

使用JS借助Jquery,在前端页面通过ajax发起HTTP请求

注:ajax发起的请求一般是不会触发页面跳转的,当然也可以手动控制跳转

第三方工具:postman构造

使用postman软件可以构造任意类型的请求

认识响应

首行

首行 = 协议版本 + 状态码 + 状态文本

//比如:HTTP/1.1 200 OK

HTTP/1.1 为 HTTP 协议版本,200 为响应的状态码,OK 为状态文本

响应头:header

响应头与 HTTP 请求中的请求头类似,我们只需要认识在请求头中介绍的常见的请求头即可。

空行

正文:body

有下面介绍的四种类型:Content-Type

状态码

状态码:是一个数字,这个数字描述了当前请求的状态(成功、失败、失败的原因)。

状态码有很多,下面介绍一些常见的状态码:

200:表示访问成功

客户端有问题:
404:Not Find,请求路径写错了(你要访问的资源服务器上没有)
403:Forbidden,访问被拒绝(没有权限)

服务器有问题:
500:Internal Server Error,服务器内部错误
504:Gateway Timeout,访问超时(流量大的时候服务器无法响应到)

302:重定向,将访问的旧的URL自动转移到新的URL上

总结:
在这里插入图片描述

Content-Type

响应的Content-Type有以下几种类型:

  1. text/html : body的数据格式是HTML
  2. text/css : body的数据格式是CSS
  3. application/javascript : body的数据格式是JS
  4. application/json : body的数据格式是json

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

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

相关文章

浙大恩特客户资源管理系统任意文件上传漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中fileupload.jsp接口处存在文件上传漏洞,未经身份认…

rv1126-rv1109-添加分区,定制固件,开机挂载功能

===================================================================== 修改分区: 这里是分区的txt文件选择; 这里是分区的划分,我这里回车了,方便看 FIRMWARE_VER: 8.1 MACHINE_MODEL: RV1126 MACHINE_ID: 007 MANUFACTURER: RV1126 MAGIC: 0x5041524B ATAG: 0x00200…

Ubuntu18.04.6共享文件夹的创建,以及在哪打开共享文件夹

目录 1、打开虚拟机的设置页面 2、设置共享文件夹 3、确认是否成功设置共享文件夹 4、完成后在进入到/mnt/hgfs ls查看,发现共享文件夹已经出现可以使用 1、打开虚拟机的设置页面 两种方式: (1)直接点击“编辑虚拟机设置” …

android自定义switch颜色

效果图&#xff1a; 原生样式和自己app的主题颜色不搭配&#xff0c;就可以这样自定义颜色样式。以下代码均可直接复制粘贴使用&#xff0c;且均有注释。 实现&#xff1a; 1、 新建drawable/switch_custom_thumb_on.xml&#xff08;滑块开启状态 &#xff09; <?xml ve…

DDD系列 - 第2讲 从贫血模型、事务脚本到面向对象(富血模型)、DDD领域模型的跨越

目录 一、灵魂拷问二、CRUD Boy现状三、贫血模型四、事务脚本五、从贫血模型演变到面向对象&#xff08;富血模型&#xff09;六、借助DDD领域模型摆脱事务脚本七、更多 一、灵魂拷问 Java作为面向对象的编程语言&#xff0c;使用Java编程的你面向对象了吗&#xff1f; 二、C…

“三位一体”超级混沌工程主要特点及功能

“三位一体”超级混沌工程X-Chaos主要包括基础故障编排、业务场景故障编排、演练场景编排、故障库管理、演练场景管理、演练计划管理、演练观测和演练报告等模块&#xff0c;支持对传统架构、云环境以及国产化基础环境的IT系统进行故障演练。本文将介绍混沌工程主要特点及主要功…

剪贴板劫持--PasteJacker的使用

启动 PasteJacker [1] Windows [2] Linux [3] Exit第一次是让我们选择要攻击针对的目标系统&#xff0c;这里以Windows系统为例&#xff0c;即我自己的物理机 因此键入 1 &#xff0c;回车 [1] Download and execute a msfvenom backdoor using certutil (Web delivery Past…

现在就是成为“新程序员”的黄金时刻!

整理 | 王启隆 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; “自然语言代替了编程语言&#xff0c;大大地降低了程序员的门槛。现在&#xff0c;ChatGPT 将全球的知识库和代码都放在了你的手中&#xff0c;只要有想象力&#xff0c;人人都能成为「新程序员」…

一周成功拿下4个offer的软件测试面试题,面试必看系列

前言&#xff1a; 压到就是赚到&#xff0c;面试通过的机率就更大&#xff0c;干就完了铁子 【文章末尾给大家留下了大量的福利】 ​编辑 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平…

腾讯云2023年双11活动:云服务器1.8折起,还可领取9999元代金券!

2023年双11腾讯云推出了11.11云上盛惠大促活动&#xff0c;包括秒杀专区、服务器买赠、新人专区、代金券专区、境外优选、新老同享、续费专区以及热门上云场景等满足新用户、老用户、企业用户对云计算服务的各种需求。 一、腾讯云双11活动地址 活动入口&#xff1a;点此直达 …

【高等数学】导数的应用

导数的应用 1、洛必达法则1.1、引例1.2、内容1.3、证明1.4、洛必达的应用总结 1.5、注意 2、泰勒公式2.1、解决的问题2.2、引例2.3、内容2.3.1、带Peano余项的泰勒公式2.3.2、带Lagrange余项的泰勒公式2.3.3、麦克劳林公式2.3.4、几个初等函数的麦克劳林公式 2.4、证明2.5、泰勒…

智慧城市建设解决方案分享【完整】

文章目录 第1章 前言第2章 智慧城市建设的背景2.1 智慧城市的发展现状2.2 智慧城市的发展趋势 第3章 智慧城市“十二五”规划要点3.1 国民经济和社会发展“十二五”规划要点3.2 “十二五”信息化发展规划要点 第4章 大数据&#xff1a;智慧城市的智慧引擎4.1 大数据技术—智慧城…

css实战——清除列表中最后一个元素的下边距

需求描述 常见于列表的排版&#xff0c;如文章列表、用户列表、商品列表等。 代码实现 <div class"listBox"><div class"itemBox">文章1</div><div class"itemBox">文章2</div><div class"itemBox"…

java语法:继承与多态

导言: 在Java中&#xff0c;继承和多态是面向对象编程的两个重要概念&#xff0c;它们允许我们创建更加灵活和可扩展的代码。本文主要对继承和多态的语法和一些细节做一个介绍和解释。 目录 导言: 正文&#xff1a; 一.继承 1. 基本语法 2. 继承的特点 3.子类中访问父类…

新品上市|米尔RZ/G2UL核心板上市,助力工业4.0发展!

浩瀚的芯片海洋中能被人记住的寥寥无几&#xff0c;那些在人们脑海中留下印记的往往是踩中了时代的脉搏。32位ARMv7架构的A7/A8系列处理器自发布以来&#xff0c;以ARM9处理器的价格&#xff0c;升级了工业领域绝大部分应用需求&#xff0c;成为最近十年最受欢迎的通用工业级AR…

怎么写日语开发信?写外贸日语开发信技巧?

如何写好日语开发信&#xff1f;日语开发信格式是怎么样的&#xff1f; 无论您是初学者还是有经验的营销专家&#xff0c;都需要掌握一些关键技巧&#xff0c;以确保您的邮件在日本市场取得成功。蜂邮将向您介绍怎样写一封令人印象深刻的日语开发信&#xff0c;以吸引潜在客户…

2022年09月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 下列不是评判一个算法优劣的标准是?( ) A: 时间复杂度 B: 空间复杂度 C: 难易度 D: 健壮性 答案:C 评价算法的优劣是:时间复杂度,空间复杂度,健壮性,正确性,可读性。因此选…

Laplacian Redecomposition for Multimodal Medical Image Fusion

LRD方法 GDIE means ‘gradient-domain image enhancement’&#xff0c;DGR means ‘decision graph redecomposition’ MLD means ‘maximum local difference’ LEM means ‘local energy maximum’&#xff0c;OD means ‘overlapping domain’&#xff0c;LP means ‘L…

2023.11.8 hadoop学习-概述,hdfs dfs的shell命令

目录 1.分布式和集群 2.Hadoop框架 3.版本更新 4.hadoop架构详解 5.页面访问端口 6.Hadoop-HDFS HDFS架构 HDFS副本 7.SHELL命令 8.启动hive服务 1.分布式和集群 分布式: 多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)集 群:…

Java jdbc连接Oracle时出现ORA-28040: No matching authentication protocol报错

一、问题描述 升级了oracle数据库版本后&#xff0c;同时也更新了oracle的驱动为ojdbc8.jar&#xff0c;Java重新通过jdbc连接Oracle时出现ORA-28040: No matching authentication protocol报错。 完整报错信息 java.sql.SQLException: ORA-28040: No matching authenticati…