全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别
文章目录
- 1. 文章引言
- 2. 简述URL
- 3. http完整请求
- 3.1 DNS域名解析
- 3.2 TCP的3次握手
- 3.3 发起http请求
- 3.4 浏览器解析html代码
- 3.5 浏览器对页面进行渲染呈现给用户
- 4. 解决404错误的方法
- 5. 补充知识点
- 5.1 cookie和session的区别
- 5.2 ChatGPT的介绍
1. 文章引言
正赶上最近ChatGPT
很火,于是借助ChatGPT
来解释HTTP Status 404
,如下所示:
HTTP Status 404:
The HTTP Status 404 means that the requested resource was not found on the server. This is commonly used in response to a failed HTTP request and can be caused by mistyping an URL, spelling mistakes, or trying to access a file or resource that no longer exists.
可惜的是,ChatGPT
给出的是英文的解释,我们不妨翻译成中文,如下所示:
HTTP
状态404
表示在服务器上找不到请求的资源。这通常用于响应失败的 HTTP 请求,可能是由于键入错误的URL
、拼写错误或尝试访问不再存在的文件或资源引起的。
根据翻译可知,如果我们请求的资源在服务器中不存在,或者资源虽然存在,但我们发送的请求(URL
)在服务器没有找到该所需资源,便会报出404
的错误。
404
错误也是互联网上最常见的错误之一,该错误消息可能与server not found
(无法找到服务器)或其他类似消息产生混淆。
2. 简述URL
上文提到了URL
,出现404
最常见的的是路径(URL
)错误。
那么什么是URL
,它有怎么样的魅力?接下来我便分析它。
URL
的全称是Uniform Resource Locator
,中文翻译是统一资源定位符
,又叫统一资源定位器、定位地址、URL地址
,俗称网页地址或简称网址。
正如其名,就是用于定位服务的资源在哪?发送的Request
去哪里找,然后,服务器再做出逻辑响应(Response
)。
- 统一资源定位符的标准格式如下:
[协议类型]://[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]
- 统一资源定位符的完整格式如下:
[协议类型]://[访问资源需要的凭证信息]@[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]
比如此URL
:http://127.0.0.1:8081/user/list?kerword=test&username=jack
,其中格式如下:
-
http
是协议 -
127.0.0.1
是服务器地址 -
8081
是服务器上的端口号 -
/user/list
是路径 -
其中
/
分隔目录和子目录。 -
?kerword=test&username=jack
是查询。
?
分隔实际的URL
和参数,这里很容易出错。
&
用于参数间的分隔符,=
等于(不是赋值)。
除此之外,还有+
表示空格,#
表示书签。
数据(除了数字)都会转换成以UTF8
的URL
编码。
格式需要注意的地方:
-
一般使用
Tomcat
和nginx
等服务器启动的项目,需要查看端口是否正确。 -
协议名
http/https
,域名或者ip
地址是否有误? -
/
分割符,以/
区别路径中的每一个目录名称。这样我们我们可以根据URL
一层层的去查找我们项目的目录,分析出现404
可能的原因是否为路径错误或者资源不存在。 -
&
表示的参数可以预估其值是否达到预期
3. http完整请求
我们为什么了解http请求
呢?
了解http
请求的过程有助于我们理解web
的大体运行流程。
总体流程如下:
-
先域名解析
-
然后发起
TCP
的3
次握手 -
其次建立
TCP
,连接后发起http
请求 -
再次服务器响应
http
请求,浏览器得到html
代码 -
接着浏览器解析
html
代码,并请求html
代码中的资源(如js、css、图片等
) -
最后浏览器对页面进行渲染呈现给用户。
接下来,我便详细讲解它们都干些什么?
3.1 DNS域名解析
dns
是什么?
它使用UDP
传输的方式,将主机域名转换为ip
地址,属于应用层协议,。
dns
工作原理:
-
主机向本地域名服务器的查询一般都是采用递归查询。
-
本地域名服务器向根域名服务器的查询的迭代查询。
-
当用户输入域名时,浏览器先检查自己的缓存中是否存在这个域名映射的
ip
地址,有则解析结束。 -
若没命中,则检查操作系统缓存(如
Windows
的hosts
)中有没有解析过的结果,有则解析结束。 -
若无命中,则请求本地域名服务器解析(
LDNS
)。 -
若
LDNS
没有命中,就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS
一个主域名服务器地址。 -
此时
LDNS
再发送请求给上一步返回的gTLD
( 通用顶级域), 接受请求的gTLD
查找并返回这个域名对应的Name Server
的地址。 -
Name Server
根据映射关系表找到目标ip
,返回给LDNS
。 -
LDNS
缓存这个域名和对应的ip
, 把解析的结果返回给用户,用户根据TTL
值缓存到本地系统缓存中,域名解析过程至此结束。
-
dns
解析的整体流程如下图所示:
3.2 TCP的3次握手
tcp
为什么要三次握手?是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
三次握手过程如下:
-
第一次握手:建立连接时,客户端发送
syn
包(syn=j
)到服务器,并进入SYN_SEND
状态,等待服务器确认。 -
第二次握手:服务器收到
syn
包,必须确认客户的SYN(ack=j+1)
,同时自己也发送一个SYN
包(syn=k)
,即SYN+ACK
包,此时服务器进入SYN_RECV
状态。 -
第三次握手:客户端收到服务器的
SYN+ACK
包,向服务器发送确认包ACK(ack=k+1)
,此包发送完毕,客户端和服务器进入ESTABLISHED
状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,如下图所示:
有人问会不会因为丢包而导致404
错误?可能性极小,这里不得不提TCP是如何保证可靠传输的
(与上面三次握手协议都是校招面试的重点),如下所示:
-
三次握手
-
将数据截断为合理的长度。应用数据被分割成
TCP
认为最适合发送的数据块(按字节编号,合理分片) -
超时重发。当
TCP
发出一个段后,它启动一个定时器,如果不能及时收到一个确认就重发 -
确认应答:对于收到的请求,给出确认响应
-
校验和:校验出包有错,丢弃报文段,不给出响应
-
序列号:对失序数据进行重新排序,然后才交给应用层
-
丢弃重复数据:对于重复数据 , 能够丢弃重复数据
-
流量控制。
TCP
连接的每一方都有固定大小的缓冲空间。TCP
的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出 -
拥塞控制。当网络拥塞时,减少数据的发送
3.3 发起http请求
http
是一个无状态的请求/响应协议,但是这不能满足现在的业务。
因此,出现了用于保存状态的cookie
和session
。
一个完整的HTTP
请求报文包括请求行(request line
)、请求头部(header
)、空行和请求数据四个部分组成。如下图所示:
当然,我们也可以打开浏览器(如chrome,edge,火狐等
)的调试模式:
-
F12
进入到调试模式 -
找到
Network
(edge
浏览器叫做网络) -
查看信息。
【注意】如果你的F12
不生效,可以尝试使用fn + F12
。若这样还不生效,可以点击鼠标右键,找到并单击检查即可。
打开浏览器的调试模式后,你会看到很多请求信息或响应信息,我们也可以基于它们进行开发操作,如下图所示:
我们再了解HTTP
请求的常见方法:GET,POST,DELETE,TRACE ,CONNECT
。
3.4 浏览器解析html代码
浏览器在解析html
代码时,并请求html
代码中的资源(如js
、css
、图片等)。
html
页面主要由dom
、css
、javascript
等部分构成,还可能引入img
、iframe
等其他资源。
浏览器接收到html
代码,可能是一份完整的文档,也可能是一个chunk
,即开始解析。
解析过程是先构建dom
树,再根据dom
树构建渲染树,最后浏览器将渲染树绘制到页面上。
3.5 浏览器对页面进行渲染呈现给用户
什么是渲染?
渲染在电脑绘图中是指用软件从模型生成图像的过程,也就是将我们html
的逻辑转换成我们肉眼可见的对象。
具体参看博客:浏览器渲染过程与性能优化
4. 解决404错误的方法
- 目录不能被引用。
可以在Eclipse
的包资源管理器(Package Explorer)
检查文件存放的位置。
由于META-INF
和WEB-INF
文件夹下的内容不对外发布,如果你引用了带这两个目录的文件,肯定是不允许,如下URL地址就是错误的:
http://localhost:8081/testProject/WEB-INF/index.html
-
URL
输入错误,如下为排错方法:-
先查看
URL
的IP
地址和端口号是否书写正确。 -
其次查看上下文路径是否正确,比如
Project -> Properties -> MyElipse -> Web -> Web Context-root
,检查这个路径名称是否书写正确。 -
最后检查一下文件名称是否书写正确。
-
-
未部署
Web
应用 -
Tomcat
器中web.xml
中的问题
假如,你的web
应用程序有多个jsp
页面,当你点击web
应用程序的虚拟根目录时,可能会出现404错误
。
此时,你只需要修改Tomcat
服务器中web.xml
,如下代码所示:
<!-- 将false修改为true -->
<init-param><param-name>list</param-name> <param-value>false</param-value>
</init-param>
如果在6.0.18
版本error
:The requested resource () is not available.
总是无法访问/myapp/*.jsp
文件,可以将 /ROOT
中build.xml
文件copy
一份到myapp
。
【注意】把里面所有的ROOT
用myapp
代替, 应该就OK。
-
WEB-INF
下面必须要有几个固定的文件夹和文件-
web.xml
该web app
的配置文件 -
lib
该web app
用到的库文件 -
classes
存放编译好的servlet
-
请注意这些名字,我曾经把classes
写成class
,查错查了半宿还没解决。
所以,写这些时千万要仔细,要不会浪费更多的精力去查错。
- 如果运行的是
servlet(.class)
文件,而非.jsp
文件,需在web.xml
中加上以下字段:
<servlet><servlet-name>TestServlet</servlet-name><servlet-class>TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/TestServlet</url-pattern></servlet-mapping>
其中,TestServlet
改为你要运行的文件名。
【注意】web.xml
是WEB-INF
下面的。
struts.xml
配置错误
可能是你的Action
值写错,或者链接URL
写错。
比如commons-lang3-3.1.jar
文件到WEB-INF/lib
目录下,struts2
最新的web
开发包如下:
当然,如果你的是maven
项目,直接在pom.xml
中引入jar
包即可,如下所示:
<!--apache配置开始-->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version>
</dependency>
<!--apache配置结束-->
- 检查同一个项目,是否启动了多个
java
服务
有时,后台没有关闭之前的服务,你又重新启动,可能会报错404
。
5. 补充知识点
5.1 cookie和session的区别
-
存储的位置不同:
-
cookie
:存放在客户端 -
session
:存放在服务端,session
存储的数据比较安全
-
-
存储的数据类型不同:两者都是
key-value
的结构,但针对value
的类型是有差异的:-
cookie
:value
只能是字符串类型 -
session
:value
是Object
类型
-
-
存储的数据大小限制不同:
-
cookie
:大小受浏览器的限制,很多是是4K
的大小 -
session
:理论上受当前内存的限制
-
-
生命周期的控制,
cookie
的生命周期随着浏览器关闭而消亡。-
cookie
的生命周期是累计的,从创建时,就开始计时,30分钟后,cookie
生命周期结束 -
session
的生命周期是间隔的,从创建时,开始计时如在30分钟,没有访问session
,那么session
生命周期被销毁
-
5.2 ChatGPT的介绍
之前喜欢使用谷歌翻译报错的信息,自从出现了ChatGPT
,便喜欢使用ChatGPT
来翻译。
如果你想了解什么是ChatGPT
以及它的用法,可以点击如下链接:
-
全网最详细的介绍ChatGPT
-
ChatGPT、低代码等技术出现会不会导致底层程序员失业
-
全网推荐7款github上有趣的ChatGPT的应用源码
-
如何调用ChatGPT的API接口到官方例子的说明以及GitHub上的源码应用
-
全网详细解读基于java调用ChatGPT的API接口
相关文章:
全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别
文章目录1. 文章引言2. 简述URL3. http完整请求3.1 DNS域名解析3.2 TCP的3次握手3.3 发起http请求3.4 浏览器解析html代码3.5 浏览器对页面进行渲染呈现给用户4. 解决404错误的方法5. 补充知识点5.1 cookie和session的区别5.2 ChatGPT的介绍1. 文章引言 正赶上最近ChatGPT很火…...
Django图书商场购物系统python毕业设计项目推荐
mysql数据库进行开发,实现了首页、个人中心、用户管理、卖家管理、图书类型管理、图书信息管理、订单管理、系统管理等内容进行管理,本系统具有良好的兼容性和适应性,为用户提供更多的网上图书商城信息,也提供了良好的平台&#x…...
基于模型预测控制(MPC)的悬架系统仿真分析
目录 前言 1.悬架系统 2.基于MPC的悬架系统仿真分析 2.1 simulink模型 2.2仿真结果 2.3 结论 3 总结 前言 模型预测控制是无人驾驶中较为热门的控制算法,但是对于悬架等这类系统的控制同样适用。 我们知道模型预测控制主要可以划分为三个部分: …...
Word处理控件Aspose.Words功能演示:使用 Java 拆分 MS Word 文档
Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外,API支持所有流行的Word处理文件…...
图扑数字孪生智慧机场,助推民航“四型机场“建设
前言 民航局印发的《智慧民航建设路线图》文件中,明确提出智慧机场是智慧民航的四个核心抓手之一。并从机场全域协同运行、作业与服务智能化、智慧建造与运维方面,为智慧机场的发展绘制了清晰的蓝图。 效果展示 图扑软件应用自主研发核心产品 HT for …...
内网安装管家婆软件如何实现外网访问?内网穿透的几种方案教程
管家婆软件从网络架构上分两种版本:web(浏览器http端口)访问的版本和客户端(211固定端口sqlserver数据库)访问的版本。公司库管经常用仓库登录管家婆,一旦需要在公司外部登陆访问管家婆客户端,就…...
CCNP350-401学习笔记(1-50题)
1、Which function does a fabric edge node perform in an SD-Access deployment?A. Connects endpoints to the fabric and forwards their traffic. B. Encapsulates end-user data traffic into LISP. C. Connects the SD-Access fabric to another fabric or external La…...
基于微信小程序的新冠肺炎服务预约小程序
文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…...
网站项目部署在k8s案例与Jenkins自动化发布项目(CI/CD)
在K8s平台部署项目流程 在K8s平台部署Java网站项目 制作镜像流程 第一步:制作镜像 使用镜像仓库(私有仓库、公共仓库): 1、配置可信任(如果仓库是HTTPS访问不用配置) # vi /etc/docker/daemon.json { "…...
网络原理 (1)
网络原理 文章目录1. 前言: 2. 应用层2.1 XML2.2 json2.3 protobuffer3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 (重点)1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 :三次握手3.2 断开连接 : 四次挥手4. 滑动窗口5. 流量…...
LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】
LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】题目描述:解题思路一:前缀和。前缀和来记录边长。解题思路二:0解题思路三:0题目描述: 给你一个由若干 0 和 1 组成的二维网格 grid,请…...
windows10/11,傻瓜式安装pytorch(gpu),在虚拟环境anaconda
安装anaconda地址 :Anaconda | The Worlds Most Popular Data Science Platform安装选项全默认点击next就行。查看支持cuda版本cmd命令行输入nvidia-smi。下图右上角显示11.6为支持的cuda版本。要是显示没有nvidia-smi命令。得安装nvidia驱动,一般情况都…...
Revit导出PDF格式图纸流程及“批量导出图纸”
一、Revit导出PDF格式图纸流程 1、点击左上方“应用程序菜单”即“R”图标,进择“打印”选项。 2、在弹出的对话框中,需要设置图纸“打印范围”,选择“所选的视图/图纸选项”,点击“选择”,按钮,选择我们需…...
【自学Linux】 Linux文件目录结构
Linux文件目录结构 Linux文件目录结构教程 在 Linux 中,有一个很经典的说法,叫做一切皆文件,因此,我们在系统学习 Linux 之前,首先要了解 Linux 的文件目录结构。Linux 主要的目录有三大类,即根目录(/)&a…...
如何让APP在Google Play中成为特色
Google Play覆盖了 190 多个地区,数十亿的用户,所以开发者都会希望APP在应用商店中获得推荐位。 Google Play 上的精选热门应用类型:热门游戏或应用,畅销应用,安装量增长的应用,产生最多收入的应用。 那么…...
【C++】cin的处理过程
使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据 类型是什么,输入一开始都是字符数据——文本数据。然后,cin对象负责将文本转换为其他类型。 为说明这是如何完成的,来看…...
读取Sentinel和Landsat 压缩包数据,直接进行波段重组、影像裁剪或者匀色镶嵌处理
波段重组在软件中查找:菜单栏-》影像基本处理-》波段处理-》波段重组,弹出如下对话框:根据对话框中的提示,输入需要处理的数据。注意:1、输入数据添加之后,需要点击其中任意一条数据,获取数据波…...
Yakit Web Fuzzer 终极能力强化:热加载 Fuzz
Background 在 HTB:BountyHunter 中,我们发现 Web Fuzzer 在使用中可以 “更强”,我们需要编写 Yak 脚本的事情,如果可以经过某些 Web Fuzzer 的优化,可以达到同样的效果。 在一个标签中,我们实现{{base6…...
Qt新手入门指南 - 如何创建模型/视图(三)
每个UI开发人员都应该了解ModelView编程,本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今ÿ…...
【Spring】手动实现简易AOP和IOC
前言 XML:通过Dom4j对XML进行解析和验证。 IOC:通过获取要创建对象的Class类型、构造函数后,通过反射来实现。 AOP:通过使用JDK动态代理和Cglib动态代理实现。 一、解析XML 1.1、解析bean标签 /*** 解析bean标签* param xmlBean…...
EasyExcel的使用
这里写目录标题先导入依赖最简单的写最简单的读項目开发中的一些操作xml一定要默認放先导入依赖 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version><…...
基础篇(-1)-java特点、JDK、JRE、JVM区别、字节码编译、跨平台、程序运行
文章目录1.Java的特点有哪些?2.JDK和JRE和JVM的区别3.Java为什么采用字节码编译?4.什么是跨平台?5.Java程序从源代码到运行需要三步?1.Java的特点有哪些? Java是一种编程语言,被特意设计用于互联网的分布式…...
【网络编程】Java快速上手InetAddress类
概念 Java具有较好的网络编程模型/库,其中非常重要的一个API便是InetAddress。在Java.net 网络编程中中有许多类都使用到了InetAddress 这个类代表一个互联网协议(IP)地址。 IP地址是一个32(IPV4)位或128(…...
小小bat-day1-自动文件上传
前言:日常服务器备份文件或者生产设备等数据文件都统一保存至文件服务器,进行日志分析或者将生产文件CSV、图片等转存至数仓进行数据分析,尤其生产的部分数据是保存在个人电脑的PC端,数据杂,获取困难,手动整…...
2023年美赛D题公布
问题D:联合国可持续发展目标的优先次序背景联合国制定了17项可持续发展目标(SDGs)。实现这些目标最终会改善世界各地许多人的生活。这些目标并不是相互独立的。所以,在某些目标上的积极收获通常是有影响的(积极的或消极的,有时两者都有)。这种相互联系使…...
Gartner 再度预测2023低代码趋势,真的会赚钱吗?
2023年,从业者对低代码的发展充满了想象,人们认为,未来低代码的商业价值不可估量。 此话并非空穴来风。据Gartner的最新报告显示,到2023年,超过70%的企业将采用低代码作为他们发展战略的关键目标之一;到202…...
Zebra ZT410 ZT411 导入中文字体
1.设置--发送到打印机 2.字体--添加--下载 --windows 字体库下载到zebra 打印机 3.字体--工具--调用 ZEBRA驱动包中驱动。 4.老版打印机导入方式 Zebra ZPL条形码打印机上如何下载和使用TrueType或External字体-敏用数码(上海北京济南洛阳)|专注于条码数据处理 (chongshang.co…...
nextTick 的使用和原理(面试题)
答题思路: nextTick 是做什么的?为什么需要它?开发时什么时候使用?介绍一下如何使用nextTick原理解读,结合异步更新和nextTick生效方式 1. nextTick是做什么的? nextTick是等待下一次DOM更新刷新的工具方法…...
Hudi系列19:Hudi写入模式
一. Changelog 模式 如果希望 Hoodie 保留消息的所有变更(I/-U/U/D), 之后接上 Flink 引擎的有状态计算实现全链路近实时数仓(增量计算), Hoodie 的 MOR 表通过行存 原生支持 保留消息的所有变更(format 层面的集成), 通过流读MOR 表可以消费到所有的变…...
Kubernetes安全
Kubernetes RBAC授权 Kubernetes 安全框架 K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。1. Authentication(鉴权) K8s Apiserver提供三种客户端身份认证:• H…...
百度不让访问危险网站怎么办/站长工具同大全站
https://blog.csdn.net/qq_16234613/article/details/79436941...
北京大兴专业网站建设公司/防疫优化措施
前言 很对一定工作年限的读者相信都遇到把老项目重构成技术比较新的项目,比如,笔者之前就是把一些MVC的项目重构为springcloud项目等,这一路上消耗的时间不亚于重写写一个项目,后来发现了重构项目的神器,在这里供读者…...
百度搜索什么关键词能搜到网站/seo高级教程
在使用zend framework的时候,最先引入的一定是AutoLoad的机制,这里就想分析下Zend的AutoLoad是怎么引入的。 代码示例 12345678910111213set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path());require_once Zend/Loader/Autoloader.ph…...
如何seo网站推广/seo推广培训中心
笔者最近对爱机进行了升级,CPU为P4赛扬1.7GHz,主板为美达845D。由于本人对《魔兽争霸》相当着迷,为了追求更好的游戏效果和更快的游戏速度,于是对爱机进行了超频。 由于此款主板支持线性超频,在不加电压的情况下&#…...
o2o网站建设资讯/网络推广比较经典和常用的方法有
配置如下:cpu: 扣肉 E6300HDD:WD 250G(SATAII 16M)mother board: foxconn 946GZpower:长城350Wmemory:DDR2 667 1G*2测试一段时间稳定后会托管起来,至于做什么用途,我暂时还没有明确的方向。我想尝试的是提供asp服务。当然如果有客户需要&…...
做普通网站公司吗/抓关键词的方法10条
当我们需要使用Java进行程序开发时,首先必须安装jdk,然后根据jdk的安装目录配置Java环境变量,那么如何来配置Java环境变量呢?java环境变量如何配置对于Java程序开发而言,主要会使用JDK的两个命令:javac.exe…...