HTTP 协议的基本概念:请求与响应


HTTP 协议

1. HTTP 协议简介

  • 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。 所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。1960 年美国人 Ted Nelson 构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了 HTTP 超文本传输协议标准架构的发展根基。Ted Nelson 组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的 RFC(Request For Comments,请求注解),其中著名的 RFC 2616 定义了 HTTP 1.1。

a. HTTP 协议的作用

  • 互联网的数据传输底层依赖 TCP 协议,Http 协议架构在 TCP 协议之上,它规范了传输数据的内容和格式。
    在这里插入图片描述

b. HTTP 协议的应用场景

  • 智能家居:
    智能家居在我们的生活中的地位越来越重要了,手机是如何操作我们的家庭设备的呢?其实也是手机软件通过拼接参数,然后发送给智能家居的,这个过程也是需要使用到 HTTP 协议的。不管是刷屏软件还是智能家居都需要知道服务器要何种格式的数据,那么我们怎么才能知道呢?我们可以查看浏览器与服务器的通讯过程。

c. HTTP 和 HTTPS 的区别

  • HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。
  • HTTP 协议是以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息。
  • HTTPS 是以安全为目标的 HTTP 通道,是 HTTP 的安全版。为高层协议提供 数据封装(Data Encapsulation)、压缩(Compression)、加密(Encryption) 等基本功能的支持。
  • HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。

d. HTTP 的各版本

  • 1.0:1996年推出,特点是每次请求都是一个新的连接,用 TCP 协议传输;
  • 1.1:1999年推出,增加了长连接功能(即多个请求可以复用同一个连接,连接完成后不会立即关闭,而是等待其他的请求,因此多个请求可以用几个连接完成)。缺点:网络传输的都是文本(即字符串),传输效率低;不支持推送功能(先有请求再有相应),1.1 用了 webSocket 技术推送。
  • 2.0:2015年推出,针对 1.1 版本的缺点,支持了格式的压缩(将文本压缩成帧),大幅提高了传输的效率;不再用 webSocket 推送,改用 push 推送。虽然很多网站都停留在 1.1 版本,但是以后 2.0 的比例会越来越大。
  • 3.0:2019年提出的概念,要让 HTTP 改成 UDP 协议传输,UDP 传输还不太安全,现在正在试验阶段。

2. 查看 HTTP 协议中的请求

a. 浏览器查看浏览器与服务器通讯过程

  • 接下来是 HTTP 协议的具体内容,此时需要借助查看 HTTP 协议内容的工具了,一般常用的工具:Chrome 或 Firefox。
  • 以 Chrome 为例,启动 Tomcat,F12 调出 Console:
    在这里插入图片描述在这里插入图片描述
  • 换做 Firefox,启动 Tomcat,F12 调出 Console:
    在这里插入图片描述

b. HTTP 协议 get 请求方式

  1. 创建一个工程 webappPractice,在 web 文件夹中准备一个 1.html,内容为:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/webappPractice/1.html" method="post">
    <input type="text" name="username"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
  • 地址栏输入 http://localhost:8080/webappPractice/1.html 测试 get 请求;
    在这里插入图片描述

注意:get 请求没有请求体。

c. HTTP 协议 post 请求方式

  • 表单添加内容 “Regino” 然后提交,查看请求内容:
    在这里插入图片描述

3. 请求信息的组成部分

  • 学习 HTTP 请求信息的组成的目的是,了解浏览器将那些数据,按照什么样的格式发送给服务器。 HTTP 请求一共分为三个部分:请求行,请求头,请求体。知道了如何使用工具查看,接下来介绍的就是 HTTP 协议的内容。

a. 请求行

请求行:POST/webappPractice/1.html HTTP/1.1

  • POST:请求方式
  • /webappPractice/1.html:访问路径
  • HTTP/1.1:HTTP 协议的版本

get 和 post 请求方式的区别

get 请求方式 post 请求方式
数据长度是否有限制 X
是否包含请求体 X
数据是否暴露在地址栏 X

b. 请求头

  • 请求头内容:
Host: localhost:8080 (服务器的域名) 
Connection: keep-alive (网络连接是持久的) 
Content-Length: 15 (发送数据的大小,单位字节) 
Cache-Control: max-age=0 (设置缓存数据的存活时间,单位秒) 
Origin: http://localhost:8080 (指示了请求来自于哪个站点——服务器名称) Upgrade-Insecure-Requests: 1 (如果存在更安全的响应,客户端优先选择加密及带有身份验 证的响应) 
Content-Type: application/x-www-form-urlencoded (发送数据的媒体类型——发挥作用类 似后缀名:.mp3 .avi) 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 (当前系统和浏览器版本) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng, */*;q=0.8 
Referer: http://localhost:8080/day01/1.html 
Accept-Encoding: gzip, deflate, br 
Accept-Language: zh-CN,zh;q=0.9 Cookie: JSESSIONID=98006861B5044ACC8D5C7840C93C17DA

在这所有的请求头中,有两个比较重要:

Referer: http://localhost:9090/day01/1.html 上一次请求的地址 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 当前用户的系统和浏览器版本

c. 请求体

  • 请求体内容:
    get 请求没有请求体,post 请求有请求体。
    在这里插入图片描述

4. 查看 HTTP 协议中的响应

  • 使用浏览器开发工具查看响应和上文的 HTTP 协议中的请求一样,响应也分成三个部分:响应行(状态行)、响应头、响应体。
    在这里插入图片描述
    在这里插入图片描述

5. 响应内容的组成部分

a. 响应行

响应行是 HTTP 响应内容的第一行。响应行一般数据为:HTTP/1.1 200(tomcat8.5) 或者 HTTP/1.1 200 OK(tomcat7)。响应行分为三个部分:

  • HTTP/1.1:协议版本
  • 200:响应状态码
  • OK:对响应状态码的解释

常见的响应状态码

  • 200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。
  • 302 Move temporarily:重定向,请求的资源临时从不同的 URI响应请求。
  • 304 Not Modified:从缓存中读取数据,不从服务器重新获取数据。
  • 403 Forbidden:服务器已经理解请求,但是拒绝执行它,一般在权限不够的时候常见。
  • 404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现。
  • 405 Method Not Allowed:请求行中指定的请求方法不能被用于请求相应的资源。
  • 500 Internal Server Error:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

b. 响应头

常见的响应头

响应头有很多,常见的响应头如下:

  • location:重定向操作:通常告知浏览器马上向该地址发送请求,通常和响应码 302 一起使用。
  • refresh:定时刷新操作 , 指定时间后跳转到指定页面。
  • content-encoding:设置当前数据的压缩格式,告知浏览器以何种压缩格式解压数据。
  • content-disposition:通知浏览器以何种方式获取数据(直接解析数据(网页,图片文本),或者以附件方式(下载文件))。
  • content-type:实体头部用于指示资源的 MIME 类型(MIME类型:用于提示当前文件的媒体类型,例如图片为 image/png 、音频为 audio/ogg)。它的作用与传统上 Windows 上的文件扩展名相同。该名称源于最初用于电子邮件的 MIME 标准。)

注意:我的 content-type 常用的设置一般都是 “text/html;charset=utf-8”,其 中 “text/html” 用来设置浏览器以指定文件格式解析数据;“charset=utf-8” 用来响应数据的编码表,若不需要设置编码可以不写。

c. 响应体

  • 浏览器页面要解析显示的内容即是响应体的内容。
    在这里插入图片描述

原文链接:https://qwert.blog.csdn.net/article/details/105423143

发布了369 篇原创文章 · 获赞 381 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Regino/article/details/105423143
今日推荐