Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >跟我一起探索HTTP-典型的 HTTP 会话

跟我一起探索HTTP-典型的 HTTP 会话

作者头像
用户1418987
发布于 2023-10-16 01:32:40
发布于 2023-10-16 01:32:40
23500
代码可运行
举报
文章被收录于专栏:codercoder
运行总次数:0
代码可运行

典型的 HTTP 会话

在像 HTTP 这样的客户端——服务器(Client-Server)协议中,会话分为三个阶段:

  1. 客户端建立一条 TCP 连接(如果传输层不是 TCP,也可以是其他适合的连接)。
  2. 客户端发送请求并等待应答。
  3. 服务器处理请求并送回应答,回应包括一个状态码和对应的数据。

从 HTTP/1.1 开始,连接在完成第三阶段后不再关闭,客户端可以再次发起新的请求。这意味着第二步和第三步可以连续进行数次。

建立连接

在客户端——服务器协议中,连接是由客户端发起建立的。在 HTTP 中打开连接意味着在底层传输层启动连接,通常是 TCP。

使用 TCP 时,HTTP 服务器的默认端口号是 80,另外还有 8000 和 8080 也很常用。页面的 URL 会包含域名和端口号,但当端口号为 80 时可以省略。前往标识互联网上的内容获取更多内容。

备注: 客户端——服务器模型不允许服务器在没有显式请求时发送数据给客户端。为了解决这个问题,Web 开发者们使用了许多技术:例如,使用 XMLHTTPRequestFetch API 周期性地请求服务器,使用 HTML WebSocket API,或其他类似协议。

发送客户端请求

一旦连接建立,用户代理就可以发送请求(用户代理通常是 Web 浏览器,但也可以是其他的,例如爬虫)。客户端请求由一系列文本指令组成,并使用 CRLF 分隔(回车,然后是换行),它们被划分为三个块:

  1. 第一行包括请求方法及请求参数:
  • 文档路径,不包括协议和域名的绝对路径 URL
  • 使用的 HTTP 协议版本
  1. 接下来的行每一行都表示一个 HTTP 标头,为服务器提供关于所需数据的信息(例如语言,或 MIME 类型),或是一些改变请求行为的数据(例如当数据已经被缓存,就不再应答)。这些 HTTP 标头形成一个以空行结尾的块。
  2. 最后一块是可选数据块,包含更多数据,主要被 POST 方法所使用。
请求示例

访问 developer.mozilla.org(https://developer.mozilla.org/)的根页面,并告诉服务器用户代理倾向于该页面使用法语展示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr

注意最后的空行,它把标头与数据块分隔开。由于在 HTTP 标头中没有 Content-Length,数据块是空的,所以服务器可以在收到代表标头结束的空行后就开始处理请求。

例如,发送表单的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded

name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue
请求方法

HTTP 定义了一组请求方法用来指定对目标资源的行为。它们一般是名词,但这些请求方法有时会被叫做 HTTP 动词。最常用的请求方法是 GETPOST

  • GET 方法请求指定的资源。GET 请求应该只被用于获取数据。
  • POST 方法向服务器发送数据,因此会改变服务器状态。这个方法常在 HTML 表单中使用。

服务器响应结构

当收到用户代理发送的请求后,Web 服务器就会处理它,并最终送回一个响应。与客户端请求很类似,服务器响应由一系列文本指令组成,并使用 CRLF 分隔,它们被划分为三个不同的块:

  1. 第一行是状态行,包括使用的 HTTP 协议版本,然后是一个状态码(及其人类可读的描述文本)。
  2. 接下来每一行都表示一个 HTTP 标头,为客户端提供关于所发送数据的一些信息(如类型、数据大小、使用的压缩算法、缓存指示)。与客户端请求的头部块类似,这些 HTTP 标头组成一个块,并以一个空行结束。
  3. 最后一块是数据块,包含了响应的数据(如果有的话)。
响应示例

成功的网页响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 55743
Connection: keep-alive
Cache-Control: s-maxage=300, public, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:37:18 GMT
ETag: "2e77ad1dc6ab0b53a2996dfd4653c1c3"
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
Age: 7

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>A simple webpage</title>
</head>
<body>
  <h1>Simple HTML webpage</h1>
  <p>Hello, world!</p>
</body>
</html>

请求资源已被永久移动的网页响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 301 Moved Permanently
Server: Apache/2.4.37 (Red Hat)
Content-Type: text/html; charset=utf-8
Date: Thu, 06 Dec 2018 17:33:08 GMT
Location: https://developer.mozilla.org/ (目标资源的新地址,服务器期望用户代理去访问它)
Keep-Alive: timeout=15, max=98
Accept-Ranges: bytes
Via: Moz-Cache-zlb05
Connection: Keep-Alive
Content-Length: 325 (如果用户代理无法转到新地址,就显示一个默认页面)

<!DOCTYPE html> (包含一个网站自定义页面,帮助用户找到丢失的资源)

请求资源不存在的网页响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Content-Length: 38217
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:35:13 GMT
Expires: Thu, 06 Dec 2018 17:35:13 GMT
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
X-Cache: Error from cloudfront
<!DOCTYPE html> (包含一个站点自定义 404 页面,帮助用户找到丢失的资源)
响应状态码

HTTP 响应状态码用来表示一个 HTTP 请求是否成功完成。响应被分为 5 种类型:信息型响应,成功响应,重定向,客户端错误和服务端错误。

  • 200:OK。请求成功。
  • 301:Moved Permanently。请求资源的 URI 已被改变。
  • 404:Not Found。服务器无法找到请求的资源。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【网络知识补习】❄️| 由浅入深了解HTTP(七)典型的 HTTP 会话介绍 + 简单实例
在像 HTTP 这样的Client-Server(客户端-服务器)协议中,会话分为三个阶段:
呆呆敲代码的小Y
2021/08/20
2490
【网络知识补习】❄️| 由浅入深了解HTTP(七)典型的 HTTP 会话介绍 + 简单实例
[译] HTTP 的进化
原文: https://medium.com/platform-engineer/evolution-of-http-69cfe6531ba0
江米小枣
2020/06/16
5310
《HTTP权威指南》读书笔记(二)
<method> <request-URL> <version> <headers> <entity-body>
咪啪咪啪
2019/11/15
5110
【网络知识补习】❄️| 由浅入深了解HTTP(二)HTTP 的演变
HTTP(超文本传输​​协议)是万维网的底层协议。由 Tim Berners-Lee 及其团队在 1989 年至 1991 年间开发的 HTTP 经历了许多变化,保留了大部分简单性并进一步塑造了其灵活性。HTTP 已经从早期在半可信实验室环境中交换文件的协议演变为现代互联网迷宫,现在承载高分辨率和 3D 图像、视频。
呆呆敲代码的小Y
2021/08/20
3250
【网络知识补习】❄️| 由浅入深了解HTTP(二)HTTP 的演变
「 面试三板斧 」之 HTTP (上)
HTTP 在因特网的角色:充当一个信使的角色,干的就是一个跑腿的活,在客户端和服务端之间传递信息,但我们又不能缺少它。
lucifer210
2021/01/04
4240
「 面试三板斧 」之 HTTP (上)
http简介看这篇就够了
协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
好好学java
2018/08/11
4030
你还在为 HTTP 的这些概念头疼吗?
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就全面一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层)
cxuan
2020/02/19
2.4K0
你还在为 HTTP 的这些概念头疼吗?
跟我一起探索 HTTP-HTTP缓存
可复用性有几个优点。首先,由于不需要将请求传递到源服务器,因此客户端和缓存越近,响应速度就越快。最典型的例子是浏览器本身为浏览器请求存储缓存。
用户1418987
2023/10/16
3510
跟我一起探索 HTTP-HTTP缓存
HTTP 演进史
HTTP 的发展要追溯到万维网的发明,1989 年,当时在 CERN 工作的 Tim Berners-Lee 博士写了一份关于建立一个通过网络传输超文本系统的报告。这个系统起初被命名为 Mesh,在随后的 1990 年项目实施期间被更名为万维网(World Wide Web)。
菜皮日记
2023/12/18
2030
前端应该知道的 HTTP 知识
HTTP 是由蒂姆·伯纳斯-李(TimBerners—Lee)于1989年在欧洲核子研究组织(CERN)所发起
GopalFeng
2020/09/24
5880
前端应该知道的 HTTP 知识
网络篇:协天子令诸侯[-Http-]
不管什么语言,什么系统,都离不开网络,这个系列就来深入一下网络 首先是挟天子以令诸侯的Http,它把握了整个网络的命脉。所有人必须对它言听计从。
张风捷特烈
2019/03/19
8440
网络篇:协天子令诸侯[-Http-]
六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜
作为一名程序员,可能多数人都偏向于后端敲代码,但是关于Web的知识可千万不能忘呀!
呆呆敲代码的小Y
2022/05/10
9000
六万字 HTTP 必备知识学习,程序员不懂网络怎么行,一篇HTTP入门 不收藏都可惜
跟我一起探索 HTTP-跨源资源共享(CORS)
跨源资源共享CORS,是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。
用户1418987
2023/10/16
4840
跟我一起探索 HTTP-跨源资源共享(CORS)
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。
cxuan
2020/01/17
6000
看完这篇HTTP,跟面试官扯皮就没问题了
HTTP 方法
HTTP协议 所有的方法 方法 说明 支持的HTTP协议版本 GET 获得资源 1.0、 1.1 POST 传输实体主体 1.0、 1.1 PUT 传输文件 1.0、 1.1 DELETE 删除文件 1.0、 1.1 HEAD 获得HTTP协议首部 1.0、 1.1 OPTIONS 询问HTTP服务器支持的HTTP协议的方法 1.1 TRACE 追踪路径 1.1 CONNECT 要求用隧道协议连接代理 1.1 LINK 建立和资源之间的关系 1.0 UNLINK 断开连接关系 1.0 下面我们通过tomc
java404
2018/05/18
7800
【计算机网络】HTTP 与 HTTPS ( HTTPS 简介 | HTTP 通信过程 )
HTTPS 协议就是在 HTTP 协议的基础上 , 增加了一个 SSL 外壳 , 对 HTTP 协议进行加密 ;
韩曙亮
2023/03/29
8090
【计算机网络】HTTP 与 HTTPS ( HTTPS 简介 | HTTP 通信过程 )
HTTP协议详解
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST
joshua317
2018/04/10
1K0
命令行窗口中用telnet测试HTTP协议
1. 命令行窗口中用telnet测试HTTP协议  HTTP消息是由普通ASCII文本组成。消息包括消息头和数据体部分。消息头以行为单位,每行以CRLF(回车和换行)结束,消息头结束后,额外增加一个CRLF,之后内容就是数据体部分了。 我们可以在命令行窗口,通过TELNET,来测试HTTP协议。 1. 使用telnet连接到HTTP服务器,如要从google上请求index.html页面,首先要连接到服务器的80端口  telnet www.baidu.com 80 2. 现在已经连接上了服务器,发送htt
互联网金融打杂
2018/04/03
2.2K0
HTTP Header 详解和获取方法
HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模 型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而言,包括message-header和message-body两部分。首先传 递message-header,即http header消息 。http header 消息通常被分为4个部分:general header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确。根据维基百科对http header内容的组织形式,大体分为Request和Response两部分。 Requests部分 Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5 Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 Accept-Encoding: compress, gzip Accept-Language 浏览器可接受的语言 Accept-Language: en,zh Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges: bytes Authorization HTTP授权的授权证书 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) Connection: close Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 Cookie: $Version=1; Skin=new; Content-Length 请求的内容长度 Content-Length: 348 Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT Expect 请求的特定的服务器行为 Expect: 100-continue From 发出请求的用户的Email From: user@email.com Host 指定请求的服务器的域名和端口号 Host: www.zcmhi.com If-Match 只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d” If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT If-None-Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d” If-Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d” If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT Max-Forwards 限制信息通过代理和网关传送的时间 Max-Forwards: 10 Pragma 用来包含实现特定的指令 Pragma: no-cache Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic QWxhZ
菲宇
2019/06/11
4.3K0
HTTP协议之:报文详解
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
全栈程序员站长
2022/09/14
1.1K0
HTTP协议之:报文详解
推荐阅读
相关推荐
【网络知识补习】❄️| 由浅入深了解HTTP(七)典型的 HTTP 会话介绍 + 简单实例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验