http协议中的get和post

先看一个 post方式 登录的例子:
请求头

Host: www.xxx.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://www.xxx.com/Login Cookie: POP800_VISIT_TIMES=2; PAGE_VIEW_TIMES=2; POP800_VISITOR_ID_L=1C16FEC2D3987BC1AB9B831C81837971; JSESSIONID=45293BBF138D17AFF0A7B4C7633B8443 Connection: keep-alive

请求主体

Content-Type: application/x-www-form-urlencoded Content-Length: 36 userName=admin&userPswd=123456



get方式
查询字符串

username=tom userpswd=123456


请求头

Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: JSESSIONID=316D88065AD990F7BEB4AEEB00A1E27B Connection: keep-alive

get方式的请求主体为空

以上是用火狐浏览器获取到的数据
------------------------------------------------------------------------------------------------------------------------

可以用这种方式模拟一下get请求:
telnet localhost 80
GET /javaweb_interview/lesson13/get.jsp?username=tom&userpswd=123456 HTTP/1.1
Host:localhost 
两次回车
---------------------------------------------------------------------------------------------------------------------------
好,下面我们来总结一下。。。
http协议是一种基于请求、响应模式的,无状态协议
http1.0:
1、客户端发起连接
2、客户端发起表求
3、服务器端响应请求
4、服务器端关闭连接
在http1.1中,给出了一个持续连接机制,浏览器建立一个连接之后,发送请求并得到回应,然后持续发送请求并得到回应。
比如一个有三张图片的页面,客户端发起连接和请求,先得到这个页面,然后得到了三张图片的URL,于是在不断开连接的情况下,再次发起请求,分别得到这三张图片。
然后客户端发起关闭连接的请求,服务器关闭连接。

http请求由三部份组成:
请求行、消息报头、请求正文

请求行:以一个方法符号开头,后面跟着请求URL和协议版本,以CRLF结尾
一个请求行例子:GET index.html HTTP/1.1 (CRLF)

POST方法要求服务器接受附在后面的数据
POST login.jsp HTTP/1.1 (CRLF)
Accept:image/gif (CRLF)
...
username=tom&password=aaaaaa

HEAD方法和GET方法基本一样,只不过它只请求消息报头,而不是完整内容

在http协议中,方法只能大写

http响应与请求相似,也是由三个部份组成的:
状态行、消息报头、正文


比如我们再来用163网站测试一下get请求
telnet www.163.com 80(默认23端口)
GET /index.html HTTP/1.1
Host:www.163.com   (两次回车)


get和post的区别?
get方式:将所有参数附加在 请求行的URL的后面一起传递
post方式:将所有参数附加在 请求主体的最后一行的下一行的下一行
在servlet中,采用doGet()和doPost()分别来处理这两种方式,任何一个请求都会先进入service()方法,然后再判断进入doGet()还是doPost(),这是servlet默认的service()方法。当然,我们可以覆盖service(),重写它的代码。

重定向与转发
response.sendRedirect("out.jsp?name=tom&age=25");//这是一个响应命令,要求客户端去访问这个页面
   <%=request.getAttribute("name") %>   空
   <%=request.getParameter("age") %>

request.setAttribute("name","tom");//转发是request对象在操作
request.getRequestDispatcher("out.jsp?age=22").forward(request,response);
  <%=request.getAttribute("name") %>
   <%=request.getParameter("age") %>
假设A是客户端,访问B页面,再到C页面
如果是转发,则是A到B,再由B到C,而如果是重定向,则是A到B,B告诉A应该去访问C,于是A又去访问C:
A-B-C 转发
A-B   A-C 重定向
也就是说,请求转发始终是一个请求一个响应,始终是一个request,一个response在流转;重定向是两个请求两个响应,两个请求之间没有任何关系。
所以,转发时,浏览器地址栏永远是B,因为客户端不知道B页面干了什么
而重定向时,由于服务器通知了客户端去访问C ,所以浏览器地址显示的是C
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值