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

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 xxxparam1=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.xdnf.cn/news/1488252.html

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

相关文章

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…

【iOS】——Block底层实现和捕获机制

Block的实质 Block的定义是带有自动变量的匿名函数&#xff0c;下面从源码的角度探究下Block究竟是什么 下面是一个Block的简单实现&#xff1a; int main(int argc, const char * argv[]) {autoreleasepool {// insert code here...void (^blk)(void) ^{printf("Bloc…

Linux 14:网络编程2

1. 应用层 我们程序员写的一个个解决我们实际问题&#xff0c;满足我们日常需求的网络程序&#xff0c;都是在应用层。 1-1. 协议 协议是一种 "约定"。socket api的接口&#xff0c;在读写数据时&#xff0c;都是按 "字符串" 的方式来发送接收的&#xff…

【系统架构设计师】十八、信息系统架构设计理论与实践②

目录 四、企业信息系统的总体框架 4.1 战略系统 4.2 业务系统 4.3 应用系统 4.4 企业信息基础设施 4.5 业务流程重组BPR 4.6 业务流程管理BPM 五、信息系统架构设计方法 5.1 行业标准的体系架构框架 5.2 架构开发方法 5.3 信息化总体架构方法 5.4 信息化建设生命周…

AnyMP4 Data Recovery for Mac v1.5.8免激活版:高效数据恢复新选择

AnyMP4 Data Recovery for Mac是一款专为Mac用户设计的高效数据恢复软件&#xff0c;凭借其强大的功能和简洁的操作界面&#xff0c;为用户提供了快速、安全的数据恢复体验。 该软件支持恢复多种文件类型&#xff0c;包括照片、视频、音频、文档等&#xff0c;无论是常见的图片…

旅游城市晚高峰延长2小时见证消费新活力 啤酒节滴滴打车需求上涨超300%

进入盛夏&#xff0c;各地夜生活“花式上新”&#xff0c;夜间出行链接夜食、夜游、夜购等多元消费业态&#xff0c;激发经济活力。滴滴出行数据显示&#xff0c;7月以来&#xff0c;哈尔滨、珠海、贵阳、西安等多个城市打车晚高峰延长2小时以上。 22点后打车需求上涨最高 “夜…

Java连接Redis和SpringBoot整合Redis

1. Java连接Redis 思考&#xff1a;我们之前操作redis都是通过命令行的客户端来操作。在开发时都是通过java项目操作redis java提高连接redis的方式为jedis。我们需要遵循jedis协议。 java提供连接mysql的方式为jdbc。 1.1 单机模式 引入依赖 <!--引入java连接redis的驱动…

获取手机当前信号强度(dbm/asu值)解决 getGsmSignalStrength()总是返回99问题

能看到这篇文章说明网上哪些获取 &#xff08;dbm/asu值&#xff09;不适合你&#xff0c;不是他们的代码不正确&#xff0c;而是不符合你的情况 比如安卓6获取android手机信号强度 可以看这篇文章 https://blog.csdn.net/sinat_31057219/article/details/81134030 当然如果你…

使用Xshell进行ymodem传输时的一个小trick(用于IAP编程中的bootloader程序)

文章目录 前言三种 MCU 烧写程序的方式MCU 实现 IAP 的通用程序&#xff08;以 stm32 为例&#xff09;stm32 启动流程IAP 分区关键代码 Ymodem 协议通信信号通信流程数据帧格式 用Xshell 进行Ymodem协议传输数据调试方法一点心得 前言 这一部分主要是介绍一些背景&#xff0c…

怎样在 Nginx 中配置基于请求客户端 Wi-Fi 连接状态的访问控制?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 怎样在 Nginx 中配置基于请求客户端 Wi-Fi 连接状态的访问控制一、理解请求客户端 Wi-Fi 连接状态二、Nginx 中的访问控制基础知识三、获取客户端 Wi-Fi 连接状态…

使用html2canvas制作一个截图工具

0 效果 1 下载html2canvas npm install html2canvas --save 2 创建ClipScreen.js import html2canvas from html2canvas; // 样式 const cssText {box: overflow:hidden;position:fixed;left:0;top:0;right:0;bottom:0;background-color:rgba(255,255,255,0.9);z-index: 10…

vue3前端开发-小兔鲜项目-路由拦截器增加token的携带

vue3前端开发-小兔鲜项目-路由拦截器增加token的携带&#xff01;实际开发中&#xff0c;很多业务接口的请求&#xff0c;都要求必须是登录状态&#xff01;为此&#xff0c;这个token信息就会频繁的被加入到了请求头部信息中。request请求头内既然需要频繁的携带这个token.我们…

如何为 DigitalOcean 上的托管数据库收集可观测指标

DigitalOcean 在 2024 年 5 月开始支持在托管数据库&#xff08;PostgreSQL、MySQL、Redis和Kafka&#xff09;中收集可观测指标。我们将在本偏内容中&#xff0c;告诉大家如何使用部署在 DigitalOcean App Platform 上的网络应用程序&#xff0c;为 DigitalOcean 上的 Postgre…

Git的应用及码云的应用

Git 准备一台主机&#xff0c;安装应用git [rootgit ~]# yum -y install git [rootgit ~]# rpm -ql git 查看版本信息 [rootgit ~]# git [rootgit ~]# mkdir /yy000 创建目录 使用git指令&#xff0c;一定要cd到初始化之后的目录 cd到yy000目录中使用init指令促使初始化 [ro…

uniapp开发精选短视频视频小程序实战笔记20240725,实现顶部轮播图和热门短剧

创建项目 创建项目,叫video_app。 在pages.json里面修改一下标题: 新建search搜索页面和me我的页面。 此时界面预览效果如下: 引入静态资源 主要是static里面的内容,全部复制过来。 配置底部导航栏 pages.json,放到顶层,和全部样式同级: "tabBar&quo…

ChatGPT的原理和成本

ChatGPT就是人机交互的一个底层系统&#xff0c;某种程度上可以类比于操作系统。在这个操作系统上&#xff0c;人与AI之间的交互用的是人的语言&#xff0c;不再是冷冰冰的机器语言&#xff0c;或者高级机器语言&#xff0c;当然&#xff0c;在未来的十来年内&#xff0c;机器语…

Origin多个图层的层叠顺序调整

如果你有多个图层在一个图表中&#xff0c;可以在右上方的对象管理器中调整它们之间的层级关系—— 在对象管理器中处于第一位的图层&#xff0c;是层级最低的图层&#xff0c;即处于图表的最次优先显示&#xff1b;反之&#xff0c;处于最后一位的图层&#xff0c;是层级最高…

LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】

【图论】No. 0200 岛屿数量 【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

C语言 | Leetcode C语言题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; // 判断是否为完全平方数 bool isPerfectSquare(int x) {int y sqrt(x);return y * y x; }// 判断是否能表示为 4^k*(8m7) bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7; }int numSquares(int n) {if (isPerfect…

本宫欢喜新荣记香港:米其林美学月子餐鉴赏和疗愈月子护理之旅

作为大湾区新晋“顶流”母婴护理中心和待产月子大健康解决方案提供者&#xff0c;已具备16年母婴月子专业护理经验的本宫欢喜&#xff0c;近两年备受国内和亚太备孕、待产妈妈群体和家庭珍爱。今年7月下旬&#xff0c;本宫欢喜大湾区百万影响力KOL妈妈系列体验之旅中&#xff0…