`

PRG 303 307 post get

阅读更多
303:see other,
引用
The response to the request can be found under another URI using a GET method. When received in response to a POST (or PUT/DELETE), it should be assumed that the server has received the data and the redirect should be issued with a separate GET message.

重定向请求到新的URL,而且客户端应当采用 GET 的方式访问这个新的URL。当收到服务器关于post请求的回应时,就认为服务器已经收到了数据,并且我们必须用get去访问这个新的URL。


这种方式在PRG方式中十分常见。这个新的 URI 不是原始URL的替代引用。同时,303响应禁止被缓存。当然,第二个请求(重定向)可能被缓存。新的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。
关于PRG,我的理解市,它是一种为了防止重复提交的模式,当我们使用post提交如购买信息时,服务器接受请求,立刻重定向到一个新的URL,而这个URL代表的网页采用的是get方式访问服务器,参考下面的get和post的区别,get主要完成的是查询的任务,所以,此时即使我们再刷新网页,我们也只是发出get请求,而并不会让服务器误以为我们重新提交了。我们可以参考
http://en.wikipedia.org/wiki/Post/Redirect/Get
http://www.cnblogs.com/wintersun/archive/2012/03/24/2415349.html

307:Temporary Redirect 类似303,
In this case, the request should be repeated with another URI; however, future requests should still use the original URI.[2] In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request. For instance, a POST request repeated using another POST request.

与302的主要区别在于,当我们去访问重定向的URL时,我们不需要一定使用GET,只要和之前第一次访问该URL时使用的访问方式一样就可以了。


这种重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。新的临时性的URI 应当在响应的 Location 域中返回。除非这是一个HEAD 请求,否则响应的实体中应当包含指向新的URI 的超链接及简短说明。因为部分浏览器不能识别307响应,因此需要添加上述必要信息以便用户能够理解并向新的 URI 发出访问请求。如果这不是一个GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。


通过这篇文章深化了对于get post的理解
get主要还是用于从服务器上查询一些保密性要求不高的信息,它也向服务器发送数据,但是这些数据只是为了查询而使用的。而post则是倾向于向服务器添加数据。
具体区别如下:
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics