首页 > 其他分享 >get请求和post请求的区别

get请求和post请求的区别

时间:2023-10-05 15:55:25浏览次数:35  
标签:HTTP 请求 GET get 浏览器 服务器 POST post

一.GET和POST是什么?

HTTP协议中的两种发送请求的方法,本质上都是在进行TCP连接.

二. GET请求和POST请求的区别是什么?

GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。

GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息。

GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制。

GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。

GET请求进行url编码(百分号编码),POST请求支持多种编码方式。

GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。

GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。

GET请求在浏览器中可以被主动cache(缓存),而POST请求不会,可以手动设置。

三. 深入

1、GET和POST有一个重大的区别:

简单地说

GET产生一个TCP数据包。

POST产生两个TCP数据包。

复杂的说

对于GET请求,浏览器会把http header和data一起发送出去,服务器响应200,请求成功。

对于POST请求,浏览器先发送header,服务器会响应100(已经收到请求的第一部分,正在等待其余部分),浏览器再次发送data,服务器返回200,请求成功。

2、既然POST请求需要两步,那么时间上的消耗会不会比GET请求更多?不会。

GET请求和POST请求都有自己的语义,不能随便混用。

在网络环境好的情况下,发送一次包的时间和发送两次包的时间差可以忽略,在网络环境差的情况下,发送两次包的TCP在验证数据的完整性上,有非常大的优势。

并不是所有的浏览器都会在POST请求中发送两次包。比如:火狐。

1、HTTP 只有POST和GET 两种命令模式;
2、 POST 是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.POST的信息作为HTTP 请求的内容,而GET是在HTTP 头部传输的;
3、POST与GET在HTTP 中传送的方式不同,GET的参数是在HTTP 的头部传送的,而Post的数据则是在HTTP 请求的内容里传送;
4、POST传输数据时,不需要在URL中显示出来,而GET方法要在URL中显示;
5、 GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M;

GET方法可以用来传输一些可以公开的参数信息,解析也比较方便,如百度的搜索的关键词,而POST方法可以用来提交一个用户的敏感信息(如果不使用HTTPS加密,报文正文仍旧是明文,容易被人截获读取

方法               描述
GET                请求指定的页面内容,并返回实体主体
HEAD             类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST            向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据包含在请求体中。POST请求可能会导致新的资源的建立或者已有资源的修改。
PUT               从客户端向服务器传送的数据取代指定的文档的内容
DELETE        请求服务器删除指定的页面
CONNECT     HTTP1.1协议中预留给能够将连接方式改为管道方式的代理服务器
OPTIONS       允许客户端查看服务器的性能
TRACE           回显服务器收到的请求,主要用于测试或诊断

HTTP工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求行(请求的方法、URL、协议的版本、)请求头部、空行和请求数据。 服务器以一个状态行作为响应,响应的内容包含状态行(协议的版本,成功或者错误代码,服务器信息),响应头部、空行和响应数据。

HTTP请求/响应的步骤: 客户端连接到Web服务器—>发送Http请求(一个请求报文由请求行、请求头部、空行和请求数据4部分组成。)—>服务器接受请求并返回HTTP响应(一个响应由状态行、响应头部、空行和响应数据4部分组成。)—>释放TCP连接—>客户端浏览器解析HTML内容

标签:HTTP,请求,GET,get,浏览器,服务器,POST,post
From: https://www.cnblogs.com/qizhiwei/p/17743446.html

相关文章

  • asp.net mvc Core 网页错误提示:An unhandled exception occurred while processing th
    网页错误提示:Anunhandledexceptionoccurredwhileprocessingtherequest.InvalidOperationException:Theentitytype'IdentityUserLogin<string>'requiresaprimarykeytobedefined.Ifyouintendedtouseakeylessentitytype,call'Has......
  • 运维 | 如何解决 centos7.x 上 curl、wget 等工具命令失效问题
    运维|如何解决centos7.x上curl、wget等工具命令失效问题问题描述系统在初始化的时候已经安装了curl工具包,但是某一天突然在终端使用curl命令时发现提示-bash:curl:commandnotfound以为系统中并没有安装curl工具,于是输入命令重新安装yum-yinstallcurl#......
  • kubelet.go 2466 Error getting node not found
    kubeadm初始化kubernetes集群报错,kubelet服务提示:kubelet.go:2466]"Errorgettingnode"err="node\"k8s3-master\"notfound处理记录。  0.ENV kubernetes1.22.x/1.23.x/1.24.x(不限于所列版本)CentOS7.x/Ubuntu22.04(不限于所列版本)  1.问题现象 kube......
  • cmake之link_libraries 和 target_link_libraries区别
    在cmake语法中,link_libraries和target_link_libraries是很重要的两个链接库的方式,虽然写法上很相似,但是功能上有很大区别:link_libraries用来链接静态库,target_link_libraries用来链接导入库,即按照头文件+.lib(动态库导入库)+.dll(动态库)方式隐式调用动态库的.lib导入......
  • Ajax 请求统一响应工具类
    packagecom.binge.myblogsystem.util;importlombok.Data;importjava.io.Serializable;@DatapublicclassResultVo<T>implementsSerializable{privatestaticfinallongserialVersionUID=1L;//状态码privateintcode;//状态码描述......
  • QFluentWidgets: 基于 C++ Qt 的 Fluent Design 组件库
    简介QFluentWidgets是一个基于Qt的FluentDesigner组件库,内置超过150个开箱即用的FluentDesigner组件,支持亮暗主题无缝切换和自定义主题色。搭配所见即所得的FluentDesigner软件,只需拖拖拽拽,不用编写一行QSS,就能快速搭建现代化软件界面。官网地址:https://qfluentw......
  • 请求、响应对象
    请求处理-request对象在视图函数中,flask并不需要使用一个参数来接收请求对象,这点和django的视图函数是不一样的。flask如果要使用请求对象,直接导入从fromflaskimportrequest变量就可以了request是一个LocalPorxy实例,每个请求、不同的视图函数都是相互隔离的。与django的对......
  • flask请求钩子(就是django的中间件)
    flask中的请求钩子就是域django的中间件类似,作用都是用于在请求前、后、响应前、后进行一些hook操作。请求钩子装饰器@app.before_request#请求前会调用,一般可以用来做权限校验。@app.brefore_first_request#只在第一次请求的时候调用,可以做一些init初始化的动作。......
  • 10.3 请求
    packagecom.example.springboottest;importorg.apache.catalina.User;importorg.springframework.format.annotation.DateTimeFormat;importorg.springframework.web.bind.annotation.*;importpojo.user;importjava.lang.reflect.Array;importjava.time.LocalD......
  • fetch函数发送HTTP请求
    Fetch函数是一个现代的JavaScriptAPI,用于发送HTTP请求并处理响应。它提供了一种简单和灵活的方式来进行网络通信。以下是发送HTTP请求的基本用法:fetch(url,options).then(response=>{//处理响应if(!response.ok){thrownewError('网络请求失败');......