一篇文章让你重学HTTP!

简介: 一篇文章让你重学HTTP!

http和https有什么区别?

HTTP

超文本传输协议(HTTP)(HyperText Transfer Protocol)

是用于传输诸如 HTML 的超媒体文档的应用层协议,是互联网上应用最为广泛的一种网络协议。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)(安全的 HTTP)是 HTTP 协议加密版本

它通常使用 SSL 或者 TLS 来加密客户端和服务器之间的所有通信。是以安全为目标的 HTTP 通道。

HTTP(请求报文,响应报文)

HTTP 通过报文进行沟通

请求报文

客户端向服务器发起请求时会生成一段请求报文,请求报文是由请求方法,URL,协议版本,可选的请求首部字段和内容实体构成。

一旦连接建立,用户代理可以发送请求(用户代理通常是 Web 浏览器,但也可以是其他的(例如爬虫))。

客户端请求由一系列文本指令组成,并使用 CRLF 分隔,它们被划分为三个块:

  • 第一行包括请求方法及请求参数
  • 文档路径,不包括协议和域名的绝对路径 URL
  • 使用的 HTTP协议版本
  • 接下来的行每一行都表示一个 HTTP 首部,为服务器提供关于所需数据的信息(例如语言,或 MIME 类型),或是一些改变请求行为的数据(例如当数据已经被缓存,就不再应答)。这些 HTTP 首部组成一个空行结束的一个块。
  • 最后一行是可选数据块,包含更多数据,主要被 POST 方法所使用
<!-- 发送表单的结果 -->
POST / contact_form.php HTTP/1.1
HOST: developer.mozilla.org
Content-length:64
Content-Type: application/x-www-form-urlencoded
name=lambda&age=18

image.png

响应报文

接收到请求的服务器,会将请求内容的处理结构以响应的形式返回。响应报文基本上由协议版本,状态码,用以解释状态的原因短语,可选的响应首部字段以及实体主体构成。

当收到用户代理发送的请求后,Web 服务器就会处理它,并最终送回一个响应。

与客户端请求很类似,服务器响应由一系列文本指令组成,并使用 CRLF 分隔,它们被划分为三个不同的块

  • 第一行是状态行,包括使用的 HTTP 协议版本,状态码和一个状态描述(可读描述文本)
  • 接下来每一行都表示一个 HTTP 首部,为客户端提供关于所发送数据的一些信息如类型,数据大小,使用的压缩算法,缓存指示)。与客户端请求的头部块类似,这些 HTTP 首部组成一个块,并以一个空行结束。
  • 最后一块是数据块,包含了响应的数据(如果有的话)
<!-- 成功的网页响应 -->
HTTP/1.1 200 OK
Date: Sat, 27 Mar 2021 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2020 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!-- 请求资源已被永久移动的网页响应 -->
HTTP/1.1 301 Moved Permanently
Server: Apache/2.2.3 (Red Hat)
Content-Type: text/html; charset=iso-8859-1
Date: Sat, 27 Mar 2021 14:30:24 GMT
Location: https://developer.mozilla.org/ (目标资源的新地址, 服务器期望用户代理去访问它)
Keep-Alive: timeout=15, max=98
Accept-Ranges: bytes
Via: Moz-Cache-zlb05
Connection: Keep-Alive
X-Cache-Info: caching
X-Cache-Info: caching
Content-Length: 325 (如果用户代理无法转到新地址,就显示一个默认页面)
<!-- 请求资源不存在的网页响应 -->
HTTP/1.1 404 Not Found
Date: Sat, 27 Mar 2021 14:33:02 GMT
Server: Apache
Last-Modified: Tue, 01 May 2020 14:24:39 GMT
ETag: "499fd34e-29ec-42f695ca96761;48fe7523cfcc1"
Accept-Ranges: bytes
Content-Length: 10732
Content-Type: text/html

image.png

HTTP 响应代码

HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。

响应分为五类:信息响应(1xx),成功响应(2xx),重定向(3xx),客户端错误(4xx)和服务器错误(5xx)。

image.png

常见的 HTTP 状态码

  • 成功状态码
  • 200 服务器成功返回内容
  • 301/2 临时/永久重定向
  • 304 资源未被修改过
  • 失败的状态码
  • 404 请求内容不存在
  • 500 服务器暂时不可用
  • 503 服务器内部错误

GET 请求和 POST 请求的异同

相同点

  • 都将数据提交到远程服务器

不同点

  • 提交的位置不同
  • GET 会将数据放在 URL 后面
  • POST 会将数据放到请求头中
  • 提交数据大小限制不同
  • GET 请求对数据有大小限制
  • POST 请求对数据没有大小限制

GET/POST 请求应用场景

  • GET 请求用于提交非敏感数据和小数据
  • POST 请求用于提交敏感数据和大数据

注意

上传文件一般使用 POST 提交

上传文件必须设置 enctype="multipart/form-data"

浏览器缓存机制(HTTP)

Date :服务器响应的内容日期

Cache-control :内容缓存时间

no-cache :不被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。

no-store :用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 根据缓存超时

max-age :指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

min-fresh :指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

max-stale :指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以 接收超出超时期指定值之内的响应消息。

Expires :内容保质期,表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的效果。但是如果同时存在,则被cache-control的max-age覆盖。

其他

网站如何统计用户从何点击而来?

Referer: 如果从浏览器地址栏里直接输入地址请求头没有 Referer

相关文章
|
7月前
|
存储 JSON Shell
Grafana 系列文章(三):Tempo- 使用 HTTP 推送 Spans
Grafana 系列文章(三):Tempo- 使用 HTTP 推送 Spans
Grafana 系列文章(三):Tempo- 使用 HTTP 推送 Spans
|
4月前
|
前端开发 C# 开发者
WPF开发者必读:MVVM模式实战,轻松构建可维护的应用程序,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离关注点,提高了代码的可维护性和可扩展性。本文详细介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定与逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种模式,开发者可以更高效地构建桌面应用程序。希望本文能帮助你在WPF开发中更好地应用MVVM模式。
203 1
|
4月前
|
网络协议 编译器 Go
揭秘!TCP、RPC、gRPC、HTTP大PK,谁才是网络通信界的超级巨星?一篇文章带你秒懂!
【8月更文挑战第25天】本文以教程形式深入对比了TCP、RPC、gRPC与HTTP这四种关键通信协议,并通过Go语言中的示例代码展示了各自的实现方法。TCP作为一种可靠的传输层协议,确保了数据的完整性和顺序性;RPC与gRPC作为远程过程调用框架,特别适合于分布式系统的函数调用与数据交换,其中gRPC在性能和跨语言支持方面表现出色;HTTP则是广泛应用于Web浏览器与服务器通信的应用层协议。选择合适的协议需根据具体需求综合考量。
299 0
|
6月前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
84 1
|
5月前
|
Java 数据库连接 应用服务中间件
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
|
Web App开发 存储 网络协议
【JavaWeb】一篇文章学会HTTP
【JavaWeb】一篇文章学会HTTP
|
缓存 CDN
yii2.0网站首页有很多的文章封面图片,增加了很多的http请求,如何进行性能优化?底层原理是什么?
yii2.0网站首页有很多的文章封面图片,增加了很多的http请求,如何进行性能优化?底层原理是什么?
115 0
|
Web App开发 存储 网络协议
一篇文章帮你拿下面试八股文之网络三次握手四次挥手, HTTP超文本传输协议重点理论刨析到实现简单的HTTP服务, 思考着图解着学习网络 (咱不死记硬背)
一篇文章帮你拿下面试八股文之网络三次握手四次挥手, HTTP超文本传输协议重点理论刨析到实现简单的HTTP服务, 思考着图解着学习网络 (咱不死记硬背)
一篇文章帮你拿下面试八股文之网络三次握手四次挥手, HTTP超文本传输协议重点理论刨析到实现简单的HTTP服务, 思考着图解着学习网络 (咱不死记硬背)
|
缓存 安全 网络协议
[ 网络协议篇 ] 一篇文章让你掌握什么是 HTTP ?(下)
HTTP 和 HTTPS 是老生常谈的问题,无论是在校学习还是找工作,老师和面试官几乎都会问道HTTP 是什么?HTTPS 是什么?他们有什么区别 ? 其实学好 HTTP 和 HTTPS 是很重要的,有利于我们后续的学习和参加工作。相信平时上网的时候也很少有人关注这个问题,只是知道计算机网络里 HTTP 的概念。 其实这一块的知识延伸很广,还需要了解加密算法和 SSL 协议。 未来几篇文章我们就来聊一聊这几个问题,相信仔细看完,会有很大收获。
248 0
[ 网络协议篇 ] 一篇文章让你掌握什么是 HTTP ?(下)
|
Web App开发 安全 网络协议
面试被问http协议?这篇文章足够覆盖所有相关问题!
http使用面向连接的TCP作为传输层协议。http本身无连接。 请求报文 CRLF是回车换行 方法为GET的请求报文 方法为POST的请求报文 方法 OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。
1384 0