html接收get,java中get和post的区别
ajax中post和get请求的差异以及请求消息post和get的对比1 .参数2 .用途3 .缓存4 .安全性5 .自动化性能测试:6.GET和post对服务器的状态7.GET乘幂等
post与get的比较1 .参数
GET传递的参数只有URL后面的文本格式的查询字符串。 每个浏览器一般都有长度限制,被认为是2083。 如果有中文文字的话就更短了。 提交到服务器端的数据量很少。
开机自检采用应用/x-www-form-urlencoded的查询字符串、多格式/form-data等二进制消息格式(支持文件信息嵌入消息传输提交给服务器端的数据量很大。
2 .用途GET用于从静态资源(如html、动态数据显示)列表数据、详细数据等)和服务器端检索数据。
开机自检用于将数据发送到服务器,包括添加和删除数据、提交表单、创建新用户和修改用户。
3 .缓存get时,缺省情况下可以将上一个请求数据作为缓存结果复用并返回。 此时,将完整的URL作为缓存数据的KEY。 因此,为了强制每个请求都是新数据,可以在URL后添加随机参数Math.random、时间戳new Date ().getTime或版本号。
例如abc.com? a=1rnd=0.123987之类的。 这也是目前一些静态资源具有长版本号的原因。 jquery-min.js? 当页面访问jquery-min.js时,v=13877770是什么? 如果v=13877771,则浏览器必然向服务器请求此资源。 jQuery.ajax方法。 如果cache=false,则将“_={timestamp}”添加到GET请求参数中以禁用缓存。
开机自检通常不受这些缓存因素的影响。
4 .安全默认nginx访问日志自动记录获取或开机自检的完整URL,包括其中的参数。
对于开机自检,不会记录请求的消息。 这些对于敏感数据来说,开机自检更安全。
5 .自动化性能测试:基于以上nginx日志,使用grep GET日期、awk格式和sort -u沉积物提取到某一天为止的所有GET请求URL,然后使用程序模拟登录每个请求是否正确,响应时间是多少等。
但是,对于POST请求,由于不知道消息,所以不能这样简单地处理。 可以通过nginx-lua获取消息并输出到log。 这样格式化很麻烦,但也是一种方法。
6.GET和POST对服务器的状态根据http的设计,大家看到get时,都期待这个请求对服务器没有修改,看到POST时,都认为这是对服务器发生了修改。
7.GET幂等,POST幂等1 .根据RFC标准,PUT、DELETE和安全方法为幂等。 尽管是规格,但无法确保服务端的实现是否为乘方等。
2 .引入幂等主要是为了处理同一请求重复发送的情况。 例如,如果在请求响应之前连接丢失,则可以放心地重新发送请求(例如,如果方法为幂)。 这也是浏览器在返回/刷新时遇到开机自检时向用户提示的原因。 开机自检语义不是幂等,重复请求可能会产生意想不到的结果。
3 .比如微博,GET的意思用于“在我的Timeline上看到最新的20条微博”,POST的意思用于“微博、评论、点赞”。
请求消息1 .请求消息构成一个HTTP请求消息,由请求行(请求行)、请求标头)、空行和请求数据四部分组成。
大致结构如下。
<; 请求行& gt; //请求行<; 硬件& gt; //第一行<; 空白线& gt; //空行<; 请求主体///请求体的简单示例:
POST /user HTTP/1.1 //请求行host : www.user.com content-type : application/x-www-form-urlencoded connection : //空行分割header和要求内容name
申请方法很多。 获取、开机自检、头、端口、删除、选项、跟踪、连接
最常用的是获取和开机自检。
1.1.1要求方法1 ) GET
传递的参数直接显示在地址栏中,并进行特定引用,因此传递的参数长度受到限制
器和服务器对url的长度是有限制的。因此,GET不适合用来传递私密数据,也不适合拿来传递大量数据。
一般的HTTP请求大多都是GET。
2)POST
POST把传递的数据封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,对数据量没有限制,也不会显示在URL中。
表单的提交用的是POST。
3)HEAD
HEAD跟GET相似,不过服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
4)DELETE
删除某一个资源。
5)OPTIONS
用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
6)PUT
把一个资源存放在指定的位置上。
本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
关于POST和PUT的区别以及请求方法的幂等性,请参考文章:http的7种请求方法和幂等性
7)TRACE
回显服务器收到的请求,主要用于测试或诊断。
8)CONNECT
CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。
1.1.2 HTTP协议版本1)HTTP/1.0
HTTP/1.0支持:GET、POST、HEAD三种HTTP请求方法。
2)HTTP/1.1
HTTP/1.1是当前正在使用的版本。该版本默认采用持久连接,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。
HTTP/1.1新增了:OPTIONS、PUT、DELETE、TRACE、CONNECT五种HTTP请求方法。
请求头部由关键字/值对组成,每行一对
User-Agent : 产生请求的浏览器类型
Accept : 客户端希望接受的数据类型,比如 Accept:text/xml(application/json)表示希望接受到的是xml(json)类型
Content-Type:发送端发送的实体数据的数据类型。
比如,Content-Type:text/html(application/json)表示发送的是html类型。
Host : 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
常见的Content-Type:
Content-Type解释text/htmlhtml格式text/plain纯文本格式text/cssCSS格式text/javascriptjs格式image/gifgif图片格式image/jpegjpg图片格式image/pngpng图片格式application/x-www-form-urlencodedPOST专用:普通的表单提交默认是通过这种方式。form表单数据被编码为key/value格式发送到服务器。application/jsonPOST专用:用来告诉服务端消息主体是序列化后的 JSON 字符串text/xmlPOST专用:发送xml数据multipart/form-dataPOST专用:下面讲解multipart/form-data
用以支持向服务器发送二进制数据,以便可以在 POST 请求中实现文件上传等功能
现在用Postman向百度发送一个请求方式为multipart/form-data的POST包,请求报文是这样的:
其中, boundary这个参数是分界线的意思,这个分界线参数具体是什么你可以随意自定义 ,建议定义复杂一点,因为这样子才不会跟请求体中其它字段重复。
上面的例子看出分界线=“–”+boundary
每个参数都由分界线分隔开,参数名(二进制数据还需要指明文件类型)和参数值之间有一行空行,这个空行不能省略:
消息主体最后以 --boundary-- 标示结束。
更加详细的解释可以参考:Multipart/form-data
请求头之后是一个空行,通知服务器以下不再有请求头
1.4 请求体GET没有请求数据,POST有。
与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length 。