【第二天】计算机网络 HTTP请求报文和响应报文是什么样的 HTTP请求方式有哪些 GET请求和POST请求的区别

news2024/9/28 3:21:43

HTTP请求报文和响应报文是什么样的?

我去,以前都没怎么研究过这个。
客户端发送一个请求给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放到响应报文中返回给客户端。

URL

HTTP使用URL (Uniform Resource Locator,统一资源定位符)来定位资源,它是URI(统一资源标识符)的子集,URL在URI的基础上增加了定位能力。URI除了包括URL外,还包括URN(统一资源名称),URN只是用来定义一个资源的名称,并不具备定位该资源的能力。

请求报文结构:

第一行包含了请求方法,URL,协议版本
接下来多行都是请求首部Header,每个首部都有一个首部名称,以及对应的值。
接下来用一个空行分隔Header和主体内容Body
最后就是请求的内容主体

GET http://www.example.com/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Host: www.example.com
If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT
If-None-Match: "3147526947+gzip"
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 xxx

param1=1&param2=2

响应报文结构:

第一行包含了协议版本,状态码以及描述,这里的200 OK表示请求成功了。
接下来多行也是首部内容
还是用空行来分隔首部和主体
最后是响应的内容主体

HTTP/1.1 200 OK
Age: 529651
Cache-Control: max-age=604800
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 648
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Nov 2020 17:53:39 GMT
Etag: "3147526947+ident+gzip"
Expires: Mon, 09 Nov 2020 17:53:39 GMT
Keep-Alive: timeout=4
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Proxy-Connection: keep-alive
Server: ECS (sjc/16DF)
Vary: Accept-Encoding
X-Cache: HIT

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
	// 省略... 
</body>
</html>

HTTP请求的方式有哪些

我去,居然有9中方法。
GET方法:获取资源。当前网络请求中,绝大部分使用GET方法。
HEAD方法:获取响应报文的header(首部)。和GET方法类似,但是不返回报文实体主体部分。主要用于确认URL的有效性以及资源更新的日期时间。
POST方法:传输实体主体。POST方法主要用来传数据,而GET方法主要用来获取资源。
PUT方法:上传文件。由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。
PATCH方法:对资源部分进行部分修改。PUT也可以用于修改资源,但是只能完全替代原始资源,PATCH允许部分修改。
DELETE方法:与PUT功能相反,并且同样不带验证机制。
OPTIONS方法:查询支持的方法。查询指定的URL能够支持的方法,会返回
Allow: GET,POST,HEAD,OPTIONS这样的内容。
CONNECT方法:在与代理服务通信时建立隧道。使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。
TRACE方法:追踪路径。服务器会将通信路径返回给客户端。发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器就会减1,当数值为0时就会停止传输。但通常不会使用TRACE,英文它容易收到XST攻击(跨站追踪)

GET请求和POST请求的区别

作用:

GET用于请求资源,POST用于传输实体主体。

参数:

GET和POST的请求都可以使用额外的参数。但是GET的参数是以查询字符串的方式出现在URL中,而POST的参数存储在实体主体中。不能因为POST参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(例如Fiddler)查看。
因为URL只支持ASCII码,因此GET的参数中如果存在中文等字符就需要先进性编码。例如 中文 会转换为 %E4%B8%AD%E6%96%87,而空格会转换为 %20。POST 参数支持标准字符集。

安全:

安全的HTTP方法不会改变服务器状态,也就是说它是可读的。
GET方法是安全的,而POST却不是,因为POST方法的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。
安全的方法有:GET,HEAD,OPTIONS
不安全的方法有:POST,PUT,DELETE,PATCH,TRACE。

幂等性:

幂等的HTTP方法:即同样的请求被执行一次或多次的效果是一样的,服务器的状态也是一样的。也就是说幂等方法不具有副作用。
所以所有的安全方法都是幂等的。
在正确实现的条件下,GET,HEAD,PUT,DELETE等方法都是幂等的,但POST不是。
在这里插入图片描述

可缓存:

如果要对响应进行缓存,需要满足以下条件:

  1. 请求报文的HTTP方法本身是可以缓存的,包括GET和HEAD,但是PUT和DELETE不可缓存,POST在多数条件下不可缓存。
  2. 响应报文的状态码是可以缓存的,包括:200,203,204,206,300,301,404,405,410,414,501
  3. 响应报文的Cache-Control首部字段没有指定不进行缓存。

XMLHttpRequest

XMLHttpRequest:

XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过URL来获取数据的方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest在AJAX中被大量使用。

在使用XMLHttpRequest的POST方法时,浏览器会先发送Header再发送Data。但不是所有的浏览器都会这么做。例如火狐就不会。
而GET方法Header和Data会一起发送。

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

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

相关文章

leetcode-148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#x…

【Docker】Windows11环境下的安装

前置依赖环境配置 确保虚拟化开启 搜索栏直接搜索如下功能 勾选下面两个选项&#xff0c;确定 重启电脑&#xff0c;以管理员身份打开PowerShell wsl --status wsl --update打开微软应用商店选择一个Ubuntu版本下载并打开 输入一个用户名和密码 然后就可以在Windows下使…

Hyperledger Fabric 网络体验 - 网络启动过程概览

进入fabric-samples/test-network目录&#xff0c;执行指令&#xff1a; ./network.sh up -i 2.5执行完指令能看到fabric已经启动。 作为第一次Fabric网络体验&#xff0c;网络启动主要包含三个操作&#xff0c;分别是生成配置文件、启动网络和操作网络。 配置文件 使用cr…

Spring Boot(八十二):SpringBoot通过rsa实现API加密

项目中使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密 。 下面开始代码演示 1 接口加密 1.1 新建一个springboot项目 1.2 添加依赖 <dependency>&l…

MySql 触发器、存储器练习

一&#xff1a; 触发器 1、建立两个表:goods(商品表)、orders(订单表) 查看数据库&#xff1a;mysql> show databases; 使用数据库&#xff1a;mysql> use mydb16_trigger; 创建goods表&#xff1a; mysql> create table goods(gid char(8) not null primary key, …

煤矿运输卡车4G/5G视频监控管理系统的应用与优势

随着科技的不断进步&#xff0c;煤矿行业的安全管理与效率提升日益受到重视。特别是在运输环节&#xff0c;一款名为“煤矿运输车辆4G/5G视频监控管理系统”的新型应用&#xff0c;正在为广大煤矿企业带来革命性的变革。以下将详细介绍这一系统的应用及其优势。 一、系统应用 煤…

排序系列 之 基数排序

&#xff01;&#xff01;&#xff01;排序仅针对于数组哦本次排序是按照升序来的哦 介绍 基数排序&#xff08;RadixSort&#xff09;又称桶子法&#xff0c;是一种非比较型整数排序算法。其原理是将整数按位数切割成不同的数组&#xff0c;然后按每个位数分别比较&#xff0…

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版

Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xff0c;重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xf…

DMv8共享存储集群部署

DMv8共享存储集群部署 环境说明 操作系统&#xff1a;centos7.6 服务器&#xff1a;2台虚拟机 达梦数据库版本&#xff1a;达梦V8 安装前准备工作 参考达梦官方文档&#xff1a;https://eco.dameng.com/document/dm/zh-cn/ops/DSC-installation-cluster.html#%E4%B8%80%E3…

0725,进程间传递文件描述符,socketpair + sendmsg/recvmsg

我要碎掉了我要碎掉了我要碎掉了 上课喵&#xff1a; pipe匿名管道的问题 #include <func.h>int main() {int fds[2];pipe(fds);pid_t pidfork();if(pid>0){ //fatherclose(fds[0]);//close readint fdopen("file2.txt",O_RDONLY);printf("father: …

Jsoup爬虫——自学习梳理

——项目已完结&#xff08;源码在文末&#xff09; 一个较大的项目&#xff0c;通过后台进行网站爬虫&#xff0c;选择的是一个招聘类型的网站&#xff0c;爬取数据后会选择一部分放入到我们的数据库中&#xff0c;前台通过后台返回的Json数据进行展示&#xff1b;大概就是这样…

CSS(五)——CSS Fonts(字体)

CSS 字体 CSS字体属性定义字体&#xff0c;加粗&#xff0c;大小&#xff0c;文字样式。 CSS字型 在CSS中&#xff0c;有两种类型的字体系列名称&#xff1a; 通用字体系列 - 拥有相似外观的字体系统组合&#xff08;如 "Serif" 或 "Monospace"&#x…

mysql特殊字符、生僻字存储设置

mysql utf-8模式下&#xff0c;分为ut8mb3,utf8mb4&#xff0c;mb4是支持特殊字符、emoji表情的&#xff0c;mb3是不支持的。 报错信息&#xff1a; 1### Error updating database. Cause: java.sql.SQLException: Incorrect string value: \xF0\xA8\x92\x82\xE6\x95... fo…

vue3+ts+vite+electron+electron-packager打包成exe文件

目录 1、创建vite项目 2、添加需求文件 3、根据package.json文件安装依赖 4、打包 5、electron命令运行 6、electron-packager打包成exe文件 Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron 1、创建vite项目 npm create vitelatest 2、添…

hipBLAS示例程序

GPT-4o (OpenAI) 当然&#xff01;以下是一个简单示例&#xff0c;展示了如何使用hipBLAS库进行矩阵-向量乘法 (GEMV) 的操作。该示例包括初始化 hipBLAS 环境&#xff0c;设置矩阵和向量数据并调用hipBLAS API来执行操作。 首先&#xff0c;确保你已经安装了 ROCm&#xff08…

PYTHON学习笔记(八、字符串及的使用)

目录 1、字符串 1.1、字符串的常用操作 1.2、格式化字符串 1.2.1、占位符格式化字符串 1.2.2、f-string格式化字符串 1.2.3、str.format( )格式化字符串 1.3、数据的验证 1.4、正则表达式 1.5.1元字符 1.5.2限定符 1.5.3其他字符 1.5.4re模块 1、字符串 1.1、字符…

如何安全的申请SSL证书

随着数字化时代的快速发展&#xff0c;互联网政务应用已成为政府服务民众、提升治理效能的重要途径。在这个网络日益复杂的时代&#xff0c;政务网站的安全问题显得尤为重要。2024年&#xff0c;国家出台并从2024年7月1日开始实施执行《互联网政务应用安全管理规定》&#xff0…

系统移植(一)u-boot相关命令

文章目录 一、概念&#xff08;一&#xff09;GNU相关命令的扩展(二进制工具集)&#xff08;二&#xff09;1. ld命令&#xff1a;将.o文件链接生成.elf格式文件2. objcopy命令&#xff1a;格式化拷贝命令&#xff0c;将.elf格式文件格式化拷贝生成.bin文件3. objdump命令&…

idea中项目目录,文件显示不全问题

问题&#xff1a;idea中项目目录显示不全问题 解决办法1&#xff1a; 删除目录中的.idea文件 用idea重新打开文件就行了 办法2&#xff1a;手动导入为maven项目 1. 2. 3. 4.选择要导入的项目&#xff0c;导入为maven

vue3前端开发-小兔鲜项目-登录组件的开发表单验证

vue3前端开发-小兔鲜项目-登录组件的开发表单验证&#xff01;现在开始写登录页面的内容。首先这一次完成基础的首页按钮点击跳转&#xff0c;以及初始化一些简单的表单的输入验证。后期还会继续完善内容。 1&#xff1a;首先还是准备好login页面的组件代码内容。 <script …