关于GET POST
先说相同点,只有了解了相同点之后才能理解为什么会发生混淆。两者都能向服务器发送数据,提交的“内容”[注1]的格式相同,都是var_1=value_1&var_2=value_2&....get 和 post 区别如字面,一个是get(获取),一个是post(发送)。get用来告诉服务器需要获取哪些内容(uri+query),向静态页面(uri)请求则直接返回文件内容给浏览器,向一个动态页面请求时可以提供查询参数(query)以获得相应内容。post用来向服务器提交内容,主要是为了提交,而不是为了请求内容,就是说post的初衷并不要求服务器返回内容[注2],只是提交内容让服务器处理(主要是存储或者处理之后再存储)。
get的长度限制在2048字节(由浏览器和服务器限制的,这是目前IE的数据,曾经是1024字节),很大程度上限制了get用来传递“存储数据”的数据的能力,所以还是老老实实用来做检索吧;post则无此限制(只是HTTP协议规范没有进行大小限制,但受限于服务器的处理能力),因此对于大的数据(一般来说需要存储的数据可能会比较大,比2048字节大)的传递有天然的优势,谁让它是 nature born post 呢
get提交的数据是放在url里,目的是灵活的向服务其提交检索请求,可以在地址栏随时修改数据以变更需要获取的内容,比如直接修改分页的编号就跳到另外一个分页了(当然也可能是 404)。post提交的数据放在http请求的正文里,目的在于提交数据并用于服务器端的存储,而不允许用户过多的更改相应数据(主要是相对于在url 修改要麻烦很多,url的修改只要点击地址栏输入字符就可以了),除非是专门跑来编辑数据的。
HTTP协议与get/post请求方式
1、HTTP
hypertext transfer protocol 超文本传输控制协议。
定义了浏览器与web服务器之间数据传输的方式与数据格式(W3C定义)。
2、数据传输的方式
(1)浏览器请求建立连接。
(2)浏览器向服务器发送请求。
(3)服务器处理请求
(4)服务器发送响应,然后立即关闭连接。
注:如果浏览器想向服务器再发送一个请求,需要重新请求建立连接。
3、数据格式
(1)请求数据包
1)请求行
请求方式(get/post) 请求资源的路径 HTTP协议版本(1.0/1.1)
2)若干消息头
浏览器与服务器之间通讯的一些约定。
比如,浏览器可以告诉服务器浏览器名称、版本等信息。
3)实体内容
如果是post方式,请求数据会存放到实体内容里面。
如果是get方式,会放到请求行中的请求资源路径之后。
(2)响应数据包
1)状态行
协议版本号状态码状态码的描述
状态码:
200 正常
300 请求的资源可在多处得到
400 错误请求
401 未授权
403 禁止访问
404 找不到资源
500 系统内部错误
…
2)若干消息头
比如服务器可以向浏览器发送cookie。
3)实体内容
服务器处理完之后的结果,一般要求浏览器显示的数据。
4、get/post请求方式
(1)get方式:
1)表单默认提交的方式
2)直接在浏览器地址栏输入地址
3)通过链接访问某个地址
(2)get方式的特点:
1)在地址栏会显示请求数据;
2)请求数据会放到请求资源路径后面;
3)get方式一般用于向服务器获取资源;
4)浏览器有可能缓存get方式访问过的数据。
(3)post方式:
设置表单method="post"。
(4)post方式的特点:
1)数据不会在地址栏显示;
2)数据会存放到实体内容里;
3)post方式一般用于向服务器提交数据;
(5)优缺点比较
|
get方式 |
post方式 |
|
提交的数据量有限制 (因为只能存放到请求行之后) |
数据量大 (因为存放在实体内容里面) |
|
不安全 (在浏览器地址栏能看到数据) |
相对安全 (实体内容中的数据仍没有加密,可借助工具查看) |
随机推荐
- kubectl get 输出格式
常见的输出格式有: * custom-columns=<spec> # 根据自定义列名进行输出,逗号分隔 * custom-columns-file=<filename> # ...
- c++中new/operator new/placement new
1. new/delete c++中的new(和对应的delete)是对堆内存进行申请和释放,且两个都不能被重载. 2. operator new/operator delete c++中如果想要实现 ...
- Android Framewrork资源类型有哪些?
1. Google Framework res frameworks/base/core/res/res/values <public type="attr" name=&q ...
- Mac OS X运行程序出现bad interpreter: operation not permitted的解决方案
最近想在我的mac笔记本上安装gvim,从官网上下载了程序后竟然非常诡异的双击无法打开,命令行执行时系统报错: /bin/sh bad interpreter operation not permit ...
- C#6.0语法特性
1.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Na ...
- 查看、关闭登录到linux的终端
基本概念: tty(终端设备的统称):tty一词源于Teletypes,原来指的是电传打字机,是通过串行线用打印机键盘阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适.终端是 ...
- jenkins前端构建
nginx 安装yum install nginx //输入下载 or yum install epel-release //如果上一步安装失败 yum install nginx //再次下载 配置 ...
- Yii 后台防止表单提交
第一种方法: 在AR类中设置rules()方法里面设置该属性为unique属性 Class Item extends \yii\db\ActiveRecord{ public function rul ...
- Golang学习 - builtin 包
Go builtin包提供了go预先声明的函数.变量等的文档.这些函数变量等的实现其实并不是在builtin包里,只是为了方便文档组织. 这些内置的变量.函数.类型无需引入包即可使用. 默认提供的有: ...
- Python IDLE 安装与使用教程(调试、下载)
原文:http://www.jb51.net/softjc/142580.html ---------------------------------------------------------- ...