GET,POST——简述
本文主要对GET与POST基本区别进行汇总并掌握。
HTTP
HTTP(即超文本传输协议)是现代网络中最常见和常用的协议之一,设计它的目的是保证客户机和服务器之间的通信。
HTTP 的工作方式是客户端与服务器之间的 “请求-响应” 协议。
客户端可以是 Web 浏览器,服务器端可以是计算机上的某些网络应用程序。
通常情况下,由浏览器向服务器发起 HTTP 请求,服务器向浏览器返回响应。响应包含了请求的状态信息以及可能被请求的内容。- 请求方式
HTTP方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT ,
其中两种常见的 HTTP 请求就是:GET 和 POST。
GET是从服务器上获取数据,POST则是向指定的资源提交要被处理的数据
3.格式
请求报文的格式:
<request line>
<headers>
<blank line>
<request-body>
GET请求数据按照查询字符串(名称/值对)方式,放置在HTTP请求协议头(headers)中,也就是URL之后;
而POST提交的数据则放在实体的主体(request-body)中。
缓存,书签,历史记录,默认method
4.1 缓存: GET会被缓存,POST不能。
4.2 书签: GET可收藏为书签,POST不可收藏为书签
4.3 历史记录: GET请求的URL,参数会被浏览器保留在历史中,POST参数不会。
4.4 默认请求:在from提交的时候,如果不指定Method,则默认为get请求。响应速度
GET请求是可以被客户端缓存的。会比POST高效。
AJAX环境中GET响应快速,POST需要先发送HTTP头部(headers) 再发送报文实体的主体(request-body)中的数据。- 类型限制
6.1 GET限制数据集的值必须为ASCII字符;
GET提交的数据将会附加在url之后,以?分开与url分开。
1.以 ? 来分隔URL和数据;
2.以& 来分隔参数;
3.如果数据是英文或数字,原样发送;
4.如果数据是中文或其它字符,则进行BASE64编码
5.GET将数据的按照variable=value的形式,添加到URL后面;
如:http://www.abc.com/?username=yt&id=123
6.2 POST没有限制,允许二进制数据。
POST是将数据放在请求的数据体(request-body)中,按照查询字符串(名称/值对)相对应的方式,传递到所指向URL;
- 大小限制
7.1.GET方式提交的数据最多只能是1024字节,POST支持较大数据传输
7.2HTTP协议对GET和POST都没有对长度的限制
RFC 2616 中明确对 uri 的长度并没有限制。
不过虽然在RFC中并没有对uri的长度进行限制,但是各大浏览器厂家实现上限制了URL的长度。
IE对URL长度的限制是2083字节(2K+35)
而对于URL长度上的限制,有两方面的原因造成 ( 安全考虑 ):
浏览器:据说早期的浏览器会对URL长度做限制。IE对URL长度会限制在2083个字符内,Chrome会崩溃。
服务器:URL长了,对服务器处理也是一种负担。
原本一个会话就没有多少数据,现在如果有人恶意地构造几个几M大小的URL,
并不停地访问你的服务器。服务器的最大并发数显然会下降。
另一种攻击方式是:把告诉服务器Content-Length是一个很大的数,
然后只给服务器发一点儿数据,嘿嘿,服务器你就傻等着去吧。
哪怕你有超时设置,这种故意的次次访问超时也能让服务器吃不了兜着走。
有鉴于此,多数服务器出于安全啦、稳定啦方面的考虑,会给URL长度加限制。
但是这个限制是针对所有HTTP请求的,与GET、POST没有关系。
- 实际中 — POST比GET「相对安全」
GET所发送的数据是 URL 的一部分,
有时候会直接反应在浏览器的地址栏,
现在的浏览器大多会记住曾经输入过的URL(在发送密码或敏感信息时绝不要使用 GET !)。
试想如果你曾经在别人电脑上填过一个很私密的表单,那么你的这份记录很可能被连没什么电脑常识的人都一览无遗。
但是被抓包之后的POST请求和GET请求是一样裸露的,所以这里是相对的。
- 语义上 — GET比POST「相对安全」
说 POST 比 GET 安全 也不完全对的。
根据HTTP规范,POST表示可能修改变服务器上的资源的请求。
在语义上(restful视角):
GET的是获取指定URL上的资源,是读操作。
重要的一点是不论对某个资源GET多少次,它的状态是不会改变的,
在这个意义上,我们说GET是安全的(不是被密码学或者数据保护意义上的安全)。
因为GET是安全的,所以GET返回的内容可以被浏览器,Cache服务器缓存起来。
POST的语义是修改变服务器上的资源的请求,所以是不安全的,
每次提交的POST,代码都会认为这个操作会修改资源的状态,
于是,浏览器在你按下F5的时候会跳出确认框,缓存服务器不会缓存POST请求返回内容。
GET,POST——简述的更多相关文章
- 简述 OAuth 2.0 的运作流程
本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- Android网络定位服务定制简述
Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- 简述ASP.NET MVC原理
1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...
- Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...
- 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...
- Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)
前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...
- iOS开发路线简述
1 iOS开发环境1.1 开发环境标准的配置是MacOSX+Xcode.MacOSX的话首选用苹果电脑,Macmini最便宜只要4000多就好了然后自己配一个显示器,MacBookPro 也可以,不推 ...
随机推荐
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
- SharpZipLib要支持unicode的文件名称
可以参考以下例子 ZipEntry entry = new ZipEntry(file); entry.IsUnicodeText = true; 这个方法找了很久,之前用其他帖子说的ZipConst ...
- 可持久化Trie & 可持久化平衡树 专题练习
[xsy1629]可持久化序列 - 可持久化平衡树 http://www.cnblogs.com/Sdchr/p/6258827.html [bzoj4260]REBXOR - Trie 事实上只是一 ...
- easyui中对于dialog页面传值的接收
dialog的功能是将B页面嵌入至A页面,这样,A页面作为B页面的父容器,所有的元素均可以被B页面访问 那么问题来了:我怎么获取B页面的链接参数呢? 其实很简单,只要找到B页面的存放容器即可: 代码如 ...
- php Composer 报ssl证书错误
CA证书下载地址:http://curl.haxx.se/docs/caextract.html 修改php.ini文件 openssl.cafile= D:/wamp/php/verify/cace ...
- 【待整理】PS切图基础教程
http://www.w3cfuns.com/article-442-1-1.html http://www.w3cfuns.com/article-443-1-1.html 其他专题研究: floa ...
- Objective-C 中 NULL、nil、Nil、NSNull 的定义及不同
本文由我们团队的 康祖彬 童鞋撰写,这是他的个人主页:https://kangzubin.cn. 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居 ...
- java操作字符串,重点是记录一次使用replaceAll对字符串的操作
符串常用操作(String类) 字符串查找 String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法. 1.indexOf(String s) 该方法用于返回参数字符串s在 ...
- 为什么html5用的jQuery Mobile在手机浏览器/微信中打开字体很小
头部加入 <header> <metaname="viewport"content="width=device-width, initial-scale ...
- 语句--分支语句if case
语句是指程序命令,都是按照顺序执行的.语句在程序中的执行顺序称为“控制流”或者“执行流”.根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同. 语句可以嵌套,可以是以分号结尾的单行 ...