栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Web基础、HTTP抓包

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Web基础、HTTP抓包

Java学习打卡:第93天

javaWeb — Web基础

内容导航
      • 如何不写端口号访问?
      • 只写域名就可以访问 ROOT
      • 资源应用很多时路径如何提示
    • HTTP协议
      • 请求request和响应response
      • 浏览器自动的请求
      • HTTP的协议
      • HTTP协议的组成
        • 请求协议
        • 响应协议
      • 状态码
      • 默认的错误界面 配置404
      • GET请求和POST请求

JavaWeb


Web基础、HTTP


前面已经分享了对于Servlet的基本认识和使用Eclipse编写Web程序的准备

昨天分享了关于虚拟主机的问题,一个引擎中可以有多个主机,除了localhost,还有虚拟主机;每一个主机对应一个域名。这里产生一个新的问题: 当直接输入127.0.0.1,访问的是谁?

  • 答案是localhost,而不是cfeng.com;为什么呢?

答案是因为Engine的默认主机是localhost;在server.xml中;Engine的defaultHost = “localhost”

想要修改就直接改变默认主机就可以,但是修改之后一定要记得重启服务器

如何不写端口号访问?

之前访问的时候都要写localhost:8080访问,那可不可以不写就可以访问呢?

  • 浏览器的特性: 如果不写端口号,默认访问端口号80;所以这里在server.xml中将Connecter的post改为80就可以了
 
只写域名就可以访问 ROOT

我们上面的访问方式虽然优化了,不用写端口号,并且有了虚拟主机,但是必须在虚拟主机后面加上项目名称;【不用写具体资源,配置文件中web.xml中默认的欢迎页面时index.html】;那么如何实现不写项目名称也可以访问呢?

  • 首先为什么我们写localhost:8080会出现Tomcat页面呢?

这是因为Tomcat服务器输入域名的时候默认加载的界面时ROOT应用,ROOT中就是Tomcat页面;要实现只输入域名就可以访问,将项目名称改为ROOT就可以

比如将www.cfeng.com的默认引用名称改为ROOT

资源应用很多时路径如何提示

有的时候路径过于多的时候,这个时候输入Tomcat提供了一个功能App Manager;

点击登录即可,也许你没有设置密码最开始的时候,那么如何设置;直接在conf的tomcat-user.xml中设置即可


登录后的界面如下

上面会显示服务器上面所有的应用; 想访问谁,直接单击即可

HTTP协议

hyper text transfer protocol 超文本传输协议,是一个基于请求和响应模式的,无状态的网络协议,是浏览器和服务器最常用的通讯协议。HTTP协议是浏览器和服务器数据传输格式的一种约定,遵循这个约定就可以进行数据的传输【这个在计网中介绍过】

请求request和响应response

浏览器向服务器发送数据,称为请求request;服务器向浏览器发送数据,则称为响应response

  • 请求: 浏览器地址栏中通过地址访问是最常见的请求,两外,表单的提交,点击超链接,发送AJAX请求都是request; 可以通过抓包工具来拦截HTTP请求于响应,可以查看请求和响应,比如HTTPWatch

安装之后就可以进行页面的调试

这里就是当开启HttpWatch之后输入地址,软件检测到的请求【这里的破解版不要随意下载,因为有的中写入了恶意程序;博主花了一顿操作才将恶意代码给删除】

HttpWatch要注意版本的配置

浏览器自动的请求

可以看到上面的图片,本来只是输入了一个请求,但是可以看到请求有很多,这就是浏览器的自动的请求;

我们输入的地址只是手动的请求;比如css,jpg等资源也会页面也会提供协议

比如 这里我们使用HTTPWatch来观察,当再地址栏输入的www.cfeng.com:8080/的时候,弹出的请求由很多

通过观察类型,发现除了最上面的html,还包括后面页面自动提交的请求包括css,png,js等文件

HTTP的协议

客户端向服务端发送请求,它们之间必须首先创建一个TCP协议,连接关闭后TCP连接关闭,这两个连接就是基于的HTTP协议

从计算机网络的角度来说,TCP建立需要三次握手,TCP连接的关闭需要四次通信,这里不深入,计网部分会深入;在通信中真正使用的协议共有2种,HTTP1.0 和HTTP1.1

  • HTTP1.0 客户端要向服务端发送请求,必须先在它们之间建立TCP连接。客户端接收到响应后,服务端关闭TCP连接。只有上次的请求的响应接收到后,客户端才会发送第二次请求。HTTP1.0的连接输入非持久连接。服务器不跟踪和记录任何一次请求和响应【请求和响应成对出现】 也就是一次请求和响应就会关闭一次TCP连接 ---- 但是TCP的建立关闭效率低,所以请求过多的时候,效率过低;不支持虚拟主机
  • HTTP1.1 是一种持久连接。在一个TCP连接上可以建立多个HTTP请求和响应。减少了连接建立和关闭的消耗。允许客户不用等待上一次请求的响应返回就可以发送下一次请求 当所有的浏览器的请求发送完后,会发送一个TCP关闭的请求。 为防止服务器主动关闭连接,每一个请求携带参数Connection,值为close的时候关闭,支持虚拟主机【充分增加了利用率】

但是它们都是一个请求对应一个响应

HTTP协议的组成

HTTP协议由两部分组成,分别是请求协议和响应协议。分别用于指定请求和响应信息的格式

请求协议

URL和URI ;

  • URL:uniform resource locator 是统一资源定位符,互联网标准资源地址,可以确定一个唯一的资源

  • URI : uniform resource identifier 统一资源标识符 标识一个资源的名称,通过这种名称命名的资源可以通过互联网定位和访问

这里使用的抓包工具是微软的monitor

设置颜色变化后观察到了HTTP的请求和响应,这里可以看到使用的协议是HTTP1.1,并且下方显示了HTTP请求和响应的二进制文件和解析的文件

GET /baike-icon.png HTTP/1.1..Host: baikebcs.bdimg.com..User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0..Accept: image/avif,image/webp,**;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

上面是请求头,后面的都是请求的报头,最后是空白行,这里是我们的手动的请求网址,没有请求的正文

当提交表单的时候,如果选择的是get方式,那么请求的PDU还是一样的,没有正文,因为name和value直接作为URI显示在请求行

当提交表单的方式是POST的时候,URI处没有name,这些内容到了请求正文

POST /index.html HTTP/1.1
Host: www.cfeng.com:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; 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,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.cfeng.com:8080/login.html
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
													//空白行
username=zhang&pwd=123456							//请求正文

这里的请求方式是POST,所以这里就有正文,因为name和value要在请求正文中出现,而不是在URI中

响应协议

请求协议由4部分组成,响应协议也是由四部分组成,包括响应行,响应报头,空白行和响应正文

HTTP/1.1 200                                     响应行 //协议    状态码  200代表成功
Accept-Ranges: bytes                             响应报头
ETag: W/"7334-1638868098582"
Last-Modified: Tue, 07 Dec 2021 09:08:18 GMT
Content-Type: text/html
Content-Length: 7334
Date: Sat, 11 Dec 2021 12:04:40 GMT
Keep-Alive: timeout=20
Connection: keep-alive
													空白行

												响应正文
	
		
		Cfeng.com IT鍔╁姏瀛︿範
		
		
		
	
	
	……

请求的是页面,所以返回的是页面

状态码

当进行Web应用访问的时候,经常看到4开头的提示界面,这些就是HTTP指定的,服务器传递给浏览器的状态码,标识服务器对当前请求的处理状态

常用的状态码

  • 2XX : 表示请求计算机响应成功 常用的是200、
  • 4XX : 表示请求错误,常见的状态码是404,表示找不到,一般都是请求的路径有问题
  • 5XX: 表示服务端错误,常见的是500,表示服务器内的错误,一般都是服务端的java代码发生错误
默认的错误界面 配置404

当发生错误的时候,一般就显示一个404,这个界面不友好,用户体验不好,如何让自定义界面称为默认界面呢?

  • 需要在web.xml中进行配置

之前配置默认界面也是welcome-file-list welcome-page

这里的配置错误的默认界面


    404
    error.html  //自定义页面的位置

GET请求和POST请求

之前分析表单的时候就提到过,

get是得到,获取资源, 设计成缓存 没有请求正文,第二次提交和第一次提交是否相同就很好比较【如果相同就直接从缓存中取出】就做一个字符串的比较就可

post是上传,上传文件使用缓存没有意义,对于客户端没有意义 数据量太大,不好比较【并且对于音频和视频等文件,数据丢失一部分只要不影响都是可以的;允许存在差异,所以根本就没法比较】

  • GET请求方式会直接将属性放在地址栏中,组成URL中 — 但是比较敏感的数据和地址栏长度的限制,并且属性值不能为对象; 但是其好处就是使用浏览器的缓存,减少服务器的压力,发送的请求就少了;提升用户的体验

  • POST请求方式则会将属性和属性值放在请求正文中;可以提交对象数据;安全性高,数据类型可以为任意类型,包括图片,声音等文件; 但是不支持浏览器的缓存,所以再次请求还是会响应,这样服务器的效率和负担就重

一般默认的请求都是POST请求,只有表单和AJAXA请求可以选择为POST

那什么时候选择POST?

  • 提交所携带的数据不只有字符串时
  • 提交所携带的数据量比较大
  • 提交所携带的数据有敏感性,安全性要求高 pwd
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号