【JavaEE】HTTP协议

HTTP协议

  • HTTP是什么?
  • HTTP 协议格式
    • HTTP 请求格式
    • HTTP响应格式
    • 协议格式总结
  • HTTP 请求 (Request)
    • 认识 URL
      • URL 基本格式
    • 关于 URL encode
    • 认识 "方法" (method)
      • 1. GET 方法
      • 2. POST 方法
    • 认识请求 "报头" (header)
  • HTTP 响应详解
    • 认识 "状态码" (status code)
    • 认识响应 "报头" (header)

HTTP是什么?

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

在这里插入图片描述

我们平时打开一个网站, 就是通过 HTTP 协议来传输数据的.
在这里插入图片描述
当我们在浏览器中输入一个 搜狗搜索的 “网址” (URL) 时, 浏览器就给搜狗的服务器发送了一个 HTTP 请求, 搜狗的服务器返回了一个 HTTP 响应.

这个响应结果被浏览器解析之后, 就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应里就包含了页面 HTML, CSS, JavaScript, 图片, 字体等信息).

HTTP 协议格式

HTTP 请求格式

在这里插入图片描述

  • 首行: [方法] + [url] + [版本]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;

HTTP响应格式

在这里插入图片描述

  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.

协议格式总结

在这里插入图片描述
在这里插入图片描述

HTTP 请求 (Request)

认识 URL

URL 基本格式

平时我们俗称的 “网址” 其实就是说的 URL (Uniform Resource Locator 统一资源定位符).

互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它

在这里插入图片描述

分析具体的URL :
https://v.bitedu.vip/personInf/student?userId=10000&classId=100

  • https: 协议方案名
  • v.bite.vip : 表示的是域名, 域名通过DNS服务器解析成IP地址
  • 端口号: 如果未显示说明, 就会根据协议方案来确定端口号 , 这里会https的端口号就是443, 如果是http就是80端口号
  • /personInf/student: 带层次的文件路径
  • userId=10000&classId=100:查询字符串(query string). 本质是一个键值对结构. 键值对之间使用& 分隔. 键和值之间使用 = 分隔.

URL中可以省略的部分

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

关于 URL encode

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.

转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

认识 “方法” (method)

在这里插入图片描述

1. GET 方法

GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源.

在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求.

另外, HTML 中的 link, img, script 等标签, 也会触发 GET 请求.

GET 请求的特点

  • 首行的第一部分为 GET
  • URL 的 query string 可以为空, 也可以不为空
  • header 部分有若干个键值对结构.
  • body 部分为空.

2. POST 方法

POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面).

通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求.

POST 请求的特点

  • 首行的第一部分为 POST
  • URL 的 query string 一般为空 (也可以不为空)
  • header 部分有若干个键值对结构.
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的 Content-Length 指定.

认识请求 “报头” (header)

Host

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

Content-Length

表示 body 中的数据长度.

Content-Type

表示请求的 body 中的数据格式.

User-Agent (简称 UA)

表示浏览器/操作系统的属性. 形如
在这里插入图片描述

Referer

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

Cookie

Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据).

  1. cookie 从哪里来?
    • cookie 是从服务器返回给浏览器的
  2. cookie 保存在哪里?
    • cookie 保存在浏览器上, 浏览器所在电脑的硬盘上, 每个域名都有自己的一组 cookie
  3. cookie 里的内容是什么?
    • cookie 中的内容都是键值对结构的数据, 这里的键值对都是程序员自己定义的
    • 其中往往有一个键值对, 作为用户的身份标识
  4. cookie的内容到哪里去?
    • 后续范文这个网站中的各个页面, 都会在请求中带上cookie, 服务器就可以进一步知道客户端的详细情况了

HTTP 响应详解

认识 “状态码” (status code)

状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…).

200 OK

这是一个最常见的状态码, 表示访问成功.

404 Not Found

没有找到资源.

403 Forbidden

表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.

405 Method Not Allowed

前面我们已经学习了 HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等.

但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法).

500 Internal Server Error

服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码.

504 Gateway Timeout

当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况.

302 Move temporarily

临时重定向.

在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页.

响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面.

301 Moved Permanently

永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址.

在这里插入图片描述

认识响应 “报头” (header)

在这里插入图片描述


详细说明

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

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

相关文章

【嵌入式开发 Linux 常用命令系列 9 -- linux系统终端命令提示符设置(PS1)】

文章目录 Linux PS1 介绍PS1 纯文本和特殊的转义序列PS1 颜色设置 Linux PS1 介绍 在Linux中,PS1(Prompt String 1)是一个环境变量,用来定义shell命令提示符的显示内容和格式。当你在终端中输入命令时,PS1定义的就是那…

Jupyter Notebook的使用

文章目录 Jupyter Notebook一、Jupyter Notebook是什么?二、使用步骤1.安装Miniconda2.安装启动**Jupyter Notebook**3.一些问题 三、Jupyter Notebook的操作1.更换解释器2.在指定的文件夹中打开 四.报错解决1.画图的时候出现报错2.画图的时候空白3.pandas相关的错误…

flink 反压原理

背景 在flink中由于数据倾斜或者数据处理速率的不匹配,很容易引起反压,本文就看一下flink反压的原理 flink反压原理 flink全流程pineline的反压实现其实依赖于TaskManager之间的反压和TaskManager内部的反压来实现 1.TaskManager之间的反压 2.Task…

RT-Thread内核——内核基础(上)

1、内核简介 内核是操作系统的核心,是操作系统最基础也是最重要的部分,主要负责系统的线程、线程间通信、系统时钟、中断以及内存等。其架构图如下: 2、线程调度 线程是RT-Thread操作系统中最小的调度单位,线程调度算法的基于…

CentOS 7 安装和配置java环境

1 安装包准备 安装包可以通过下面地址进行版本选择安装: https://www.oracle.com/java/technologies/downloads/#java8 2 正式开始安装 本次分享的安装方法直接通过编辑/etc/profile文件实现java的安装 2.1 新建安装包存放目录 mkdir /java cd /java/ 2.2 解压安…

Redis(10)| I/O多路复用(mutiplexing)

上文select/epoll 在上文《Redis(09)| Reactor模式》 思考问题可以使用I/O多路复用技术解决多多客户端TCP连接问题,同时也提到为了解决最早期的UNIX系统select调用存在的四个问题。 select(int nfds, fd_set *r, fd_set *w, fd_set *e, stru…

机器学习第一周

一、概述 机器学习大致会被划分为两类:监督学习,无监督学习 1.1 监督学习 监督学习其实就是,给计算机一些输入x和正确的输出y(训练数据集),让他总结x->y的映射关系,从而给他其他的输入x&a…

Docker安全

目录 一. cgroup 2. cpu优先级 3. 内存资源限制 4. 磁盘io限制 二. lxcfs隔离 三. 容器特权 一. cgroup 1. cpu资源限制 docker run -it --rm --cpu-period 100000 --cpu-quota 20000 ubuntu root433a1612a171:/# dd if/dev/zero of/dev/null & 2. cpu优先级 docker run -i…

探营云栖大会:蚂蚁集团展出数字人全栈技术,三大AI“机器人”引关注

一年一度的科技盛会云栖大会将于10月31日正式开幕。30日,记者来到云栖大会展区探营,提前打卡今年上新的“黑科技”。 记者在蚂蚁集团展馆看到,超1亿人参与的亚运“数字火炬手”全栈技术首次公开展示,还可体验基于数字人技术的“数…

什么是全排列?(算法实现)

全排列是什么? 全排列是指将一组元素按照一定顺序进行排列的所有可能结果。以一组数字为例,比如[1, 2, 3]的全排列结果为:[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]。 全排列有许多不同的计算方法,其中…

云服务器搭建Zookeeper集群

文章目录 1.集群配置2.zookeeper的群起脚本3. Zookeeper节点的创建和删除相关4. Zookeeper的选举机制 1.集群配置 Zookeeper的集群个数最好保证是奇数个数,因为Zookeeper的选举过程有一个“半数机制”。 5台服务器,可以设置Zookeeper的集群为3或者5&…

大数据学习(18)-任务并行度优化

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

通信原理板块——卷积码(原理、代数和几何表示、编码和解码)

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、卷积码定义 卷积码(convolution…

网络工程综合试题(二)

1. SR技术有哪些缺点? SR(Segment Routing)技术是一种新兴的网络编程技术,它具有很多优点,但也存在一些缺点,包括: 部署复杂性:SR技术需要对网络进行改造和升级,包括更新…

基于SpringBoot的企业财务管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 财务人员管理 留言管理 薪资管理 财务人员功能实现 报销信息管理 收费信息管理 支出信息管理 员工功能实现 报销信息管理 留言管理 薪资查询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前…

Centos安装mongodb

mongodb官网 下载MongoDB cd /optwget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.2.tgztar -xf mongodb-linux-x86_64-rhel70-4.4.2.tgz -C /usr/local/cd /usr/local/mv mongodb-linux-x86_64-rhel70-4.4.2 mongodb部署Mongodb 2.1. 创建目录 cd mo…

基于【逻辑回归】的评分卡模型金融借贷风控项目实战

背景知识: 在银行借贷过程中,评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段。今天我们来复现一个评分A卡的模型。完整的模型开发所需流程包括:获取数据,数据清洗和特征工程,模型开发&#xff0c…

计算机基础知识41

前端 # 前端是所有跟用户直接打交道 比如:PC页面、手机页面、汽车显示屏,肉眼可以看见的 # 后端:一堆代码,用户不能够直接看到,不直接与用户打交道 常见的后端:Python、Java、Go等 # 学了前端就可以做全栈…

C语言每日一练(二)

单链表经典算法专题 一、 单链表相关经典算法OJ题1:移除链表元素 解法一:在原链表中删除Node.nextnext的节点 typedef struct ListNode ListNode; struct ListNode* removeElements( ListNode* head, int val) {ListNode* pcur head;ListNode* pre h…

世界前沿技术发展报告2023《世界航空技术发展报告》(五)直升机技术

(五)直升机技术 1.常规直升机技术1.1 北约六国联合启动下一代旋翼飞行器能力项目1.2 美国和法国重视发展有人/无人直升机编组能力1.3 美国“黑鹰”直升机完成不载人全自主飞行 2.新概念直升机技术2.1 美国“劫掠者”X型直升机参与陆军“未来攻击侦察机”…