http及相关概念

Http相关少量概念

概念:Hyper Text transfer Protocol 超文本协议
*传输协议:定义了 客户端和服务端通信时,发送数据的格式
*特点:
1.基于TCP/IP的高级协议
2.默认端口是:80
3.基于请求/响应模型的:一次请求对应一次响应
4.无状态的:每次请求之间相互独立,不能交互数据
*历史版本:
*1.0:每一次请求响应都会建立新的连接
*1.1:复用连接

*请求消息的数据格式
1.请求行
请求方式(get/post) 请求url(/login.html) 请求协议/版本(http/1.1)
*请求方式:
*Http协议中有7中请求方式,常用的有2种
get请求:
1.请求的参数早请求行中,再url后
2.请求的url长度有限制的
3.不太安全
post请求:
1.请求的参数在请求体中
2.请求的url长度没有限制的
3.相对安全
2.请求头:客户端浏览器告诉服务器的一些信息
请求头名称:请求头值
常见的请求头:

  1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
    *可以在服务器端获取该头的信息,解决浏览器的兼容性问题
  2. Referer:http://localhost:8080/login.html
    *告诉服务器,我(当前请求)从哪里来
    *作用:
    1.防盗链
    2.统计工作
    3.请求行
    空行
    4.请求体(正文)
    *字符串格式
    :method: POST
    :path: /api/v2/za/logs/batch
    :scheme: https
    accept-encoding: gzip, deflate, br
    accept-language: zh-CN,zh;q=0.9
    content-encoding: gzip
    content-length: 1341
    content-type: application/x-protobuf
    origin: https://www.zhihu.com
    referer: https://www.zhihu.com/
    user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
    *响应消息数据格式

补充:
1.请求消息:客户端发送到服务器的数据
*数据格式:
1.请求行
2.请求头
3.请求空行
4.请求体
2.响应消息:服务器端发送给客户端的数据
*数据格式:
1.响应行
1.组成:协议/版本 响应状态码 状态码描述
2.响应状态码:服务器告诉客户端浏览器本次请求和相应的一个状态
*状态码都是三位数字
*分类:

  1. 1XX:服务器接收客户端消息,但没有接受完成,等待一段时间后,发送1XX多行状态码
  2. 2XX:成功。代表:200
  3. 3XX:重定向。代表:302(重定向),304(访问缓存)
  4. 4XX:客户端错误(404:请求路径没有对应的资源; 405:请求的资源没有对应的doXXX方法)
  5. 5XX:服务器端错误。代表:500(服务器内部出现异常)
    2.相应头
    1.格式:头名称:值
    2.常见的响应头:
    *Context-Type:服务器告诉客户端本次响应体数据格式以及编码格式
    *Context-disposition:服务器告诉客户端以什么格式打开响应
    3.响应空行
    4.响应体

Request对象:

1.request对象和response对象的原理

  1. request和response对象是由服务器创建的,我们来使用它们
  2. reques对象是来获取请求消息,response对象是来设置响应消息

2.request对象继承体系结构:
ServletRequest – 接口
| 继承
HttpServletResquest – 接口
|继承
org.apache.catelina.connector.RequestFacade 类(tomcat)

3.request功能:
*获取请求消息的数据
1.获取请求行数据
*get/post
方法:

  1. 获取请求方式:get/post
    *String getMethod()
  2. 获取虚拟目录
    *String getContextPath()
  3. 获取servlet路径
    *String getServltPath()
  4. 获取get方式请求参数
    *String getQueryString()
  5. 获取请求URI
    *String getRequestURI():/demo1
    *StringBuffer getReauestURL():http:localhost:8080/demo1
    2.获取请求头数据
    *方法:
    (*主要使用) String getHeader(String name):通过请求头的名称获取请求头的值
    * Enumeration getHeaderNames():获取请求的名称
    3.获取请求实体数据
    *请求体:只有post请求方式,才有请求体,在请求体中封装了post请求的参数
    *步骤:
    1.获取流对象
    *BufferReader getReader():获取字符输入流,只能操作字符数据
    *ServletInputStream getInputStrig(): 获取字节输入流,可以操作所有类型数据
    2.再从流对象中拿数据

*其他功能:
1.获取请求参数的方式:无论是get还是post请求方式都可以使用下列方法来获取请求参数
*String getParameter(String name):根据参数名称获取参数值
*String[] getParameterValue(String name):根据参数名称获取参数值的数组
*Enumeration getPamrameName():获取所有请求的参数名称
*Map<String, String[]>getPamarameMap():获取所有参数的Map集合
中文乱码问题:
*get方式:tomcat 8 已经将get方式的乱码问题解决了
*post方式:会乱码
解决方式:再获取参数前,设置request的编码request.setCharacteEncoding(“utf-8”)

2.请求转发:一种在服务器内部的资源跳转方式
*步骤:
1.通过request对象获取请求转发器对象:getRequestDispatcher(string path)
2.使用RequestDispatcher对象来进行转发:forward(request,response)
*特点:
1.浏览器地址栏路径不发生变化
2.只能转发到当前服务器内部资源中
3.转发只是一次请求
3.共享数据:
*域对象:一个有作用范围的对象,可以在范围内共享数据
*request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:

  1. void setAttribute(String name,Object obj):存储对象
  2. Object getAttribute(String name):通过健获取值
  3. Void removeAttribute(String name):通过健移除键值对
    4.获取ServletContext
    *ServletContext getServletContext()

Response对象

功能:设置响应消息
1.设置响应行
*格式:HTTP/1.1 200 ok
*设置状态码:setStatus(int sc)
2.设置响应头:setHeader(String name,String value)
3.设置响应体:
*使用步骤:
1.获取输出流
*字节符输出流:PaintWriter getWriter()
*字节输出流:ServletOutputStream getOutputStream()
2.使用输出流,将数据输出到客户端浏览器

发布了3 篇原创文章 · 获赞 1 · 访问量 115

猜你喜欢

转载自blog.csdn.net/weixin_44057060/article/details/104398367