美文网首页
问题:使用不对的http协议发送请求

问题:使用不对的http协议发送请求

作者: 张培_ | 来源:发表于2017-11-05 17:48 被阅读20次

情景描述

  • 使用nginx反向代理服务器
  • 服务器支持https协议
  • 发送请求的时候将url写成了http开头
  • 发现服务器返回错误org.xml.sax.SAXParseException: The element type "hr" must be terminated by the matching end-tag "</hr>"

矛盾点

  • 单纯分析错误发现是由于
    标签没有闭合造成的异常,那么正常思路就是去找找服务器中哪里发送了这个html。所以我到服务器全局搜索
    这个标签都没有找到。完全没了解决思路。
  • 我们在编写html文件的时候明明
    是可以没有</hr>的,为什么在这里会抛出异常?

是什么SAXParseException异常?

  • SAX知识补充:

    • SAX(simple api for xml):是一种XML解析的替代方法
    • SAX相比于DOM,是一种速度更快,更有效的解析XML文件的方式
    • 原理:它逐行扫描文档,一边扫描一边解析,可以在解析文档的任意时刻停止解析。

    总结:由上可以知道SAX专门用来解析XML文件,并且边扫描边解析。服务器解析xml的时候,解析到


    然后发现有问题然后抛出异常。
  • get到的非技术相关:

    • 看到一个异常被抛出:
      • 为什么抛出异常(其实就是异常message)
      • 这是什么异常(可以帮助你更多的了解上下文)
      • 什么抛出的(上一个问题基本可以帮助你定位)
    • 但是其实光看message有时候是可以定位错误的
  • 这个时候可以解释矛盾点二:

    • 首先在html中<hr>可以不闭合
    • 但是我们这是xml文件

XML和HTML的区别又是啥

    • XML:可扩展标记语言
    • HTML: 超文本标记语言
    • 相同点:
      • 都是标记语言,用于数据的保存和传输
    • 不同
      • 虽然都是跨平台标记语言:
        • xml:很多的编程语言都可以读取其中数据(由于很多语言都内置了xml解析器)
        • html:不同浏览器都可以解析html语言,并且将他显示出来。
      • 服务对象:
        • xml:主要用于数据存储,重点在于数据能够被读取识别,因此是数据传输的一种很好的格式。但是不用于显示,浏览器无法识别。
        • html:相当于一种标准,定义了一堆标签重点在于显示,不在于数据。
      • 自定义标签:
        • xml:可以自定义标签扩展性好
        • html:由于是一种w3c标准。为了任何浏览器都可以识别标签,绝对不可以自定义,因此扩展性差。
      • 语法
        • xml:严格要求嵌套、配对,并遵循DTD的树形结构;区分大小写;属性值必须分装在引号中;所有的属性都必须带有相应的值;空白部分不会被解析器自动删除;xml比html 语法要求更严格
        • html:不要求标记的嵌套、配对等;不区分大小写引号是可用可不用的;可以拥有不带值的属性名;过滤掉空格;
  • -----> 结论:其实最大的差距在于用途不一致:html主要的用途就是在浏览器显示focus在如何显示出数据。而xml主要在于数据的传输,focus在如何更加方便各种语言阅读数据。

  • -----> 和问题相关的结论:xml的语法要求严格因此对于html中可以不封闭的
    标签在xml中会报错。response中HEADER的accept可以是XML也可以是HTML。因此可以大胆猜测:服务器以为自己(约定)收到的是XML的response,因此使用xml解析器去解析,但是实际发送过来的却是html。因此gateway的response出错

  • ----> 类比:其实这个问题类似于我曾经在浏览器中看到过不能找到< 这样的错误。就是由于HEADER中的Accept告诉浏览器发送过来的是一个html文件,但是实际发过来的可能是js文件因此一定不是<开头

到底是哪里来的html里面带了

  • 首先判断这肯定是错误情况出现的,所以可以看看错误的请求能得到什么response。这里我还是求助了老师,发现当我请求了一个错误的路径,nginx会返回404not found其中的response是
 <html>
    <head><title>404 Not Found</title></head>
    <body bgcolor="white">
    <center><h1>404 Not Found</h1></center>
<hr>
<center>nginx/1.10.3</center>
</body>
</html>`
恰巧有hr。
  • 因此错误可以这样理解,gateway服务器请求某个错误的url,nginx由于没有资源返回了404 html,但是gateway本来应该约定收到xml,因此出错。

使用错误的协议发请求

  • 例子:url使用http发送请求到https服务器一定会导致请求failed而且什么内容都拿不到。
  • 如何避免:看清楚你服务器启动时候的log信息:他会给你打印:
    • 端口号
    • 协议类型

反思

  • 当看到服务器抛出异常没有一种冷静逻辑的分析思路,思维发散。试一下试不出来就换方法。简单的说还是在碰运气。

action

  • 以后看到问题,需要先构思解决思路。告诉自己首先应该干什么如果。。然后怎么样。。必须有思路,并且问题解决完毕必须说明为什么出现这个问题。

相关文章

  • 问题:使用不对的http协议发送请求

    情景描述 使用nginx反向代理服务器 服务器支持https协议 发送请求的时候将url写成了http开头 发现服...

  • 图解HTTP 第二章

    HTTP时不保存状态的协议HTTP是一种无状态协议,HTTP协议不对请求和响应之间的通信状态进行保存.协议对应发送...

  • Cookie与Session

    由于HTTP协议是无状态协议,它不对之前发送过的请求和响应的状态进行管理,即无法通过上一次请求的状态来对本次请求进...

  • 1.权限认证窥视

    一、从http协议的无状态性说起   HTTP 是无状态协议,它不对之前发送过的请求和响应的状态进行管理。也就是说...

  • HTTPDNS优势和未来

    HTTPDNS使用HTTP协议进行域名解析,代替现有基于UDP的DNS协议,域名解析请求直接发送到阿里云的HTTP...

  • JAVA网络编程与异常处理(1)

    一、使用RestTemplate工具类发送HTTP请求(1)使用RestTemplate发送HTTP请求的具体步骤...

  • 《图解HTTP》笔记(二)

    HTTP协议 Http是一种无状态协议。协议对于发送过的请求和响应之间的通信状态不进行保存。 客户端发送HTTP请...

  • SOAPUI及其原理简介

    一、soapUI简介 SOAP: WebService通过Http协议发送请求和接收结果时,发送的请求内容和...

  • TCP/HTTP/Socket

    HTTP和Scoket通信的区别。 http是客户端用http协议进行请求,发送请求时候需要封装http请求头,并...

  • web一页纸

    简单理解: 1、client通过http协议发送get,post等请求。 2、web sever实现了http协议...

网友评论

      本文标题:问题:使用不对的http协议发送请求

      本文链接:https://www.haomeiwen.com/subject/aznnextx.html