惠州市住房和城乡规划建设局网站,营销型企业网站建设策划,海外网站怎么浏览,wordpress 文章版本管理文章目录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很火…
文章目录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很火于是借助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]
比如此URLhttp://127.0.0.1:8081/user/list?kerwordtestusernamejack其中格式如下 http是协议 127.0.0.1是服务器地址 8081是服务器上的端口号 /user/list是路径 其中/分隔目录和子目录。 ?kerwordtestusernamejack是查询。
?分隔实际的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包(synj)到服务器并进入SYN_SEND状态等待服务器确认。 第二次握手服务器收到syn包必须确认客户的SYNackj1同时自己也发送一个SYN包synk即SYNACK包此时服务器进入SYN_RECV状态。 第三次握手客户端收到服务器的SYNACK包向服务器发送确认包ACK(ackk1)此包发送完毕客户端和服务器进入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请求的常见方法GETPOSTDELETETRACE 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.htmlURL输入错误如下为排错方法 先查看URL的IP地址和端口号是否书写正确。 其次查看上下文路径是否正确比如Project - Properties - MyElipse - Web - Web Context-root检查这个路径名称是否书写正确。 最后检查一下文件名称是否书写正确。 未部署Web应用 Tomcat器中web.xml中的问题
假如你的web应用程序有多个jsp页面当你点击web应用程序的虚拟根目录时可能会出现404错误。
此时你只需要修改Tomcat服务器中web.xml如下代码所示
!-- 将false修改为true --
init-paramparam-namelist/param-name param-valuefalse/param-value
/init-param如果在6.0.18版本errorThe 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中加上以下字段 servletservlet-nameTestServlet/servlet-nameservlet-classTestServlet/servlet-class/servletservlet-mappingservlet-nameTestServlet/servlet-nameurl-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配置开始--
dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.7/version
/dependency
!--apache配置结束--检查同一个项目是否启动了多个java服务
有时后台没有关闭之前的服务你又重新启动可能会报错404。
5. 补充知识点
5.1 cookie和session的区别 存储的位置不同 cookie存放在客户端 session存放在服务端session存储的数据比较安全 存储的数据类型不同两者都是key-value的结构但针对value的类型是有差异的 cookievalue只能是字符串类型 sessionvalue是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接口