当前位置: 首页 > news >正文

HTTP请求中POST与GET的差别

一、原理差别

一般我们在浏览器输入一个网址訪问站点都是GET请求;再FORM表单中,能够通过设置Method指定提交方式为GET或者POST提交方式,默觉得GET提交方式。

HTTP定义了与server交互的不同方法,当中最主要的四种:GET。POST,PUT,DELETE。HEAD,当中GET和HEAD被称为安全方法,由于使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在server上产生不论什么结果。

可是安全方法并非什么动作都不产生。这里的安全方法只指不会改动信息。

依据HTTP规范,POST可能会改动server上的资源的请求。比方CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的。由于再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被改动了,这些便是“不安全方法”。



二、表现形式差别

搞清楚了两者的原理差别后,我们来看一下在实际应用中的差别。

首先,我们先看一下HTTP请求的格式:

<method> <request-URL> <version>
<headers>

<entity-body>


在HTTP请求中。神秘行必须是一个请求行,包括请求方法,请求URL。报文所用HTTP版本号信息。

紧接着是一个herders小节,能够有零个或一个首部,用来说明server要使用的附加信息。在首部之后就是一个空行。最后就是报文实体的主体部分,包括一个由随意数据组成的数据块。

可是并非全部的报文都包括实体的主体部分。

GET请求实例:

GET http://weibo.com/signup/signup.php?inviteCode=2388493434
Host: weibo.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

POST请求实例:

POST /inventory-check.cgi HTTP/1.1
Host: www.joes-hardware.com
Content-Type: text/plain
Content-length: 18

item=bandsaw 2647

接下来看看两种请求方式的差别:

1、GET请求,请求的数据会附加在URL之后,以?切割URL和数据传输,多个參数用&连接。URL的编码格式採用的是ASCII编码。而不是uniclde,即是说全部的非ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。

上面的item=bandsaw就是实际的数据传输。


因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。


2、数据传输的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。可是在实际开发过程中,对于GET,特定的浏览器和server对URL的长度有限制。

因此,在使用GET请求时。数据传输会受到URL长度的限制。

对于POST,因为不是URL传值,理论上是不会受限制的,可是实际上各个server会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。


3、安全性

POST的安全性比GET的高。

这里的安全是指真正的安全。而不同于上面GET提到的安全方法中的安全,上面提到的安全不过不改动server的数据。比方。在进行登录操作,通过GET请求,username和password都会暴露再URL上。由于登录页面有可能被浏览器缓存以及其它人查看浏览器的历史记录的原因。此时的username和password就非常easy被他人拿到了。

除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击


4、HTTP中的GET,POST,SOAP协议都是在HTTP上执行的


三、HTTP响应

HTTP响应报文的格式

<version> <status> <reason-phrase>
<headers>

<entity-body>


status,状态码描写叙述了请求过程中发生的情况

reson-phrase 是数字状态码的可读版本号

常见的状态码以及含义例如以下:

200 OK server成功处理请求

301/302 Moved Permanently(重定向)请求的URL已移走。响应报文中应该包括一个Location URL。说明资源如今所处的位置

304 Not Modified(未改动) 客户的缓存资源是最新的。要client使用缓存内容

404 Not Found 未找到资源

501 Internal Server Error server遇到错误。使其无法对请求提供服务

HTTP响应演示样例

HTTP/1.1 200 OK

Content-type: text/plain
Content-length: 12

Hello World!



  
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
 

相关文章:

  • DESTOON7.0农产品B2B供应求购交易平台源码
  • Python学习笔记
  • 基于DevExpress的Winform程序安装包的制作
  • RocketMQ 基本概念
  • 学习设计接口api(转)
  • 【刘文彬】EOS技术研究:合约与数据库交互
  • Altium Designer 8.0不为人知的27个技巧
  • React-redux的原理以及使用
  • Spring MVC JSP页面加载不完全的问题
  • 工程师笔记|浅析AI平台的架构设计
  • Spark 1.0.0 横空出世 Spark on Yarn 部署(Hadoop 2.4)
  • 使用docker遇到的问题
  • 武汉区块链软件技术公司:区块链将如何优化产业链?
  • echarts简单使用
  • .NET项目中存在多个web.config文件时的加载顺序
  • “大数据应用场景”之隔壁老王(连载四)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • C++入门教程(10):for 语句
  • gops —— Go 程序诊断分析工具
  • JavaScript函数式编程(一)
  • Nacos系列:Nacos的Java SDK使用
  • SAP云平台里Global Account和Sub Account的关系
  • Shadow DOM 内部构造及如何构建独立组件
  • spring boot 整合mybatis 无法输出sql的问题
  • SQLServer之创建数据库快照
  • Vim Clutch | 面向脚踏板编程……
  • Vue学习第二天
  • Web Storage相关
  • 测试开发系类之接口自动化测试
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 普通函数和构造函数的区别
  • 强力优化Rancher k8s中国区的使用体验
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 通信类
  • 移动端 h5开发相关内容总结(三)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转载)深入super,看Python如何解决钻石继承难题
  • .NET Core 中插件式开发实现
  • .NET MVC 验证码
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET学习教程二——.net基础定义+VS常用设置
  • @Pointcut 使用
  • [<MySQL优化总结>]
  • [AIGC] Java 和 Kotlin 的区别
  • [APIO2015]巴厘岛的雕塑
  • [BeginCTF]真龙之力
  • [bzoj1901]: Zju2112 Dynamic Rankings