【JavaEE】-- HTTP

1. HTTP是什么?

HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。

应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上的应用程序进程之间如何相互通信的规则和标准。简单来说,应用层协议就是应用程序用来”对话”的语言和约定。
在这里插入图片描述

HTTP 协议的常见应用场景:

  1. 浏览器与服务器之间的交互(访问网站)。
  2. 手机与服务器之间的通信。
  3. 多个服务器之间进行通信。

2. HTTP协议的工作过程

HTTP是一个一问一答的过程。

在这里插入图片描述

3. HTTP协议格式

在这里插入图片描述

3.1 抓包工具的原理

在这里插入图片描述
抓包工具就相当于一个中间人,他对客户端的请求与服务器的响应都了解。

3.2 请求报文

在这里插入图片描述

请求行:
在这里插入图片描述
请求报头:
在这里插入图片描述
请求报头的每一行都用一组键值对表示,键与值用:隔开,键值对可以是HTTP规范中的内容,也可以是程序员自定义的内容。
空行:
是分割请求头与真实用户数据的部分。

Body(正文):
在这里插入图片描述
空行后面的内容都是Body.Body 允许为空字符串 .如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;

3.3 响应报文

在这里插入图片描述

在这里插入图片描述

4. HTTP请求

4.1 认识URL

4.1.1 URL基本格式

在这里插入图片描述

4.1.2 URL encode

URL 中的特殊字符都用URLEncode进行编码,每个byte用两个十六进制表示,每个byte前加一个%。

4.1.3 方法

在这里插入图片描述

1. GET方法

如何指定请求的方法?

  1. 当在浏览器的地址栏中输入一个URL并发起访问时,发送的全是GET请求。
  2. 通过代码(js)发送请求,可以指定GET,POST,PUT,DELETE。
  3. 通过HTML中的表单来指定方法名。
  4. 网站加载所需要的一些资源都是使用GET方法,比如网站中中的图片,样式,字体…

GET 请求的特点:
1.首行的第一部分为GET。
2. URL的query string 可以为空,也可以不为空。
3. header部分有若干个键值对结构。
4. body部分为空。

2. POST 方法
POST方法也是一种常见的方法,多用于提交用户输入的数据给服务器(例如登陆页面)。
在这里插入图片描述

POST请求的特点:

  1. 首行的第一部分为POST。
  2. URL的query String一般为空(也可以不为空)。
  3. header部分有若干个键值对结构。
  4. body部分一般不为空,body内的数据格式通过header中的Content-type指定。body的长度由header中的Content-length指定。

GET请求是以query String的方式提交参数的,POST的请求参数在Body部分。

经典面试题:谈谈GET和POST的区别?

  1. 语义不同:GET一般用于获取数据,POST一般用于提交数据。
  2. GET的body一般为空,需要传递的数据通过queryString传递的,POST的query string一般为空,需要传递的数据通过body传递。
  3. GET请求一般是幂等(每次访问同一个URL,得到的结构都相同)的,POST请求一般是不幂等的。
  4. GET可以被缓存在本地(下次再访问的时候就不用通过网络,而是从本地缓存中直接获取),POST不能被缓存(这一点也是承接幂等性的)。

网上有些博客说GET的URL长度(URL + query string)的长度是有限制的,比如说255个字符,1000个字符…,这种说法是完全错误的。HTTP协议的官方说明中表示对URL的长度不做限制,如果受限制了,也是浏览器或者应用程序自身做的限制。

4.2 认识请求报头

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

2. Content-Length
表示body中的数据长度,单位是字节。

POST的请求和响应中都有这个字段,只要body中有真实的数据就根据这个长度的值去读取。

3. Content-Type
表示请求的body中是数据格式,包含多种格式,目的是告诉浏览器要用什么格式来解析body中的数据。

常见的几种

  • application/x-www-form-urlencoded: form 表单提交的数据格式,此时body的格式形如:
title=test&content=hello
  • multipart/form-data: form表单提交的数据格式(在form标签中加上enctyped="multipart/form-data")通常用于提交图片/文件。此时的body格式形如:
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3Trw------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="text" title 
------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="file"; filename="chrome.png" 
Content-Type: image/png 
PNG ... content of chrome.png ... 
------WebKitFormBoundaryrGKCBY7qhFd3TrwA-- 
  • application/json数据为json格式,body格式形如:
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16"}

4. User-Agent(简称UA)
表示浏览器/操作系统的属性,形如:
在这里插入图片描述
5. Referer
表示页面是从哪个页面跳转过来的。

6. Cookie
作用:在用户的电脑(浏览器)中保存一些简单的数据。
在这里插入图片描述
在这里插入图片描述

向客户端浏览器写入cookie的两种方式:

  1. 为header中的set-cookie这个键设置具体的cookie值。
  2. 通过JS代码的方式去写。

如果使用其他用户(已登录的状态)的cookie访问网站,会出现什么样的情况?
最终是以cookie所对应的用户身份去访问网站,这就是cookie欺骗技术。

理解登陆过程:
在这里插入图片描述

5. 认识状态码

在这里插入图片描述
1. 200
表示访问成功。
表示客户端与服务器之间的请求与响应是没有问题的。

问:客户端进行登陆,输入一个错误的用户名和密码,服务器返回了一个登陆失败的错误提示,这种情况状态码是不是200?
答:是200。虽然输入的用户名和密码是正确的,但是服务器完成了用户名和密码的校验,并返回了一个适当的提示。状态码200表示的是请求与响应是正常的,和业务处理没有问题。

2. 404 Not Found
没有找到资源。

浏览器输入一个URL,目的就是为了访问对方服务器上的一个资源,如果这个URL标识的资源不存在,那么就会出现404.

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

4. 405 Method Not Allowed
HTTP中支持GET、POST、PUT、DELETE等,但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法)。

如果服务器的某个URL只支持GET方法访问,但用POST、PUT、DELETE方法进行访问的时候就是405.

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

6. 302 Move temporarily
临时重定向:同一个入口根据不同的常见,转发到不同的页面,也可能不转发。

重定向:当前访问的URL并不是最终的地址,当前的请求会被转发,转发到最终的目的页(落地页)。

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

只要访问这个页面全部无条件重定向,主要应用在新旧系统的迁移。

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

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

相关文章

245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推

245. 数正方形(困难) 2019年蓝桥杯国赛 - 数正方形(困难) 标签:2019 国赛 递推 题目描述 在一个 N N N N N N 的点阵上,取其中 4 个点恰好组成一个正方形的 4 个顶点,一共有多少种不同的取…

python Day46 学习(日志Day15复习)

Q. 关于"range()" 手写笔记复习 今日学习到这里,明日继续加油!!!浙大疏锦行

深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键

文章目录 引言一、认识 net.ipv4.tcp_rmem1. 最小值(min)2. 默认值(default)3. 最大值(max) 二、net.ipv4.tcp_rmem 的工作原理三、net.ipv4.tcp_rmem 的实际应用场景1. 高并发 Web 服务器2. 文件传输服务3…

商品中心—1.B端建品和C端缓存的技术文档一

大纲 1.商品中心的专业术语 2.商品中心的基本业务系统 3.商品中心整体架构设计以及运行流程 4.商品B端—商品编码生成逻辑 5.商品B端—商品核心数据模型 6.商品B端—转换建品请求数据为商品模型数据 7.商品B端—商品建品时商品编号补全与审核配置 8.商品B端—商品审核前…

Xcode 16.2 版本 pod init 报错

Xcode 版本升级到 16.2 后,项目执行 pod init 报错; ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchron…

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…

LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上

题目:1667. 修复表中的名字 题解: select user_id, concat(upper(left(name,1)),lower(right(name,length(name)-1))) name from Users order by user_id题目:1527. 患某种疾病的患者 题解: select * from Patients where con…

随机算法一文深度全解

随机算法一文深度全解 一、随机算法基础1.1 定义与核心特性1.2 算法优势与局限 二、随机算法经典案例2.1 随机化快速排序原理推导问题分析与策略代码实现(Python、Java、C) 2.2 蒙特卡罗方法计算 π 值原理推导问题分析与策略代码实现(Python…

[论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景

当AI成为编程搭档:结对编程中的知识转移新图景 论文信息 论文标题:From Developer Pairs to AI Copilots: A Comparative Study on Knowledge Transfer(从开发者结对到AI副驾驶:知识转移的对比研究) 作者及机构&#…

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…

Windows开机自动启动中间件

WinSW(Windows Service Wrapper 是一个开源的 Windows 服务包装器,它可以帮助你将应用程序打包成系统服务,并实现开机自启动的功能。 一、下载 WinSW 下载 WinSW-x64.exe v2.12.0 (⬇️ 更多版本下载) 和 sample-minimal.xml 二、配置 WinS…

数据结构排序

目录 1、插入排序 2、希尔排序 3、堆排序 4、直接选择排序 5、快排 6、归并排序 1、插入排序 void InsertSort(int* arr, int n) {int i 0;for (int i 0; i 1 < n; i){int end i;int tmp arr[end 1];while (end > 0){if (arr[end] > tmp){arr[end 1] ar…