1. HTTP
    HTTP(即超文本传输协议)是现代网络中最常见和常用的协议之一,设计它的目的是保证客户机和服务器之间的通信。
    HTTP 的工作方式是客户端与服务器之间的 “请求-响应” 协议。
    客户端可以是 Web 浏览器,服务器端可以是计算机上的某些网络应用程序。
    通常情况下,由浏览器向服务器发起 HTTP 请求,服务器向浏览器返回响应。响应包含了请求的状态信息以及可能被请求的内容。

  2. 请求方式
    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)中。

  1. 缓存,书签,历史记录,默认method
    4.1 缓存: GET会被缓存,POST不能。
    4.2 书签: GET可收藏为书签,POST不可收藏为书签
    4.3 历史记录: GET请求的URL,参数会被浏览器保留在历史中,POST参数不会。
    4.4 默认请求:在from提交的时候,如果不指定Method,则默认为get请求。

  2. 响应速度
    GET请求是可以被客户端缓存的。会比POST高效。
    AJAX环境中GET响应快速,POST需要先发送HTTP头部(headers) 再发送报文实体的主体(request-body)中的数据。

  3. 类型限制
    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;

  1. 大小限制
    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没有关系。

  1. 实际中 — POST比GET「相对安全」
    GET所发送的数据是 URL 的一部分,
    有时候会直接反应在浏览器的地址栏,
    现在的浏览器大多会记住曾经输入过的URL(在发送密码或敏感信息时绝不要使用 GET !)。
    试想如果你曾经在别人电脑上填过一个很私密的表单,那么你的这份记录很可能被连没什么电脑常识的人都一览无遗。

但是被抓包之后的POST请求和GET请求是一样裸露的,所以这里是相对的。

  1. 语义上 — GET比POST「相对安全」
    说 POST 比 GET 安全 也不完全对的。
    根据HTTP规范,POST表示可能修改变服务器上的资源的请求。
    在语义上(restful视角):
    GET的是获取指定URL上的资源,是读操作。
    重要的一点是不论对某个资源GET多少次,它的状态是不会改变的,
    在这个意义上,我们说GET是安全的(不是被密码学或者数据保护意义上的安全)。
    因为GET是安全的,所以GET返回的内容可以被浏览器,Cache服务器缓存起来。

POST的语义是修改变服务器上的资源的请求,所以是不安全的,
每次提交的POST,代码都会认为这个操作会修改资源的状态,
于是,浏览器在你按下F5的时候会跳出确认框,缓存服务器不会缓存POST请求返回内容。

GET,POST的更多相关文章

  1. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  2. MPlayer

    名称   mplayer − 电影播放器 mencoder − 电影编解码器 概要   mplayer [选项] [文件|URL|播放列表|−] mplayer [选项] 文件1 [指定选项] [文件 ...

  3. python 爬取腾讯微博并生成词云

    本文以延参法师的腾讯微博为例进行爬取并分析 ,话不多说 直接附上源代码.其中有比较详细的注释. 需要用到的包有 BeautifulSoup WordCloud jieba # coding:utf-8 ...

  4. 面经 cisco

    1. 优先级反转问题及解决方法 (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优 ...

  5. linux驱动(续)

    网络通信 --> IO多路复用之select.poll.epoll详解 IO多路复用之select.poll.epoll详解      目前支持I/O多路复用的系统调用有 select,psel ...

  6. HttpServletRequest对象(一)

    javaweb学习总结(十)——HttpServletRequest对象(一) 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HT ...

  7. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  8. 先说IEnumerable,我们每天用的foreach你真的懂它吗?

    我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...

  9. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  10. Angular2入门系列教程3-多个组件,主从关系

    上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...

随机推荐

  1. Hibernate中cascade和inverse的作用

    Inverse和cascade是Hibernate映射中最难掌握的两个属性.两者都在对象的关联操作中发挥作用.1.明确inverse和cascade的作用inverse 决定是否把对对象中集合的改动反 ...

  2. Java 中 ConcurrentHashMap 原理分析

    一.Java并发基础 当一个对象或变量可以被多个线程共享的时候,就有可能使得程序的逻辑出现问题. 在一个对象中有一个变量i=0,有两个线程A,B都想对i加1,这个时候便有问题显现出来,关键就是对i加1 ...

  3. 为什么我获取不到这个css样式?js原生获取css样式总结

    还是自己遇到的一个坑的总结吧!与其说是坑不如说自己学艺不精,让我先哭一会!! 需求 简单就是获取一个css的height (好吧 就是一个这么简单的需求) 实践 好吧 长时间的JQ 我已经对原生无能了 ...

  4. Angular 学习笔记——ng-animate

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  5. Java 循环结构 - for, while 及 do...while

    Java 循环结构 - for, while 及 do...while 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java中有三种主要的循环结构: whi ...

  6. Android控件常见属性

    1.宽/高android:layout_width android:layout_height// 取值match_parent //匹配父控件wrap_content //自适应,根据内容 如果指定 ...

  7. ionic准备之angular基础——继承(3)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 64位windows2003 未在本地计算机上注册 microsoft.jet.oledb.4.0 提供程序

    64位windows2003系统 使用 mdb数据库时候出现如下错误. 可能用office的一些比较旧的程序时候会这样. 未在本地计算机上注册 microsoft.jet.oledb.4.0 提供程序 ...

  9. PHP面试题及答案解析(8)—PHP综合应用题

    1.写出下列服务的用途和默认端口. ftp.ssh.http.telnet.https ftp:File Transfer Protocol,文件传输协议,是应用层的协议,它基于传输层,为用户服务,它 ...

  10. 多数据源动态关联报表的制作(birt为例)

    使用Jasper或BIRT等报表工具时,常会碰到一些很规的统计,用报表工具本身或SQL都难以处理,比方与主表相关的子表分布在多个数据库中,报表要展现这些数据源动态关联的结果.集算器具有结构化强计算引擎 ...