应用层协议--HTTP

news2024/10/24 10:26:56

目录

一.HTTP是什么?

二.HTTP的请求和响应

a.请求:

b.响应:

三.URL

四.Header

1.Host

2. Content-Length

3. Content-Type

a. 请求

b. 响应

4. Referer

5. User-Agent

6. Cookie


一.HTTP是什么?

HTTP是一种应用层协议,其中应用层协议还有很多比如HTML,URL等

应用场景:

1.网页和后台服务器之间的交互

2.app和后台服务器之间的交互

二.HTTP的请求和响应

a.请求:

1)首行(HTTP请求的第一行,有三个部分信息,三个部分使用空格进行分割)

   第一个部分信息:GET ,是HTTP 请求的“方法”

   第二个部分信息:URL 唯一资源定位符,描述了一个资源在网络上的位置

   第三个部分信息:版本号  

2)请求头(header)

   是一个键值对结构的数据,每个键值对都独占一行,键和值之间通过 :空格来区分

   这里的键值对都属于标准规定的

3)空行

请求头结束的标记

4)正文( body)

正文有的有,有的没

b.响应:

1)首行(包含了版本号,状态码,状态码描述)

2)响应头(header)

也是键值对结构,每个键值对独占一行,键和值之间通过:空格来区分

此处的键值对也是有标准规定的

3)空行

响应头结束的标记

4)正文(body)

响应的正文比较多

三.URL

我们来看一下HTTP 请求首行中的URL 是这么个事

URL是统一资源定位符,描述了某个资源在网络上所属的位置

 

比如我在大学买凉皮

http://锦绣餐厅:8080/凉皮/火鸡面凉皮?凉面=多放&辣椒少放

服务器地址 端口 带层次的文件路径 查询字符串(query string)

query string 中的键值对都是程序猿自定义的

四.Header

我们知道Header中都是一些键值对的结构,这里介绍最重要的一些键值对。

1.Host

这个就是服务器的域名 , 就比如 www.baidu.com

2. Content-Length

这个是 body 中数据的长度

这里有个比较重要的知识点:前面涉及到的TCP 粘包问题

HTTP 在传输层 就是 基于 TCP的

如果使用同一个TCP进行连接,传输多个HTTP数据包,此时多个HTTP数据包就会在TCP的接收缓冲区中挤在一起

那么接收方进行解析的时候,该怎么样清楚 HTTP 数据包的界限?

对于GET 这种通常没有 body 的请求,直接可以使用 空行(分隔符)

对于 POST 这种有 body 的请求,就需要结合 空行和 Content-Length

3. Content-Type

body中数据 的格式是非常多的

这里分别来看 请求 和 响应 都有哪些格式

a. 请求

  1. json

  2. from 表单的格式

  3. from - data 的格式

b. 响应

  1. html

  2. css

  3. js

  4. json

  5. 图片

4. Referer

Referer描述了当前页面是从那个页面跳转过来的

通常用于广告网页计费,在广告界面,可以进行抓包,看到这个广告网页时从什么网站跳转过来的

5. User-Agent

UA 主要是用来区分 PC 端 还是移动端

在很久之前,网页很简单就是仅支持文字,浏览器的功能也很简单

后来,网页的内容开始丰富了,随之浏览器的功能也开始逐渐升级

这个升级的过程是很快的,新的浏览器诞生之后,并不是立即就占领市场,而是在相当一部分时间里,新浏览器和旧浏览器并存的。

网站的开发者就需要考虑到,我写的网页是否要兼容旧版浏览器呢?

那么就可以用 UA 来获取浏览器版本 , 来看看是否兼容

6. Cookie

Cookie可以认为是浏览器 本地存储数据的一种方式

这些数据放到本地文件中更为合适

但是考虑到安全性,是进制网页直接访问电脑的文件系统的

网页代码中也就无法生成一个硬盘的文件来存储数据了。

为了保证安全性,又能进行存储数据,于是就引入了Cookie

也是按照硬盘文件的方式进行保存的,但是浏览器把操作文件进行了封装,网页只能往Cookie 中 存储键值对

 

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

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

相关文章

Java并发编程-实现多线程的四种方式

创建线程的四种方式 创建线程的四种方式包括使用继承 Thread 类、实现 Runnable 接口、使用 Callable 和 Future 接口以及利用线程池。每种方式都有其特定的优势和适用场景。通过继承 Thread 类或实现 Runnable 接口,可以定义线程要执行的任务,并通过调用…

图形系统开发实战课程:进阶篇(上)——10.应用实例:交通路网

图形开发学院|GraphAnyWhere 课程名称:图形系统开发实战课程:进阶篇(上)课程章节:“图形样式”原文地址:https://www.graphanywhere.com/graph/advanced/2-10.html 第十章 应用实例:交通路网 \quad 在前面几…

Spring学习 基础(一)

Spring基础 IoC容器(Inversion of Control): Spring 的核心是其控制反转(IoC)容器,它负责管理对象的生命周期和相互之间的依赖关系。通过依赖注入(Dependency Injection),Spring能够…

python 基础知识点(蓝桥杯python科目个人复习计划59)

今日复习内容:做题 例题1:建造房屋 问题描述: 小蓝和小桥是两位年轻的建筑师,他们正在设计一座新的城市。 在这个城市中,有N条街道,每条街道上有M个位置可以建造房屋(一个位置只能建造一个房…

【java】后序遍历二叉树

采用递归方式实现 节点类 public class Node {private int value;//父节点private Node fNode;//左节点private Node left;//右节点private Node right;//是否已经打印过private boolean sign false;public Node() {}public boolean isSign() {return sign;}public void setS…

融资项目——OpenFeign的降级与熔断

当一个微服务调用其他微服务时,如果被调用的微服务因各种原因无法在规定时间内提供服务,则可以直接使用本地的服务作为备选,即进行降级熔断。 如之前所提到的微服务为例: 如果希望实现降级熔断,可以在本地创建一个实现…

【Spring云原生系列】Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合!

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

HYBBS 表白墙网站PHP程序源码

安装教程 上传程序安装,然后设置账号密码,登陆后台切换模板手机PC都要换开启插件访问前台。 安装完成后如果不能正常访问就删除install安装文件夹 安装完成后右上角登录后点击头图进入后台 找到插件 安装表白墙配置插件 找到模板 将表白墙模板同时设…

18个惊艳的可视化大屏(第19辑):工业制造、智能工厂

实时监控和数据展示 可视化大屏可以集成和展示各种传感器、设备和系统的实时数据。通过将数据可视化展示在大屏上,工厂管理人员可以实时监控生产线的状态、设备的运行情况、生产效率等重要指标。这有助于及时发现问题、做出决策,并提高生产效率和质量。…

多模态入门

VIT处理图像 CNN VS Transformer 多模态BLIP模型 网络结构 视觉编码器: 就是 ViT 的架构。将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征。视觉编码器不采用之前的基于目标检测器的形式,因为 ViLT 和…

【Linux】权限管理(文件的访问者、类型和访问权限,chmod、chown、chgrp、umask,粘滞位)

目录 00.前言 01.文件访问者的分类 02.文件类型和访问权限 文件类型: 文件基本权限: 03.文件权限值的表示方法 04.访问权限的设置 (1)chmod (2)chown (3)chgrp &#xff0…

Redis安全加固策略:绑定Redis监听的IP地址 修改默认端口 禁用或者重命名高危命令

Redis安全加固策略:绑定Redis监听的IP地址 & 修改默认端口 & 禁用或者重命名高危命令 1.1 绑定Redis监听的IP地址1.2 修改默认端口1.3 禁用或者重命名高危命令1.4 附:redis配置文件详解(来源于网络) 💖The Beg…

启动Docker镜像时候,ENTRYPOINT 和CMD这两者指令的写法有什么不同和区别?

ENTRYPOINT和CMD在Dockerfile中都用于指定容器启动时执行的命令,但它们之间存在一些关键的区别和不同的用途: 1. 基本用途和行为差异 ENTRYPOINT 定义了容器启动时执行的基础命令,使得容器像一个可执行程序。ENTRYPOINT让你能够指定容器启动…

Pycharm+Selenium WebdriverPython自动化测试

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

JAVA回顾总结--IO和装饰模式

目录 一、IO流的分类流的体系结构 二、IO流的基础使用2.1 FileReader和FileWriter2.2 FileInputStream和FileOuputStream2.3 缓冲流 Buffered2.4 转换流 InputStreamReader和OutputStreamWriter2.5 对象流 ObjectInputStream 和 ObjectOutputStream 三、IO结构和装饰模式3.1 装…

【软考】设计模式之访问者模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. java示例5.1 喂动物5.1.1 抽象访问者5.1.2 具体访问者5.1.3 抽象元素5.1.4 具体元素5.1.5 对象结构5.1.6 客户端类5.1.7 结果示例 5.2 超市销售系统5.2.1 业务场景5.2.2 业务需求类图5.2.3 抽象访问者5.2.4 具体访问者5.2.5 抽象元素…

SAR ADC学习笔记(4)

CDAC电容阵列 一、电容失配 二、电容失配对CDAC线性度的影响 1.电容失配对DNL的影响 2.电容失配对INL的影响 三、分段结构的CDAC 四、CDAC开关切换方案&#xff1a;传统开关切换策略 第一次比较阶段&#xff1a;如果VP(1)-VN(1)<0 第一次比较阶段&#xff1a;如果VP(1)-VN…

【Godot4.2】GDScript数组分类及类型化数组和紧缩数组概述

概述 GDScript的数组是一种很常用的数据类型。本文主要阐述一下GDScript数组分类&#xff0c;以及官方文档和大多数视频或教程较少提及的类型化数组和紧缩数组。 GDScript数组分类 通过反复查阅GDScript内置文档并进行细节比较&#xff0c;发现GDScript的数组&#xff0c;可…

LVS集群(Linux Virtual server)

集群概念lvs模型lvs调度算法lvs实现lvs高可用性&#xff0c;负载均衡 1 集群和分布式 系统性能扩展方式&#xff1a; Scale UP&#xff1a;垂直扩展&#xff0c;向上扩展,增强&#xff0c;性能更强的计算机运行同样的服务 升级单机的硬件设备Scale Out&#xff1a;水平扩展…

【DP】蓝桥杯第十三届-费用报销

#include<iostream> #include<algorithm> #include<cstring> #include<set> #include<queue> using namespace std; const int N1010; int dp[N][5010];//dp[i][j]:选到第i个物品是否能取到价值j&#xff1b; int month[13]{0,31,28,31,30,31,30…