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):通过键移除键值对

相关文章
|
6天前
|
安全 Java 网络安全
Servlet 教程 之 Servlet 客户端 HTTP 请求 2
Servlet教程介绍了如何在Servlet中处理HTTP请求,包括获取Cookie、头信息、参数、Session等。方法如:`getCookies()`、`getAttributeNames()`、`getHeaderNames()`、`getParameterNames()`等。还能获取身份验证类型、字符编码、MIME类型、请求方法、远程用户信息、URL路径、安全通道状态以及请求内容长度等。此外,可通过`getSession()`创建或获取Session,并以`Map`形式获取参数。
20 8
|
1天前
|
JSON 数据格式 索引
ES 查看索引的属性的http请求
在 Elasticsearch 中,要查看索引的属性,可以通过发送 HTTP 请求来执行以下操作: 1. **获取索引的映射(Mapping)**: 可以使用 `GET` 请求访问 Elasticsearch 的 `_mapping` 端点来获取特定索引的映射信息。 示例请求: ```http GET http://<elasticsearch_host>:<port>/<index_name>/_mapping ``` 2. **获取索引的设置(Settings)**: 可以使用 `GET` 请求访问 Elasticsearch 的 `_setting
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
8 3
|
7天前
|
缓存 网络协议
【计算机协议】第一章——HTTP协议详解
【计算机协议】第一章——HTTP协议详解
|
9天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
9天前
|
安全 网络安全 开发工具
对象存储oss使用问题之flutter使用http库进行post请求文件上传返回400如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
32 1
|
11天前
|
缓存 安全 网络协议
Http协议是什么
【4月更文挑战第12天】HTTP是用于从WWW服务器传输超文本到浏览器的协议,基于TCP/IP,特点包括无连接、无状态、面向对象、无阻塞和可缓存。它的工作原理是客户端发送请求,服务器处理后返回响应。自1989年创建以来,HTTP已发展支持多媒体内容传输,并通过HTTPS提供安全保护。学习更多可参考计算机网络技术文献。
18 6
|
13天前
|
存储 JSON 前端开发
网络原理(4)HTTP协议(下)
网络原理(4)HTTP协议
25 0
|
16天前
|
Java
java原生发送http请求
java原生发送http请求
|
24天前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
53 1