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对象可以直接输出字符文本内容

原文地址:https://www.cnblogs.com/yangkang0202/p/9256808.html