• Http协议的学习笔记


    学习之前的思考:

    1.这个技术是做什么的?

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等),是用于从万维网服务器传输超文本到本地浏览器的传送协议。

    2.这个技术的特点是什么

    ①简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有:GET、HEAD、POST。由于HTTP协议简单,使得HTTP服务器的程序规模小,通信速度快。

    ②灵活:HTTP允许传输任意类型的数据对象(传输的对象类型由Content-Type标记0)。

    ③无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,,并收到客户的应答后,即断开连接。这种方式可以节省传输时间。

    ④无状态:HTTP协议是无状态的,对事务处理没有记忆能力,也就是说后续处理需要前面的信息,则必须重传,这样会导致连接传送的数据量变大。另外,在服务器不需要先前信息的时候它的应答就较快(可以和session和cookie做类比)

    3.这个技术的原理是什么

    HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务端发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

    笔记:

    HTTP 请求消息Request:

    客户端发送一个HTTP请求到服务端的请求消息包括以下格式:

    请求行、请求头部、空行和请求数据四个部分。

    ①请求行:用来说明请求类型,要访问的资源以及所使用的HTTP版本。

    ②请求头部(2-6行):说明服务器要使用的附加信息

    ③空行:请求头部后面的空行是必须的

    ④请求数据:是主体,可以添加任意数据。

    HTTP 响应消息Response:

    HTTP响应也由四部分组成:状态行、消息报头、空行和响应正文

    ①状态行:包含HTTP协议版本号,状态码,状态消息

    ②消息报头:用来说明客户端要使用的附加信息

    ③空行:消息报头后面的空行是必须的

    ④响应正文:服务器返回给客户端的文本信息

    (本文内容转载自:https://www.jianshu.com/p/80e25cb1d81a)

    HTTP协议通过HttpServletRequest和HttpServletResponse两个对象来对接收请求和发送响应来进行封装。

    1.HttpServletRequest

    1).介绍:

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

    2).Request常用方法:

    ①获得客户机信息:

    getRequestURL方法返回客户端发出请求时的完整URL

    getRequestURI方法返回请求行中的资源部分

    getQueryString方法返回请求行中的参数部分

    getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头

    getRemoteAddr方法返回发出请求的客户机的IP地址

    getRemoteHost方法返回发出请求的客户机的完整主机名

    getRemotePort方法返回客户机所使用的网络端口号

    getLocalAddr方法返回WEB服务器的IP地址

    getLocalName方法返回WEB服务器的主机名

    2)获得客户机请求头:

    String getHeader(String name)

    Enumeration getHeaders(String name)

    getHeaderNames()

    3)获得客户机请求参数(客户端提交的数据):

    getParameter(String) 接收表单参数

    getParameterValues(String name) 接收表单参数

    getParameterNames() 获取所有参数名

    getParameterMap() request对象封装的参数是以Map的形式存储的

    2.HttpServletResponse对象介绍:

    HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法,这些方法的主要功能是设置HTTP状态码和管理Cookie。HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据,发送给响应头,发送响应状态码的方法。

    HttpServletResponse对象可以向客户端发送三种类型的数据:

    ①响应头 ②状态码 ③实体数据

    常用方法:

    addHeader(String name,String value)将指定的名字和值加入到响应的头信息中

    encondeURL(String url) 编码指定的URL

    sendError(int sc)使用指定状态码发送一个错误到客户端

    setDateHeader(String name,long date)将给出的名字和日期设置响应的头部

    setHeader(String name,String value)将给出的名字和值设置响应的头部

    消息实体内容,通过输出流对象进行设置,用以下两个方法:

    Resonse.getOutputStream() 字节输出流对象

    Resonse.getWriter() 字符的输出流对象

    getOutputStrem和getWriter方法的比较

    1)getOutputStream方法用于返回Servlet引擎创建的字节输出流对象,Servlet程序可以按字节形式输出响应正文

    2)getWriter方法用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以按字符形式输出响应正文。

    注意:getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一个方法。要不然会抛出错误。

    3)getOutputStream 方法返回的是字节输出流对象的类型为ServletOutputStream,它可以直接输出字节数组中的二进制数据。

    4)getWriter方法将Servlet引擎的数据缓冲区包装成PrintWriter类型的字符输出流对象后返回,PrintWriter对象可以直接输出字符文本内容

  • 相关阅读:
    luogu_P1850 换教室
    luogu_P3224 [HNOI2012]永无乡
    luogu_P1064 金明的预算方案
    luogu_P2014 选课
    luogu_P3372 【模板】线段树 1(动态开点)
    luogu_P2852 [USACO06DEC]牛奶模式Milk Patterns
    luogu_P1941 飞扬的小鸟
    luogu_P2678 跳石头
    luogu_P1638 逛画展
    【Tyvj2046】掷骰子
  • 原文地址:https://www.cnblogs.com/yangkang0202/p/9256808.html
Copyright © 2020-2023  润新知