HTTP协议的请求和响应学习笔记

HTTP协议,HTTP请求和响应,TCP三次和四次握手 1.HTTP协议是什么? 2.HTTP请求和响应 2.1HTTP请求 2.2HTTP响应 2.3HTTP请求和响应流程 3.TCP三次握手和四次握手 4.HTTP七层协议 阅读详情

本篇作为学习servlet的前提,http协议是学习JavaWeb开发的基石,不深入了解http协议,就不能说掌握了JavaWeb开发。

  HTTP协议有两个版本:HTTP1.0和HTTP1.1,那么有什么区别呢?

  HTTP协议1.0中,客户端与web服务端建立连接之后,只能获得一个资源,如果还想获得资源,那么久得重新连接。

  而HTTP1.1协议则是客户端和web服务端连接之后,在这个连接上可以进行多个资源的传输。

  关于这个HTTP1.1和HTTP1.0协议的区别可以使用Telnet进行验证。如果在命令行窗口cmd中提示“Telnet”不是Windows命令,则需要从【控制面板】--->【程序】--->【打开或关闭Windows功能】中勾选【Telnet客户端】。(Telnet是微软自带的可进行远程连接的工具)

  开始在cmd中输入“telnet  主机名   端口号”,如输入:“telnet  localhost  8080”:

   

  默认情况下,Telnet是你输一个字符,它就发一个字符,并且不回显,如果需要回显,必须在输入以上命令启动Telnet后,同时按下【Ctrl】+【}】打开回显,并且最好是在记事本中先敲好要访问的命令,再复制进cmd中。

现在我用Telnet来访问我的Tomcat服务器,在我Tomcat服务器的【webapps】目录下有一个web应用,web应用所在目录名为【telnetTest】,其下有一个test.html文件,内容为“long live sd”,现在我使用Telnet以HTTP1.0协议去访问(访问之前记得开启Tomcat服务器哦):

  打开回显,并回车一次,并输入请求行和主机(主机一定要有,无值则默认为本机),会看到如下:

   

使用HTTP1.0协议则是服务器将请求的资源传输回客户端后立即将连接断开,而使用HTTP1.1协议的情景如下图所示:

   

  可见,HTTP1.1在将资源回传给客户端之后,不会立即断开连接,也就是说在未超时的时间内,客户端还可以向服务器请求资源,因为这个连接还未断开!(说实话Telnet实在太难用,还是用HttpWatch观察比较好。。。)

  当然现在基本都是HTTP1.1协议,HTTP1.0协议已经基本不用了。。。因此我们所说的HTTP协议通常都是指HTTP1.1协议。

=============================================================================

  一个有关HTTP协议的小问题:

  一个web页面中,假设有三个<img>标签,这三个<img>标签引用了图片,当客户端访问这个web页面时,客户端总共会向服务器发生几次HTTP请求?

 

  答案是四次,第一次是请求HTML页面,服务器将HTML页面传给浏览器后,浏览器开始解析HTML页面中的内容,而每次解析到<img>标签时,又要根据该标签的图片引用地址重新向服务器请求图片资源。所以总共有四次HTTP请求。因此在web优化中最重要的是要减少客户端向服务器的http请求次数。

 =============================================================================

 

  首先来看HTTP协议的请求内容:

  一个完整的HTTP请求包含了如下内容:一个请求行,若干消息头,和空格之后的实体内容,如下图:

   

  请求行:请求行的最开始为请求方式,原来总共有七种,现在只剩下GET(默认)和POST两种方式,其中POST方式又只用于表单的安全提交,而其他一般都是以GET方式来进行请求。

  GET和POST方式的区别主要表现在数据的传递上:

  如果请求方式为GET方式,则可以在请求的URL地址后以“?”的形式带上交给服务器的数据,多个数据之间以“&”隔开,例如:

GET  /mail/1.html?username=admin&password=123 HTTP/1.1

但GET方式后附带的数据是有限的,不能超过1K。

      如果请求方式为POST方式,可以在请求的实体内容中装载数据,而这个数据的装载大小是无限制的。

      常用的消息头有很多,下图是一个示例:

   

  Accept: 用于告诉服务器,客户端所支持的数据类型(MIME类型)。

  Accept-Charset: 用于告诉服务器,客户端所采用的码表。

  Accept-Encoding: 用于告诉服务器,客户端所支持的数据压缩格式。

  Accept-Language: 用于告诉服务器,客户端采用的语言环境(国际化)。

  Host: 用于告诉服务器,客户端想访问服务器哪台主机。

  If-Modified-Since: 用于告诉服务器,客户端对于资源的最后缓存时间。

  Referer: 用于告诉服务器,客户端是从哪个页面去访问服务器的  (防盗链)。

  User-Agent: 用于告诉服务器,客户端的机器环境(例如所使用的操作系统,浏览器版本号)。

  Cookie:客户端通过这个头字段,可以带一些数据给服务器。

  Connection:客户端通过这个头字段告诉服务器,请求完成后,是保持链接还是关闭链接。

补充:

  UA-CPU:用于告诉服务器,客户端操作系统的平台。

上面的一些消息头中细节说明:

  国际化,比如Google这样的面对全世界的网站,可以根据“Accept-Language”这个消息头来回送对应语言的网页。

  防盗链,一些服务器的资源只允许在某个页面中点击来请求,而不允许别人在他们做的页面中挂个超链接来指向这个资源从而导致在他们网页上直接点击就能获取资源。当然针对这些盗链我们可以指向自己的网站首页进行示威(~~(╯﹏╰)b)

==========================================================================

  现在,来看HTTP协议的响应内容:

  同样,对于服务器端响应客户端的请求,也会将数据进行HTTP协议的封装,形成响应,一个完整的HTTP请求包含了如下内容:一个响应状态行,若干消息头,还有空行之后的实体内容。同请求类似,如下图:

   

 

  状态行:状态行的开始是使用的HTTP协议版本,后面跟的是状态码,状态码通常可以分为5类,如下:

  

   其中有常见的404(资源未找到),200(请求成功并完成响应),500(服务器出错),剩下的也是非常重要的:

  302:(Move temporarily):服务器告诉客户端其并无所需的资源,要客户端从其他地方寻求(重定向),新的URL在Location响应头中给出。

  307(Temporary Redirect):同302状态码。

  304(Not Modified):指示客户端只需要从缓存中寻求之前获得的数据即可,无需再从服务器端重新请求数据。

  

  常用的响应头也有很多,下图是一个示例:

   

  Location:这个头通常配合302或307状态码使用,服务器使用这个头告诉浏览器去找谁。

  Server:服务器通过这个头告诉浏览器,服务器的类型。

  Content-Encoding: 服务器通过这个头告诉浏览器,数据的压缩格式(gzip)。

  Content-Length:服务器通过这个头告诉浏览器,回送数据的长度。

  Content-Language: 服务器所在系统采用的语言环境。

  Content-Type: 服务器通过这个头告诉浏览器,回送数据的类型(MIME类型);同时也告诉客户端所采用的编码表。

  Last-Modified: 服务器通过这个头告诉浏览器,数据的最后修改时间。

  Refresh:服务器通过这个头告诉浏览器,多长时间定时刷新或定时转向其他页面。

  Content-Disposition: 控制浏览器以下载方式打开回送的数据。

  Transfer-Encoding: 服务器通过这个头告诉浏览器,数据是以块方式回送的。

  ETag:以一个网页或资源来生成某种值,如果网页或资源发生变化,则ETag值也发生变化,用来控制缓存。

  Expires:控制浏览器缓存数据的时间(-1或0,代表控制浏览器不要缓存),如果是具体时间值,则是告诉浏览器在这个时间之前只需去缓存寻取资源即可。

  Cache-Control: no-cache  ,控制浏览器不要缓存该资源

  Pragma: no-cache  ,控制浏览器不要缓存该资源

  (以上三个头一起用,就可以控制所有的浏览器不要缓存数据)

上面的一些响应头中细节说明:

  Content-Type:告诉客户端回送的数据类型,这个数据类型称为MIME类型;同时也告诉客户端所采用的编码表。

  MIME类型根据实际文件的后缀名(即扩展名)来指定数据的样式写法,如为html文件,则对应的MIME类型为:“text/html”,如果是图片jpg文件,则对应的MIME类型为:“image/jpeg”等等。

  各种不同文件对应的MIME类型可以从网上对应,也可以从Tomcat服务器的【conf】目录中的“web.xml”文件中查看。

  Content-Disposition:如果将某个资源设置了这个头,那么这个资源会以下载方式打开,而Content-Disposition头的写法为:“attachment;filename=”+文件URI。

  ETag根据资源的变化做出ETag值的修改,如果客户端访问发现服务器端资源ETag值与客户端缓存中的相同资源ETag值不同,那么客户端就要重新获取数据。其实功能和(请求头If-Modified-Since结合响应头Last-Modified)是相同的,只是ETag能做到毫秒值级别的判断,而后者只能在秒值之间。

为什么控制浏览器不要缓存会有Expires,Cache-Control,Pragma这三个头,这是因为各种浏览器对禁止缓存使用的头不一样,所以以上三个响应头一起使用就可以对付所有浏览器。

 

最后的补充:

  HTTP请求头中的“Range”请求头,可以请求服务器只传输某个web资源的一部分,这个头可以用来实现断点续传功能(当然前提是服务器是否支持Range功能,通过Accept-Ranges响应头来说明)。Range请求头可以通过三种格式来设置要传输的字节范围:

  ①Range:bytes=1000-2000   (请求传输某个资源1000到2000字节的内容)

  ② Range:bytes=1000-   (请求传输某个资源1000字节以后的内容)

  ③ Range:bytes=1000   (请求传输某个资源最后1000字节的内容)

 

  而与此对应的则是HTTP响应头中的“Accept-Ranges”响应头,这个响应头说明了该web服务器是否支持Range功能。如果支持则向浏览器返回“Accept-Ranges:bytes”,如果不支持,则返回“Accept-Ranges: none”。

  另外还有一个Content-Range响应头,这个响应头说明了返回该web资源的字节范围,如果服务器支持断点续传功能,那么如果续传成功,则自动返回这个响应头。例:Content-Range:1000-3000/5000

HTTP协议工作原理与请求/响应模型详解 HTTP 协议是一种基于请求 / 响应模式的、无状态的应用层协议。它采用客户端 / 服务器架构,客户端通常是我们使用的浏览器或其他 HTTP 客户端工具,而服务器则是运行在远程主机上的 Web 服务器软件,如 Apache、Nginx 等。HTTP 协议的主要目的是在客户端和服务器之间传输超文本数据,这些数据可以是 HTML 页面、图片、脚本文件、样式表等各种资源。HTTP 协议作为互联网的基石之一,其工作原理和请求 / 响应模型构成了万维网数据交互的核心机制。 阅读详情

相关推荐

Dify 深度进阶:从入门到精通AI应用构建

《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。

同名公众号:dify实验室 1950

HTTP协议的请求和响应学习

  本篇作为学习servlet的前提,http协议是学习JavaWeb开发的基石,不深入了解http协议,就不能说掌握了JavaWeb开发。   HTTP协议有两个版本:HTTP1.0和HTTP1.1,那么有什么区别呢?   HTTP协议1.0中,客户端与web服务端建立连接之后,只能获得一个资源,如果还想获得资源,那么久得重新连接。   而HTTP1.1协议则是客户端和web服务端连接之后...

weixin_30532369的博客 143

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式】

解压激活工具 →连接数据线 轻松搞定激活!

Amy_mumu的博客 142万+

理解HTTP消息头 (四)

服务器返回的HTTP消息也分为消息头和消息体两部分。前面连载的第二篇里已经介绍了返回消息中常见返回代码的含义。对于非正常的返回代码的处理比较简单,只要照着要求去做就好了,而对于正常的返回代码(200),其处理方式就多种多样了。 1Content-Type Content-Type是返回消息中非常重要的内容,它标识出这个返回内容的类型,其值为“主类型/子类型”的格式,例如最常见的就是text/h

流沙-岁月 670

Hodgkin-Huxley Model

介绍了经典的动力学模型:HH Model

weixin_73557167的博客 2474

【Office激活】学校正版Office已激活成功仍弹出激活窗口

学校正版Office激活问题:已激活成功仍弹出激活窗口

ESCM_的博客 1万+

HTTP协议

HTTP 往往是基于传输层的 TCP 协议实现的.HTTP1(主流版本)基于TCPHTTP2(支持不多)基于TCP,引入的是安全性(相当于HTTPS的加强版)HTTP3(建设中) 基于UDP,提高效率所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据 下四层保证数据传输;将传输的数据流解析,提取数据;应用层:信息+格式(关注数据本身)客户端vs服务端请求 vs 响应一次请求一次响应多次请求,一次

阿辉爱睡觉的博客 1997

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

HTTP知识点总结

本文转自“https://jishuin.proginn.com/p/763bfbd2831c”

qq_40105769的博客 698

mjlab & MimicKit 宇树 G1 人形机器人强化学习训练部署

基于mjlab框架训练Unitree G1人形机器人执行双旋踢的示例。参考动作源自Jason Peng的MimicKit项目。数据转换脚本(MimicKit pkl → mjlab csv)完整训练结果与超参数预训练ONNX检查点用于部署实体硬件部署指南⚠️ 免责声明仅用于教育目的。对于因尝试复现此处展示结果而导致的财产损失或人身伤害,我们概不负责。操作硬件时请谨慎行事并保持良好判断力。

2506_90492529的博客 1700

基于STM32的太阳能充电宝设计_资料编号31

系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。电源供应:锂电池为系统供电,9 伏太阳能板经 5 伏降压稳压三极管降压为 5 伏后传送到 TP4056,TP4056 为锂电池供电,因锂电池电压 3.7 伏,通过 5 伏 DC 升压模块升压到 5 伏为整个系统提供 5 伏电压。

嵌入式阿齐Archie 1万+

你了解HTTP协议吗?(三)

1.写在前面 前面介绍完了HTTP协议的请求行、响应行,我们继续接下来的内容。 2.如何管理跨代理服务器的长短连接? HTTP连接的常见的流程 浏览器解析出主机名 浏览器查询这个主机名的IP地址(DNS) 浏览器获得端口号(80) 浏览器发起到202.43.78.3端口80的连接 浏览器想服务器发送一条HTTP GET报文 浏览器从服务器读取HTTP响应报文 浏览器关闭连接 从TCP编程上看HTTP请求处理 短连接与长链接 Connection头部 Keep-Alive:长连接 客户端请求长连接:

了不起的盖茨比的博客 811

OpenClaw 多机器人多 Agent 模式:打造你的 AI 助手团队

OpenClaw多Agent模式为企业提供高效的AI助手团队解决方案。通过创建4个独立的飞书机器人(主助理、内容创作、技术开发、AI资讯),每个连接专属Gateway和Agent模型(如Claude Opus/Sonnet、Gemini 2.5),实现专业分工。相比单Agent模式,多Gateway架构具有配置清晰、互不干扰、无需手动切换等优势。系统采用Profile隔离机制,各Agent拥有独立配置和端口。部署过程包括创建机器人应用、配置Agent、运行自动化脚本等步骤,支持私聊或群组@使用。日常提供状态

Maynor的博客 5099

学习笔记---Http协议的请求消息和响应消息

weixin_33768481的博客 136

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

爬虫学习笔记(三)--Http协议

2026王道408P286~290。

hetupyou的博客 504

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

HTTP协议学习笔记

HTTP协议 1.面试题:聊一下HTTP协议(协议的完整通信过程) 2.通信过程 3.HTTP请求的方法 4.iOS中发送GET/POST请求的手段

划水的专栏 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HTTP与HTTPS协议学习笔记

一、什么是HTTP? Hyper Text Transfer Protocol(超文本传输协议),即就是传输的数据不仅仅是文本。 是从服务器传输超文本到本地浏览器的传送协议。 HTTP协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式。 HTTP是基于请求与响应模式的、无状态的、应用层的协议。 二、HTTP请求报文 HTTP请求报文由请求行、请求头部、空一行、请求正文四部分组成。 请求行:请求方法+请求的url+协议版本 请求头:需要服务器了解的附加信息

weixin_44734398的博客 211

HTTP协议详解--请求与响应

一、什么是HTTP协议 HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。 通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 2...

Im ok的博客哦 2万+

HTTP协议之请求与响应

响应行:响应数据的第一行,其中HTTP/1.1表示协议版本,200 表示响应状态码,ok表示状态码描述响应头:第二行开始,格式为key:value形式响应体:最后一部分,存放响应数据。

小Ti博客 2538

【网络协议之基础一】HTTP协议简介(请求头、响应头、请求方式)请求协议、响应协议

无状态协议,即:服务器不需要知道客户端是谁,只认请求(一次请求request,一次相应response),例如,客户端请求淘宝网,会在浏览器上得到一个响应(即网页),此时,不管服务器挂了还是怎么了,客户端都可以浏览网页内容,除非你再次请求才会报错;之所以,大家认为每一次登录,好像客户端都能找到自己账号的相关信息(如:已下的订单),其实是cookie和session的作用,和http协议本身无关了浏览器发送给服务器的内容就这个格式的,如果不是这个格式服务器将无法解读。

白骨梦儿 2万+

【HTTP协议】HTTP请求/响应报文结构

文章内容HTTP请求/响应报文结构请求报文 如果觉得有帮助,麻烦动动手指点赞加关注💗💗💗 非常感谢!!! HTTP请求/响应报文结构 请求报文 HTTP 请求报文由请求行、请求头、空行和请求包体(body)组成。如下图所示: 真实示例: GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Cache-Control: max-age=0 sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="

fearless的博客 9655

HTTP协议详解——请求消息、响应消息、请求方法、响应状态码

HTTP协议1. 什么是HTTP协议2. HTTP请求消息 1. 什么是HTTP协议 通信:就是信息的传递和交换。通信三要素:主体、内容、方式。 通信协议(Communication Protocol)是指通信的双方完成通信所必须遵守的规则和约定。 通信双方采用约定好的格式来发送和接收消息,这种事先约定好的通信格式就叫做通信协议。 客户端与服务器之间要实现网页内容的传输,则通信的双方必须遵守网页内容的传输协议。网页内容又叫做超文本,因此网页内容的传输协议又叫做超文本传输协议(HyperText Trans

Concise200的博客 8006

HTTP协议、请求响应

概念:超文本传输协议,规定了浏览器和服务器之间数据传输的规则。特点:1.基于TCP协议:面向连接,安全2.基于请求-响应模型的:一次请求对应一次响应3.HTTP协议是无状态的协议:对于事物处理没有记忆能力。每次请求-响应都是独立的。缺点:多次请求间不能共享数据。(会话技术解决)优点:速度快。

GreenAmanda的博客 1815

HTTP协议、【HTTP请求、响应格式、状态码】及一次HTTP请求的完整过程

HTTP协议简介HTTP协议工作原理和流程浏览器在使用HTTP协议时,用户访问网站的流程HTTP协议的请求格式HTTP协议的响应格式状态码重定向的请求代表当前功能还需要后续操作才能完成。 简介 HTTP协议(Hyper Text Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。为了更快地处理大量事务,确保协议的可伸缩性,HTTP协议被设计成了一种无状态协议,不保留之前一切的请求或响应报文的信息。HTTP协议也是万维网(WWW,World Wide W

u010804417的博客 7790

HTTP协议详解:从请求到响应的全过程

HTTP协议通过请求和响应的交互方式,实现了客户端与服务器之间的通信。从请求行到请求头部,再到请求体,客户端向服务器发送了完整的请求信息;而服务器则通过状态行、响应头部和响应体返回了处理结果。这一过程构成了HTTP协议从请求到响应的全过程,为互联网上的各种应用提供了基础支持。需要注意的是,HTTP协议本身是无状态的,即服务器不会保存客户端的状态信息。为了实现会话管理、用户认证等功能,通常会使用Cookie和Session等技术来跟踪客户端的状态。

异构算力老群群(在读985计算机博士生)的技术博客 2273

HTTP——超文本传输协议HTTP、请求和响应、GET和POST请求

目录 HTTP协议概述 请求信息 响应信息 常见的响应状态码 GET和POST请求 GET请求 POST请求 GET和POST的区别 如何选择GET和POST HTTP协议概述 跳转到目录 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。 HTTP是hypertext transfer protocol(超文本传输协议)的...

Guizy 9034
上一篇: javaWeb项目之Servlet学习笔记----响应对象HttpServletResponse
下一篇: javaWeb项目之Servlet学习笔记----HttpServletRequest请求对象
iamlinuxasd
博客等级 码龄10年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值