关于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方式 |
|
提交的数据量有限制 (因为只能存放到请求行之后) |
数据量大 (因为存放在实体内容里面) |
|
不安全 (在浏览器地址栏能看到数据) |
相对安全 (实体内容中的数据仍没有加密,可借助工具查看) |
随机推荐
- Swift-Swift中的全局变量和函数的创建
解决办法: 写OC的时候常常会用到各种宏定义,但是Swift中貌似没有宏的这种定义,更多的是通过全局常量或者全局函数来实现这一效果.我们只需要建立一个文件(假设为Macro.swift),把想用的定义 ...
- activemq 实战三 了解连接器的URI-Understanding connector URIs
Before discussing the details of connectors and their role in the overall ActiveMQ architecture, it’ ...
- 使用springBoot进行快速开发
springBoot项目是spring的一个子项目,使用约定由于配置的思想省去了以往在开发过程中许多的配置工作(其实使用springBoot并不是零配置,只是使用了注解完全省去了XML文件的配置),达 ...
- iOS 如何在视图中添加一个用xib创建的view
NSArray *nib = [[NSBundle mainBundle]loadNibNamed:[pages objectAtIndex:] owner:self options:nil]; // ...
- java如何随机生成定长的字符串
小数,字符串.时间等示例代码 String base = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 public c ...
- SqlServer复杂存储过程
SqlServer复杂存储过程 CREATE PROCEDURE FETCH_GOOUT_INFO AS BEGIN WITH l as(SELECT A.ZJHM, O.KSQR, O.JSRQ, ...
- thinkphp --- 写入日志
在开发过程中,对于一些参数,不好直接输入或者打印调试,特别是在微信开发过程中,这个时候,通过日志来查看信息就显得格外重要. 下面是在TP3.2.3框架中,写入日志的方法: public functio ...
- Sublime Text 2/3 安装Emmet(Zencoding)以及常见使用,一种快速编写HTML/CSS代码的方法
原文链接http://blog.csdn.net/shirley254/article/details/52336744
- HDU 4238 You Are the One
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- 洛谷P3809 后缀排序【后缀数组】【模板】
题目背景 这是一道模板题. 题目描述 读入一个长度为 nn 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编 ...