http协议学习笔记

HTTP:浏览器客户端与服务器之间通信的规范

  • 浏览器与服务器之间的通信模式为:请求——》处理——》响应;一个请求发出,一定有且只有一个响应返回,

浏览器请求中应指定访问那个web应用程序,服务器通过部署在上面的web应用来解析收到的请求,并且执行一些动作,

将结果返回给浏览器客户端。

  • 时下的浏览器的种类五花八门,如果没有一种协议来规范浏览器和服务器之间的通信行为,那么服务器将针对不同

的浏览器来执行不同的操作,那么这将会相当不方便,每当增加一种浏览器时,服务器就必须修改程序来与之对应,所以,

就需要一种介于浏览器客户端和服务器之间的协议来统一每种浏览器与服务器之间的通信行为。

  • 浏览器其实底层也是个客户端,类似于C/S架构采用Socket来进行通信一样,浏览器和服务器的数据传输必须符合

HTTP协议;

  • TCP/IP协议关注的是客户端与服务器端的数据是否传输成功;HTTP协议是在TCP/IP协议之上封装的一种协议,他关注

是客户端与服务器端传输的数据是否符合规范。

                截取HTTP协议中的信息

  • 在谷歌浏览器中按F12调出网络查看器,在地址栏输入URL回车,就可以看到一个hello的请求信息,包括响应头,响应体、

请求体的信息。

  • HTTP请求信息包括:一个请求行,多个请求头,以及实体内容(可无)
  1. 请求行:GET myProject/myServlet HTTP/1.1 

  1. GET与POST的区别

    1)Get方式请求时,所传递的参数跟在URI的后面;而POST方式请求时,参数内容放置在请求体中;

  2)Get方式提交的数据有大小限制,而POST方式提交的数据没有长度限制;

  3)敏感数据的提交一般用POST方式进行提交;

  • 请求头
  1. 请求头中的信息都是以键值对的形式传递的,处于对面向对象开发的角度考虑,Web服务器会将接收到的请求信息封装成一个对象,对象名为HttpServletRequest,服务器回调的doGet方法将HttpServletRequest对象作为参数传递进去;所以在doGet方法获doPost方法中可以在HttpServletRequest对象中获取相关的请求信息。
  • 表单所传递的参数的获取
  1. GET方式(参数在URI中):request.getQueryString();
  2. POST方式(参数在请求对象实体内容中):request.getInputString();在读取流中的内容
  3. 统一方便的获取参数的方法:request.getParameter(string name)--根据参数的名字获取值(局限性:只能拿到一个对应的属性);request.getParameterNames()--获取所有的参数的名字
  4. 在使用request.getParameter(name)方法获取传递的数据时,前台表单的控件一定要加上"name"属性;
  5. 当一个控件传递的值包括多个值时,此时用request.getParameter(name)只能获取第一个值,那么,此时就要用到request.getParameterValues(name),它的返回值是一个String形式的字符串数组。
  • HTTP协议编码问题
  1. Http请求时的编码问题:在浏览器客户端表单数据提交时,浏览器将字符以utf-8的码表进行编码,当传输至服务器时,request.getParameter()方法解码时默认的解码格式是"iso-8859-1",所以会产生乱码的问题,解决的方法首先是将已解析好的字符以"iso-8859-1"格式进行编码,然后再用"utf-8"格式进行解码。
  2. 解决服务器接收时乱码一劳永逸的方法:在方法中加上:request.setCharacterEncoding("utf-8");但这个方法只对POST方法有效
  • HTTP响应
  • 状态码
  1. 常见的状态码:200--表示请求处理完成并完美返回;

          302--表示请求需要进一步细化;

          404--表示客户端请求的资源找不到

          505-表示服务器返回的资源错误(服务器错误)

  • 响应头
  1. HttpServletResponse对象,在Servlet中处理请求,用HttpServletResponse来返回响应信息
  2. Http重定向:
  • 第一种方法:将相应状态码改为302,然后重定向

    

response.setStatus(302);
response.setHeader("Location","xxx/xxxx/.html");
  • 第二种:简化方法:
response.sendRedirect("xxx/xxx.html");
  • Http响应头定时刷新:
response.setHeader("Refresf","1");//表示一秒刷新一次
response.setHeader("Refresf","3;url=xxx/xxx.html");//表示3秒之后跳转到指定的URL,此功能经常用于用户注册完之后跳转到其它页面
  • 设置响应数据的类型
response.setContentType("text/html")
  • 设置响应实体内容的编码格式
response.setCharacterEncoding("utf-8");
//或者
response.setContentType("text/html;charset=utf-8");
  • 完美解决Http协议乱码的问题
//在doGet方法中加上
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");

 

posted @ 2016-12-22 15:27  理灵秀才  阅读(161)  评论(0编辑  收藏  举报