博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP协议与HTML表单(初探GET与POST的区别)
阅读量:5268 次
发布时间:2019-06-14

本文共 2280 字,大约阅读时间需要 7 分钟。

  今天刚学(xiao)了一把GET与POST,在此做个总结,与大家分享。

  一.从原理上讲:

  1.根据HTTP规范,GET用于信息获取,而且是安全且幂等的。

  (1).所谓安全的意味着该操作用于获取信息而非修改信息,不会影响资源的状态。

  (2).幂等的意味着对同一URL的多个请求应该返回同样的结果。但在实际应用中,以上2条规定并没有这么严格。引用别人文章的例子:比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。

  2.根据HTTP规范,POST表示可能改变服务器上的资源的请求。还是新闻的例子:读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源已经被修改了。

 

  二.GET和POST的区别:

  1.GET的数据会附在URL之后,就是把数据放置在HTTP协议头中。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII,另外GET请求的Content-Type默认是用application/x-www-form-urlencoded方式,无需自行设置。

    GET /hello/checkUser.html?username=yyy&age=zzz&verify=%E4%BD%A0%E5%A5%BD

    HTTP/1.1
    Referer: http://localhost:8000/hello/index.html
    Accept: **
    Accept-Language: zh-cn
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    Host: localhost:8000
    Content-Length: 20
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: JSESSIONID=BBBA54D519F7A320A54211F0107F5EA6

  2.而POST把提交的数据则放置在HTTP包的包体中,在method="POST"的情况下,设置enctype才起作用。 设置enctype标签属性后,在HTTP请求的头部(headers)信息中会多出一行Content-Type信息,并且request-body部分将会以Content-Type指定的MIME进行编码,或者在javascript中设置请求的编码方式也可以。这些操作都是由客户端浏览器自动完成的:如下(application/x-www-form-urlencoded在发送前编码所有字符(默认))

    <form action="form_action.asp" enctype="application/x-www-form-urlencoded">

      <p>First name: <input type="text" name="fname" /></p>
      <p>Last name: <input type="text" name="lname" /></p>
      <input type="submit" value="Submit" />
    </form>

 

  三.对网上传言的解释

  传言1:GET方式对长度有限制;POST方式对长度没限制。

  回答:长度限制之说一方面是HTTP客户端(如IE限定URL长度为2083字节,opera 是4050, Netscape 是8192)的限制;另一方面服务器的实现也加入了限制(如果URL长度过长,HTTP服务器会报414错误)。但HTTP协议及URL官方说明均对长度限制则没有规定。

  传言2:GET是从服务器上获取数据;POST是向服务器传送数据。

   回答:GET方式就没有向服务器传送数据?那么URL中的?子句送的是什么?不论是GET还是POST,都可以向服务器传送数据,只不过传送数据的位置不同;不论是GET还是POST,都要从服务器上获取数据,否则IE浏览器拿什么东西给我们看呢?关键的问题是 GET的主要任务是获得数据,但在获得数据前也可以向服务器提交一些数据;  POST的主要任务是提交数据,但在提交数据之后服务器也会向用户端返回一些显示用的数据。

  传言3:GET不安全,用户能从地址栏上看到传送的数据;POST安全,用户不能从地址栏上看到传送的数据。

  回答:POST方式看不到传送的数据是因为IE浏览器做了限制。如果你通过第三方工具看到了POST方式传送的数据,你还能说POST方式是安全的吗?理论上说GET和POST方式都不安全,要不就用不着研究HTTPS了。

 

  所以综上几点,总结成下表:

 

操作方式

数据位置

明文密文

数据安全

长度限制

应用场景

GET

HTTP包头

明文

不安全

看具体浏览器

偏向查询数据

POST

HTTP正文

可明可密

相对GET安全

看具体浏览器

 

偏向修改数据

 

 

 

 

  

转载于:https://www.cnblogs.com/NewLZJ/p/4996023.html

你可能感兴趣的文章
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>
electron入门心得
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
我的Hook学习笔记
查看>>
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>