HTTP响应

简介: HTTP响应

HTTP响应分为四个部分:

  1. 首行:HTTP/1.1(首行)  200(状态码)  OK(状态码描述)
  2. header:
  3. 空行:表示header的结束标记
  4. body:正文

HTTP状态码:描述了这次响应的结果(成功??失败??原因是啥??

  • 200:OK:成功了
  • 404:NOT FOUND:访问资源不存在——》在服务器中没找到
  • 403:FORBIDDEN:访问被拒绝(没有权限)
  • 302:Move trmporarily:重定向(类似于呼叫转换)

教务系统申请个域名,过了一段时间,要换个域名,若换了域名,那么,老学员咋整??可以配置个重定向,如果老学员访问旧域名,则自带跳转到新的域名

302这样的响应报文中,会在header里带有个location属性,通过这个属性来描述要跳转到哪个新的地址??

  • 所谓的重定向是指:可以重定向到外部资源的(跳转到别的网站)

下面我们来看一个图,来了解一下重定向与请求转发之间的区别??

  • 505:服务器内部错误(服务器代码抛异常了)
  • gateway timeout(响应时间太久了,浏览器等不了了)

其实,这么多状态码,可以分为几个大类的:

  • 2**:成功
  • 3**:重定向
  • 4**:客户端错误
  • 5**:服务器错误

HTTP协议里,有不少地方是程序员可以自定义的!!

  1. URL中的路径
  2. URL中的query string
  3. header中的键值对
  4. header中的cookie的键值对
  5. body

学习HTTP很好的办法,就是写爬虫,写一个程序,作为HTTP客户端,构造各种HTTP请求,通过这些请求,来获取你想要的一些效果~~,当然,爬虫犯法,轻易不做!!

那么,我们如何来构造一个HTTP请求呢??(代码)

对于GET/POST请求,我们可以通过form标签来进行构造,这也是比较常见/重要的前后端交互的方式!

对于GET请求,可以通过在form标签中设置method属性为"get"来构造HTTP请求。例如:

<body>
    <form action="https://sogou.com" method="get">
        <input type="text" name="key" value="value">
        <input type="submit" value="提交">
      </form>      
</body>

在这个例子中,当用户点击提交按钮时,浏览器会发送一个GET请求到"https://sogou.com"。

根据结果,我们可以看到,这个请求,搜狗的服务器没有做啥特别的处理,仍然是普普通通的返回搜狗的主页了!!

当然,在后续咱们自己写的服务器代码,就可以根据需要,来获取URL中的query string ,从而完成不同的功能!!

form标签只能构造GET和POST,无法构造PUT,DELETE,OPTIONS等方法的请求!!

另外还有一种功能更强大的,构造http请求的方式,Ajax(读法:阿加克斯)

Ajax也是浏览器提供的一种,通过js构造http请求的方式!!

a——》异步的!asynchronize

  1. 同步的等待:我一直死死盯着女神宿舍门口,等待对象一露头,就立马扑上去!
  2. 异步的等待:我找个阴凉地方坐下,并拿出一本Java书,读得津津有味,等到对象出来以后,她再来喊我~~

综上:A等待B

  • 同步:A始终盯着B,A负责关注B啥时候就绪
  • 异步:A不盯着B,B就绪之后主动通知A

HTML中,通过Ajax的方式发起HTTP请求,就属于“异步”的方式!

这一行代码执行“发送请求”,操作之后,不必等待服务器响应回来,就可以立即先往下执行,当服务器的响应回来了之后,再由浏览器通知到咱们的代码中!

那么,在代码中,如何使用Ajax呢??

  1. js原生提供了Ajax的api,但是原生api特别难用!!
  2. jquery提供的Ajax,api针对原生api的封装,简单很多!!
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- <form action="https://sogou.com" method="get">
        <input type="text" name="key" value="value">
        <input type="submit" value="提交">
      </form>       -->
      <!-- 引入jquery -->
      <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
      <script>
            $.ajax({
    type: "GET",
    url: "https://www.sogou.com?studentName=zhangsan",
    success: function(data) {
        console.log("当服务器返回的响应达到浏览器之后,浏览器触发该回调,通知到咱们的代码中");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log("请求失败,错误信息:", textStatus, errorThrown);
    }
    });
    console.log("浏览器立即往下,执行后续代码");
      </script>
</body>
</html>

注意:该代码直接执行,只能看到构造的请求,无法获取到正确的响应,因为,发送请求给搜狗的服务器,人家的服务器没有处理咱们的响应,等后面咱们自己能写服务器了之后,就可以给咱们自己的服务器发请求,自然就能够处理了!!

和form标签相比,Ajax功能更强!

  1. Ajax支持PUT ,DELETE等方法
  2. Ajax发送的请求可以灵活设置header
  3. Ajax发送的body也是可以灵活设置的

测试——》免不了需要构造HTTP,写代码构造吗??

其实还有更方便的构造HTTP请求的方式:使用第三方工具:postman

postman(课堂上使用的,也是未来在各大公司经常用的)

postman可以生成构造请求的代码,方便咱们在自己的程序中集成!!

HTTPS——》HTTP+安全层(SSL):SSL是用来加密的协议(SSL/TLS)

在这里,就需要提一下:臭名恶照的运营商劫持事件!

网络上,如果文明传输数据是非常危险的!!需要加密才能保证安全!!

HTTPS其实主要是涉及到其中的SSL部分!

SSL并非仅仅是在HTTPS中使用,在其他地方也可也使用!

进行安全传输核心就是加密!

加密:其中一种最简单有效的办法,叫做:对称加密!!

a(明文)+key(密钥)——》b(密文)  :加密的过程

b(密文)+key(密钥)——》a(明文)  :解密的过程

对称加密的安全性的前提是:密钥不能被黑客知道!!

非对称加密:

服务器生成的一对密钥:公钥+私钥

明文+公钥——》密文  :使用公钥加密

密文+私钥——》明文  :使用私钥解密

当然反过来也可以:

明文+私钥——》密文  :使用私钥加密

密文+公钥——》明文  :使用公钥解密

公钥可以公开,私钥是私藏的!

在这儿就不得不说一下著名的:中间人攻击事件了!(感兴趣的可 自行百度搜索)中间人攻击_百度百科

解决中间人攻击的关键,在于让客户端能够辨别,当前这个响应(公钥)是服务器真实的公钥

这就需要引入一个“证书”(本质上是引入第三方的公证机构!)

  1. 引入对称加密,针对业务数据
  2. 让服务器生成一对非对称密钥,公钥1 和私钥1,把公钥1连同证书一起发送给客户端(自己持有私钥)
  3. 客户端拿到证书进行校验,拿着颁发证书的认证机构提供的公钥2,对于证书的签名进行解密,计算校验和是否匹配
  4. 客户端拿着服务器发来的公钥1针对对称密钥进行加密,发给服务器!
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
19天前
Servlet 教程 之 Servlet 服务器 HTTP 响应 2
Servlet教程讲解了如何通过HttpServletResponse设置HTTP响应,包括编码URL、添加cookie、设置报头、控制缓冲区、发送错误或重定向响应。方法如encodeURL、addCookie、sendError、sendRedirect等,涉及状态码、报头、字符编码和内容长度的管理。
21 2
|
4月前
|
存储 缓存 API
HTTP 请求的响应头部字段 Cache-Control 的值为 no-store 是什么意思
HTTP 请求的响应头部字段 Cache-Control 的值为 no-store 是什么意思
75 0
|
19天前
|
XML Java 数据格式
Servlet 教程 之 Servlet 服务器 HTTP 响应 3
`Servlet`教程示例展示了如何创建一个HTTP响应,使用`@WebServlet(&quot;/Refresh&quot;)`的`Refresh`类继承`HttpServlet`。在`doGet`方法中,设置了`Refresh`头以每5秒自动刷新,并用`setContentType(&quot;text/html;charset=UTF-8&quot;)`设定内容类型。还使用`Calendar`和`SimpleDateFormat`获取并格式化当前时间显示。相应的`web.xml`配置指定了Servlet路径。当访问此Servlet时,页面将每5秒更新一次显示的系统时间。
20 4
|
10天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的HTTP请求的重要性和详细过程
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
20天前
|
存储 缓存
Servlet 教程 之 Servlet 服务器 HTTP 响应 1
Servlet服务器的HTTP响应包括状态行(如HTTP/1.1 200 OK)、响应头部(如Content-Type, Cache-Control)和HTML文档。关键头部有:Allow指示支持的请求方法;Cache-Control定义缓存策略;Content-Type指定MIME类型;Expires和Last-Modified管理缓存;Location用于重定向;Set-Cookie用于设置cookie。
26 8
|
1月前
|
前端开发 应用服务中间件 nginx
使用nginx-http-concat资源请求合并功能 优化网站响应
使用nginx-http-concat资源请求合并功能 优化网站响应
12 0
|
2月前
|
网络协议 网络安全 API
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
53 1
|
3月前
|
XML JSON 中间件
|
3月前
|
Java
【JavaEE初阶】 HTTP响应报文
【JavaEE初阶】 HTTP响应报文
|
3月前
|
数据采集 JSON Java
HttpClient:HTTP GET请求的服务器响应输出
HttpClient:HTTP GET请求的服务器响应输出