javaWeb(十)----- HTTP请求协议,Request

简介: javaWeb(十)----- HTTP请求协议,Request

HTTP协议

✔  概念:Hyper Text Transfer Protocol 超文本传输协议

   * 传输协议:定义了客户端和服务器端通信时发送数据的格式

   * 特点:

             1. 基于TCP/IP的高级协议

             2. 默认端口号:80

             3. 基于请求/响应模型的:一次请求对应一次响应

             4. 无状态的:每次请求之间相互独立,不能交互数据

   * 历史版本:

            1.0:每一次请求响应都会建立新的连接

            1.1:复用连接


✔  请求消息数据格式

1. 请求行

       请求方式  请求url  请求协议/版本  --->  GET /login.html    HTTP/1.1

       * 请求方式:HTTP协议有7中请求方式,常用的有2种

          (1) GET:

                    ①  请求参数在请求行中,在url后

                    ②  请求的url长度有限制的

                    ③  不太安全

          (2)POST:

                    ①  请求参数在请求体中

                    ②  请求的url长度没有限制的

                    ③  相对安全

2. 请求头:客户端浏览器告诉服务器一些信息

                  请求头名称:请求头值

  * 常见的请求头:

  (1)User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

           * 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

  (2)Referer:http://localhost/login.html

           * 告诉服务器,我(当前请求)从哪里来?

           * 作用: ①  防盗链

                         ②  统计工作

3. 请求空行

   空行,就是用于分割POST请求的请求头,和请求体的

4. 请求体(正文):封装POST请求消息的请求参数的


✔  响应消息数据格式


Request

✔  request对象和response对象的原理

(1)request和response对象是由服务器创建的,我们只是来使用它们

(2)request对象是来获取请求消息,response对象是来设置响应消息


✔  request对象继承体系结构:    

   ServletRequest        --    接口

       |    继承

   HttpServletRequest    -- 接口

       |    实现

   org.apache.catalina.connector.RequestFacade 类(tomcat)


✔  request功能:

1. 获取请求消息数据

(1)获取请求行数据

       请求行数据  --->   GET   /day14/demo1?name=zhangsan   HTTP/1.1

       * 方法:

       ①  获取请求方式 :GET   ----    String getMethod()  

       ②  获取虚拟目录:/day14  ----  String getContextPath()   ( ▲ )

       ③  获取Servlet路径: /demo1  ----  String getServletPath()

       ④  获取get方式请求参数:name=zhangsan  ----  String getQueryString()

       ⑤  获取请求URI:/day14/demo1    ( ▲ )

             String getRequestURI():    /day14/demo1

             StringBuffer getRequestURL() :   http://localhost/day14/demo1

             * URL 统一资源定位符 : http://localhost/day14/demo1      =>     相当于 “ 中华人民共和国 ”

             * URI 统一资源标识符 :  /day14/demo1      =>     共和国

       ⑥  获取协议及版本:HTTP/1.1  ----   String getProtocol()

       ⑦   获取客户机的IP地址  ----  String getRemoteAddr()

(2) 获取请求头数据

   * 方法:

              String getHeader(String name):通过请求头的名称获取请求头的值    ( ▲ )

              Enumeration<String> getHeaderNames():获取所有的请求头名称

(3) 获取请求体数据

   * 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数

   * 步骤:

      ①  获取流对象

           *  BufferedReader getReader():获取字符输入流,只能操作字符数据

           *  ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

      ②  再从流对象中拿数据


2. 其他功能:

(1)获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

        String getParameter(String name):根据参数名称获取参数值    username=zs&password=123        ( ▲ )

        String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game

        Enumeration<String> getParameterNames():获取所有请求的参数名称

        Map<String,String[]> getParameterMap():获取所有参数的map集合      ( ▲ )

* 中文乱码问题:

       -----   get方式:tomcat 8 已经将get方式乱码问题解决了

       -----   post方式:会乱码

                解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");


(2)请求转发:一种在服务器内部的资源跳转方式

   * 步骤:

   ① 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)

   ② 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)

   * 特点:

    ① 浏览器地址栏路径不发生变化

    ② 只能转发到当前服务器内部资源中

    ③ 转发是一次请求


(3)共享数据

   * 域对象:一个有作用范围的对象,可以在范围内共享数据

   * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

   * 方法:

              void setAttribute(String name,Object obj):存储数据

              Object getAttitude(String name):通过键获取值

              void removeAttribute(String name):通过键移除键值对

相关文章
|
3月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
499 130
|
2月前
|
缓存 负载均衡 网络协议
HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
面向企业网络与数据团队的代理协议选型与治理指南,基于流量特征选择HTTP或SOCKS5协议,通过多协议网关统一出站,结合托管网络降低复杂度,实现稳定吞吐、可预测时延与合规落地。
|
4月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
560 2
|
4月前
|
应用服务中间件
HTTP协议中常见的状态码
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类,常见状态码包括:101(请求已接受)、200(请求成功)、302(重定向)、400(请求错误)、401(未认证)、403(无权限)、404(资源不存在),以及500(服务器错误)、502(网关错误)、503(服务不可用)、504(网关超时)等。
174 0
|
4月前
|
网络协议 安全 网络安全
什么是HTTP协议
HTTP协议是超文本传输协议,基于TCP,规定了客户端与服务器端通信规则,但数据以明文传输,安全性低。HTTPS则通过SSL加密保障数据安全。两者默认端口不同,HTTP为80,HTTPS为443。HTTPS安全性更高,但消耗更多服务器资源。
203 0
|
4月前
|
数据采集 Web App开发 JSON
Python爬虫基本原理与HTTP协议详解:从入门到实践
本文介绍了Python爬虫的核心知识,涵盖HTTP协议基础、请求与响应流程、常用库(如requests、BeautifulSoup)、反爬应对策略及实战案例(如爬取豆瓣电影Top250),帮助读者系统掌握数据采集技能。
379 0
|
4月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
4月前
|
缓存 网络协议 UED
深度解析HTTP协议从版本0.9至3.0的演进和特性。
总的来说,HTTP的演进是互联网技术不断发展和需求日益增长的结果。每一次重要更新都旨在优化性能,增进用户体验,适应新的应用场景,而且保证了向后兼容,让互联网的基础架构得以稳定发展。随着网络技术继续进步,我们可以预期HTTP协议在未来还会继续演化。
502 0
|
4月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。