2.HTTP协议(Requset、Response)

2023-11-19

目录

http协议

http报文解析:

Http请求报文(浏览器->服务器)

1.请求行

2.请求头

3.空行

java处理http请求的常用方法:

Http响应报文(服务器->浏览器)

1.响应行

2.响应头

3.响应正文/实体内容

java处理http响应的常用方法:

HTTPS


http协议

对浏览器客户端 和 服务器端 之间数据传输的格式规范。

基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

无状态, 但是可用cookie技术在请求和响应报文中写入cookie信息来控制客户端的状态。

连接步骤:

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器返回http响应,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

查看http协议报文的方法:

  1. 使用火狐的firebug插件(右键->firebug->网络)
  2. 使用谷歌的“审查元素”
  3. 使用系统自带的telnet工具(远程访问工具) 
    a)telnet localhost 8080 访问tomcat服务器
    b)ctrl+] 回车 可以看到回显
    c)输入请求内容

    d)回车,即可查看到服务器响应信息


http报文解析:



requset请求 数据格式

Http请求报文(浏览器->服务器)

发送HTTP报文的方法很多,  例如在html页面form标签触发submit后,浏览器就会向"服务器ip:端口/提交地址"发送一行一行的字符串, 这些字符串就是http请求

例:表单提交

<form action="提交地址" method="GET/POST">
    用户名:<input type="text" name="username"><br>
    密码:<input type="text" name="password"><br>
    <input type="submit" value="登录"/>
<form>

例如:启动一个本地8080端口服务,把提交地址写成/WebRoot/hello,提交后截取的HTTP报文如下: 

截取http请求报文分析:

GET /WebRoot/hello HTTP/1.1                       -- 请求行
Host: localhost:8080                              -- 请求头(多个key-value对象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0  --本地系统,浏览器信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  --浏览器可接受的报文
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
                                                  -- 一个空行,用来分开 请求头 与 请求正文
username=123&password=123456                      --(post)请求正文/实体内容

接下来挨个分析请求报文中每一行的含义


1.请求行

GET   /WebRoot/hello   HTTP/1.1 

开始访问资源请求一次,之后文件中每有一个地址都会请求一次

#http协议版本

http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。

http1.1:默认使用长连接,当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)

#请求资源

URL: 统一资源定位符。http://localhost:8080/WebRoot/hello。只能定位互联网资源。是URI 的子集。URL=协议+主机端口+URI

URI: 统一资源标记符。/WebRoot/hello。用于标记任何资源。可以是本地文件系统、局域网的资源、 可以是互联网资源。

#请求方式

常见的请求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE

常用的请求方式: GET 和 POST

GET(获取资源

  1. GET方法用来查询,不会对浏览器上的信息产生影响
  2. 参数数据跟在地址栏(URI)后。以?开头、多个参数之间以&分割:GET  /WebRoot/testMethod.html?name=123&password=123456  HTTP/1.1
  3. GET提交参数数据有限制,不超过1KB。(实际上URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制,IE对URL长度的限制是2083字节)
  4. GET方式采用的是明文传输,不适合提交敏感密码。
  5. 注意: 浏览器直接访问的请求,默认提交方式是GET方式。火狐浏览器以Get方式提交带参数的数据,会重复提交两次

POST(传输实体主体

  1. 参数跟在请求的实体内容中。没有?开头、多个参数之间以&分割
  2. POST提交的参数数据没有限制。
  3. POST方式放在报文内部无法看到,适合提交敏感数据。

2.请求头

键值对,例:常见的请求头

Accept: text/html,image/*                          -- 浏览器接受的内容类型
Accept-Charset: ISO-8859-1                     -- 浏览器接受的编码格式
Accept-Encoding: gzip,compress               --浏览器接受的数据压缩格式
Accept-Language: en-us,zh-                      --浏览器接受的语言
Host: www.it315.org:80                 --(必输)当前请求域名(主机:端口)
Content-Type: application/x-www-form-urlencoded          --提交的数据类型
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT            --浏览器最后的缓存时间
Referer: http://www.it315.org/index.jsp                               -- 当前请求来自于哪里(可用来判断非法链接)
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)            --浏览器版本类型
Cookie:name=123                                                               -- 浏览器保存的cookie信息
Connection: close/Keep-Alive                       -- 浏览器跟服务器连接状态。close:连接关闭 keep-alive:保持连接
Date: Tue, 11 Jul 2000 18:23:51 GMT          -- 请求发出的时间 

Content-Type  常见的媒体格式类型如下:

    text/html : HTML格式
    text/plain :纯文本格式      
    text/xml :  XML格式
    text/x-markdown:markdown格式
    image/gif :gif图片格式    
    image/jpeg :jpg图片格式 
    image/png:png图片格式

application/xhtml+xml :XHTML格式
application/xml : XML数据格式
application/atom+xml :Atom XML聚合格式
application/json : JSON数据格式
application/pdf :pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded<form encType="">中默认的encType(表单默认的提交数据的格式)

form表单数据被编码以键值对形式?key1=value1&key2=value2的方式发送到服务器

3.空行

请求头和请求正文之间是一个空行,它表示请求头已经结束,接下来的是请求正文。

4.请求正文/实体内容

只有POST提交的参数会放到实体内容中


username=123&password=123456                 --(post)请求正文/实体内容

=======================================Servlet请求对象============================================

java处理http请求的常用方法:

HttpServletRequest对象

tomcat服务器把请求信息封装到HttpServletRequest对象,把响应信息封装到HttpServletResponse对象。然后调用servlet的方法,传入request和response对象

HttpServletRequest对象用于获取请求数据,核心的API:

请求行

request.getMethod();          获取请求方式

request.getRequetURI(); /  request.getRequetURL();            获取请求资源

request.getProtocol();           获取请求http协议版本

request.getQueryString();           (获取GET方式传递的参数)

请求头

request.getHeaderNames();            获取所有的请求头名称

request.getHeader("名称");            根据请求头获取请求值

实体内容

request.getInputStream();            获取实体内容数据(获取POST方式传递的参数)

GET、POST请求参数 统一通用方便的获取方法

request.getParameterNames();          获取所有参数名称列表(参数名为 html表单中数据标签的name属性值)

request.getParameter("参数名");         根据参数名获取参数值(只能获取一个值的参数)

request.getParameterValue("参数名“);         根据参数名获取参数值(可以获取多个值的参数)

编码问题

修改GET方式参数编码:

手动解码:String name = new String(request.getParameter("参数名").getBytes("iso-8859-1"),"utf-8");

修改POST方式参数编码:

设置参数查询码表:request.setCharacterEncoding("utf-8");         放在查询参数之前,只对实体内容起作用

改服务器配置文件:找到并在%tomcat%/conf/server.xml文件Connector标签中加入  URIEncoding="utf-8"

请求案例:获取浏览器的类型(user-agent), 防止非法链接(referer)



response响应 数据格式

Http响应报文(服务器->浏览器)

HTTP/1.1  200  OK                        --响应行
Server: Apache-Coyote/1.1                --响应头(key-vaule)
Content-Length: 24
Date: Fri, 30 Jan 2015 01:54:57 GMT
                                         --一个空行
this is hello servlet!!!                 --响应正文/实体内容

1.响应行

HTTP/1.1  200  OK

#状态码: 服务器处理请求的结果(状态)

常见的状态:
200: 表示请求处理完成并完美返回
302: 表示请求需要进一步细化。
404: 表示客户访问的资源找不到。
500: 表示服务器的资源发送错误。(服务器内部错误)
#状态描述

2.响应头

键值对,例:常见的响应头

Location: 重定向地址                         --表示重定向的地址,该头和302的状态码一起使用。
Server:apache tomcat                       --表示服务器的软件信息, 它和请求报头域User-Agent是相对应的
Content-Encoding: gzip                     --表示服务器发送给浏览器的数据压缩类型
Content-Length: 80                           --表示服务器发送给浏览器的实体正文长度
Content-Language: zh-cn                  --表示服务器支持的语言
Content-Type: text/html; charset=GB2312                       --表示服务器发送给浏览器的数据类型内容编码
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT               --表示服务器资源的最后修改时间
Refresh: 秒数;url=地址                                                     --表示定时刷新到指定页面
Content-Disposition: attachment; filename=aaa.zip         --表示告诉浏览器以下载方式打开资源(下载文件时用到)
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search                    --表示服务器发送给浏览器的cookie信息(会话管理用到)
Expires: -1                                                                       --响应过期时间,-1表示通知浏览器不进行缓存
Cache-Control: no-cache                                                --同上
Pragma: no-cache                                                           --同上
Connection: close/Keep-Alive          --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接 

3.响应正文/实体内容

响应正文就是服务器返回给浏览器的资源的内容:html, css, js,甚至图片

由响应头的Content-···等属性告知浏览器 响应正文的长度、编码、媒体类型等(MIME Type是经过 ietf 组织协商,以 RFC 的形式作为建议标准发布在网上的)

由response对象PrintWriter写入数据内容

=======================================Servlet响应对象============================================

java处理http响应的常用方法:

HttpServletResponse对象

tomcat服务器把请求信息封装到HttpServletRequest对象,把响应信息封装到HttpServletResponse对象。然后调用servlet的方法,传入request和response对象
HttpServletResponse对象用于修改响应信息,核心的API:

响应行

response.setStatus();           设置状态码

响应头

response.setHeader("name","value");           设置响应头

response.sendRedirect(url);         重定向

response.setContentType("text/html;charset=utf-8");         发送给浏览器的数据类型内容编码

实体内容:(浏览器直接能够看到)

response.getWriter().writer();          发送字符实体内容

response.getOutputStream().writer()          发送字节实体内容

tomcat服务器把response对象的内容转换成响应格式内容,再发送给浏览器解析。

编码问题

response.setCharacterEncoding("utf-8");         放在响应实体内容代码之前,对getOutputStream().writer()字节流不起作用

响应案例:请求重定向(Location),定时刷新(refresh),content-Type数据类型(在tomcat服务器web.xml中用mime-type标签规定了数据类型,例如:text/html发送HTML文本;image/jpg发送图片)
 


HTTPS

HTTPS协议  是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

一般用法:

        在负载均衡服务器上安装 证书

        前端与负载均衡服务器之间 用https通讯

        负载均衡与后端之间 用http通讯

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.HTTP协议(Requset、Response) 的相关文章

随机推荐

  • 单片机语音识别原理

    语音识别是一门交叉学科 近二十年来 语音识别技术取得显著进步 开始从实验室走向市场 人们预计 未来10年内 语音识别技术将进入工业 家电 通信 汽车电子 医疗 家庭服务 消费电子产品等各个领域 语音识别听写机在一些领域的应用被美国新闻界评为
  • 基于SSM框架的多文件上传Controller类编写

    前端代码
  • Spring Boot 从Json静态文件中读取数据

    Spring Boot 从Json静态文件中读取数据 在实体中 通常使用类似字典表的文件来表示属性 文件大都配置在配置文件中 也可以是静态文件 本次记录如何从静态json文件中读取所需字段 1 文件格式以及路径 2 加载文件 import
  • QT进程间通信 详细介绍

    在QT中 信号和槽的机制取代了这种繁杂的 易崩溃的对象通信机制 信号是当对象状态改变时所发出的 槽是用来接收发射的信号并响应相应事件的类的成员函数 信号和槽的连接是通过connect 函数来实现的 AD 1 QT通信机制 为了更好的实现QT
  • MVC三层架构

    1 什么是MVC Model View Controller 模型 视图 控制器 模型就是Java对应数据库的那些字段 实体类 视图 就是JSP页面 控制器 就是Servlet负责跳转页面 Controller作用 Controller其实
  • Android addview—动态添加view

    一 前言 在日常的开发中经常遇到需要动态添加子view的情况 addview是ViewGroup的特有方法 可以在布局中动态添加view 而view是不存在这个方法的 二 使用方式 1 方法介绍 addview有以下几种方式 addView
  • vue+websocket+express+mongodb实战项目(实时聊天)(二)

    原项目地址 vue websocket express mongodb实战项目 实时聊天 一 http blog csdn net blueblueskyhua article details 70807847 github地址 https
  • JAVA按钮编程_Java编程实现swing圆形按钮实例代码

    Swing是一个为Java设计的GUI工具包 Swing是JAVA基础类的一部分 Swing包括了图形用户界面 GUI 器件如 文本框 按钮 分隔窗格和表 Swing提供许多比AWT更好的屏幕显示元素 它们用纯Java写成 所以同Java本
  • Linux——pthread_create()

    1 pthread create pthread create是 Unix Linux Mac OS X 等操作系统的创建线程的函数 它的功能是创建线程 实际上就是确定调用该线程函数的入口点 在线程创建以后 就开始运行相关的线程函数 函数原
  • KITTI SOTA!Dual Fusion:减少Lidar-Camera融合特征不对齐问题

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 多传感器融合 技术交流群 后台回复 多传感器融合综述 获取图像 激光雷达 毫米波雷达融合综述等干货资料 摘要 融合来自相机和激光雷达传感器的数据是
  • 基于ICL8038的正弦波、方波和三角波发生器protues仿真设计

    一 设计任务与要求 设计 组装 调试信号发生器电路 使它能输出正弦波 方波和三角波 可采用集成芯片ICL8083 其频率在20HZ 20KHZ范围内连续可调 输出正弦波 方波 三角波 正弦波 二 原理电路设计 1 设计方案 方案的结构框图如
  • ToBase64String方法 - 理想的地方的日志 - 网易博客

    用ToBase64String方法可以在不丢失数据的情况下将字节数组转成字符串 在ToBase64String方法中 会对字节数组中的连续三字节进行一次编码 编码得的字符串长度为4位 而且得出来的4位的字符串里面的字符肯定是由大小写字母 数
  • 如何发现系统改进点,优化点,提高点,新系统 边界感不要太强

    技术人员规划能力 如何规划新的系统 技术规划能力 个人渣记录仅为自己搜索用的博客 CSDN博客 1 协作中 双方系统对接 边界感不要太强 肯定会不爽 不爽的点里可以挖掘改进点 肯定会有很多冲突 对方技能欠缺 对方耽误你的时间 可以想下有没有
  • 三分钟阿里云服务器u1通用算力型性能、使用限制及费用说明

    阿里云服务器u1是通用算力型云服务器 CPU采用2 5 GHz主频的Intel R Xeon R Platinum处理器 通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景 比如业务HA
  • 关于人脸识别的心得随笔(持续更新)

    2020 4 25 目前 在监控系统图像中 可以将肤色作为人脸识别的依据 RGB颜色空间是由三基色组成 亮度色度混合 肤色聚集效果差 需要转换到亮度与色度分离的模型 HSV模型 其中的脸部区域像素H分量中 效果最佳 已知的数据降维的算法有
  • Connection.setAutoCommit使用的注意事项

    setAutoCommit总的来说就是保持数据的完整性 一个系统的更新操作可能要涉及多张表 需多个SQL语句进行操作 循环里连续的进行插入操作 如果你在开始时设置了 conn setAutoCommit false 最后才进行conn co
  • Spring-messaging (STOMP) @SendTo 与 @SendToUser的区别

    SendTo 与 SendToUser 是Spring的STOMP协议中注解的标签 SendTo 会将接收到的消息发送到指定的路由目的地 所有订阅该消息的用户都能收到 属于广播 SendToUser 消息目的地有UserDestinatio
  • QRegexp、QRegularExpression的用法学习

    QRegexp QRegularExpression的用法学习 文章目录 QRegexp QRegularExpression的用法学习 QRegexp QRegularExpression 模式选项 QRegexp Regexp 由表达式
  • 11.Linux下Spark的安装配置以及spark-shell的启动和 Spark集群环境搭建

    本案例软件包 链接 https pan baidu com s 1zABhjj2umontXe2CYBW DQ 提取码 1123 若链接失效在下面评论 我会及时更新 目录 1 安装Spark 1 先用xftp将安装包传到home hadoo
  • 2.HTTP协议(Requset、Response)

    目录 http协议 http报文解析 Http请求报文 浏览器 gt 服务器 1 请求行 2 请求头 3 空行 java处理http请求的常用方法 Http响应报文 服务器 gt 浏览器 1 响应行 2 响应头 3 响应正文 实体内容 ja