百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

重温HTTP,你到底做了什么?(重温红色历史,汲取奋进力量)

haoteby 2025-03-25 13:22 16 浏览

这是Java极客技术的第 230 篇原创文章

之前在回忆面试题的时候,面试官曾经问过我关于网络协议的一些东西,回答的当时感觉自己很垃圾,然后面试结束之后,自行百度,翻阅书籍,然后做了细致的整理,现在我就来分享给大家。

HTTP 你到底是个什么鬼

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP 是基于 TCP/IP 协议通信协议来传递数据(HTML 文件、图片文件、查询结果等)。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

这其实就是百度百科里面的精简化的内容,虽然说不上太细致,但是已经算是对 HTTP 做了一个大概的描述,我们接下来就从以下的几个方面来看一下这个HTTP 吧。

HTTP 报文

一般的,用于 HTTP 协议交互的信息被称为 HTTP 报文,那么说到 HTTP 报文,我们做开发的,很多时候都理解成报文是由一行一行的简单字符串,确实也是,因为 HTTP 报文都是纯文本,所以,你就可以非常方便的进行读写。我们来看下图:

上图显示的就是一个简单的 HTTP 事务的报文,图中分为了2部分,请求报文和响应报文。

请求报文、响应报文

客户端发往服务器的报文叫请求报文,也叫做request message,服务器在接收到请求报文之后,不得象征性的给人家返回点东西?礼尚往来嘛,这时候,服务器端相应一下,发给客户端一点东西,这就称之为相应报文。

报文分为了三个层级,也算是三个东西,起始行,首部,主体,这三个东西我们必须得知道他们到底是干啥的,这样被面试官问到之后,至少能说点东西出来。

起始行

图片中的起始行中,请求报文和响应报文的起始行是不一样的,【GET /test/hi-there.txt HTTP/1.0】,

  • GET 服务器通过 GET 方法获取资源

  • /test/hi-there.txt 这是资源 get 请求就是获取这个资源

  • HTTP1.0 就是指定的是 HTTP 协议版本为1.0

响应报文的起始行主要是说明服务器的响应情况 【HTTP/1.0 200 OK】

同样的 HTTP1.0还是版本,而这个200表示的是状态码,OK 相应状态没问题。

以上的就是起始行的所有内容介绍了,是不是很清晰很透彻了?那我们来看这个首部。

首部

大家有没有注意到首部都是键值对的形式存在的,就是都是 key:value 这种形式的,如下,

请求报文首部:

Accept:text/*
Accept-Language:en,fr

响应报文首部:

Content-Type:text/plain
Content-length:19

光这么看其实很没意思是吧,看了半天还得靠自己的英文才知道是啥意思,我给大家找来个关于各种首部字段的说明。

通用首部字段 HTTP1.1

请求首部字段:

响应首部字段:

实体首部字段:

其实这么多首部字段,说白了就是一句话 使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。

看就是这么简单,方便,关于怎么去使用,本文先不做讲解,不然这首部字段说起来,那就没尽头了,有兴趣的小伙伴不妨可以手动去搜索一下把!

主体

大家可以回去看一下图一,图一中响应报文的主体,hi,I am message,实体的主体和报文的主体是一个可选的数据块。与起始行和首部不同的是,主体中可包含文本或二进制数据,也可以为空如图1中的请求报文主体,Content-type行说明了主体是一个纯文本文档,Content-length 说明了主体有19字节

其实有些人也会这么理解,Http报文包括请求报文和响应报文两大部分,其中请求报文由请求行(request line)、请求头(header)、空行和请求体四个部分组成。而响应报文由状态行、响应头部、空行和响应体四个部分组成。

给大家一幅图,这个是我之前从别的地方看来的,感觉和这句话很搭配。

关于HTTP报文我们先告一段落,我们继续往下看!

HTTP请求方式

开发人员都知道,请求方式最常用的就是 GET 和 POST,但是实际上不止这两种,我之前竟然一点不知道,内心表示 HTTP 你还是我认识的 HTTP 么?

  • GET:请求指定的页面信息,并返回实体主体。

  • HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。

  • PUT:从客户端向服务器传送的数据取代指定的文档的内容。

  • DELETE:请求服务器删除指定的页面。

后来当我看到之后,内心接受了,原来是这么回事,HTTP1.0 定义了三种请求方法:GET, POST 和 HEAD 方法。HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

关于 HTTP 请求就说这么多了,接下来就是 HTTP 状态码了,这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字用于描述状态的一般类型(“成功”、“出错”等)。

HTTP状态码

给大家送上两个图,之前在刷面试的时候无意间看到的图,感觉特别的形象,帮助大家理解状态码有神奇的功效。

  • 301—永久移动。被请求的资源已被永久移动位置;

  • 302—请求的资源现在临时从不同的 URI 响应请求;

  • 305—使用代理。被请求的资源必须通过指定的代理才能被访问;

  • 307—临时跳转。被请求的资源在临时从不同的URL响应请求;

  • 400—错误请求;

  • 402—需要付款。该状态码是为了将来可能的需求而预留的,用于一些数字货币或者是微支付;

  • 403—禁止访问。服务器已经理解请求,但是拒绝执行它;

  • 404—找不到对象。请求失败,资源不存在;

  • 406—不可接受的。请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体;


  • 408—请求超时;

  • 409—冲突。由于和被请求的资源的当前状态之间存在冲突,请求无法完成;

  • 410—遗失的。被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址;

  • 413—响应实体太大。服务器拒绝处理当前请求,请求超过服务器所能处理和允许的最大值。

  • 417—期望失败。在请求头 Expect 中指定的预期内容无法被服务器满足;

  • 418—我是一个茶壶。超文本咖啡罐控制协议,但是并没有被实际的HTTP服务器实现;

  • 420—方法失效。

  • 422—不可处理的实体。请求格式正确,但是由于含有语义错误,无法响应;

  • 500—服务器内部错误。服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理;

这个状态码的图是在网上找的,链接送上【http://www.sohu.com/a/278045231_120014184】

以上就是我想给大家介绍的 HTTP,你到底是什么鬼,下一篇文章我将会给大家讲述 HTTP1.0 和 HTTP1.1 的那些事!敬请期待呦!

我是懿,一个正在被打击却努力前进的码农。

最后,我想重复一句话:选择和一群优秀的人一起成长,你成长的速度绝对会不一样!

相关推荐

Python爬虫进阶教程(二):线程、协程

简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...

A320-V2500发动机系统FADEC介绍(2)

目的全权数字发动机控制(FADEC)系统在所有飞行和运行阶段提供全范围发动机控制。...

三国志战棋版:玩家“二叔”用这套群DOT在比武中拿下31胜5负

声明:本文首发于今日头条,而后发布于“鼎叔闯三棋”的微信公众号、抖音、哔哩哔哩和小红书平台,如果在其他平台就是抄袭。...

真正的独一无二:Dot One 推出 DNA 定制系列 139英镑起

相信很多人在挑选衣物时有着这样的困扰,综合了性价比、面料等因素后好不容易找到了心仪的款式,还要担心是否会撞衫,不管是擦肩而过的陌生人还是身边的熟人,都令人尴尬。小部分人为此热衷于购买少量的古着或者限量...

崩铁:周年庆福利再升级,老角色加强时间确定,3.xdot体系反转

#埃安UT大一圈高级很多#...

Dotgo推出RBMHub,扩大了CPaaS提供商的覆盖范围和功能

据telecompaper网7月15日报道,用于商业消息传递的RichCommunicationServices(RCS)解决方案的领先提供商Dotgo宣布推出RBMHub。RBMHub的推出扩大了C...

深度解析:快照取消Dot职业的将何去何从

写在前面曾几何时,术士的出现便被冠以dot大师的名头,从远古时期的献祭腐蚀虹吸不如暗牧一个痛,到TBC上满dot=荣誉击杀+1,到wlk接近全暴击的冰晶腐蚀,再到CTM就算了吧MOP的各种变态吸x放...

星穹铁道:抽卡芙卡之前,你必须了解什么是dot!

卡妈终于上线了,可还是有很多人不明白什么是dot伤害,抽了卡妈直接玩起了直伤流,把一个持续伤害的引爆器玩成了打手,卡妈打dot伤害是远高于直伤的,有了卡妈的玩家一直了解dot,不然这卡妈就真被玩成四不...

游戏界的闪耀星辰陨落:悼念知名游戏博主″dotα牛娃″

无尽哀思!在数字时代浪潮中,游戏不仅是消遣娱乐的代名词,更是连接心灵的桥梁,构筑了无数人的青春回忆。在这片浩瀚无垠的游戏宇宙中,有这样一位博主,他以独特的风采、深邃的洞察力和无尽的热情,成为了玩家心中...

直击2017新加坡同性恋聚会Pink Dot,自由爱!

今年的“粉红点”又来啦~这个支持LGBT群体(男女同志、双性恋、跨性别等)群体的活动,从2009年起,已经在新加坡举办8年了!”这个非营利的同性恋权益活动,主要是希望大家了解到,不管一个人的性倾向或...

python-dotenv,一款超级实用处理环境变量python库

python-dotenv,一款超级实用处理环境变量python库python-dotenv概述:...

亚马逊语音助手毫无征兆发笑 诡异至极吓坏用户

来源:新华网美国电商亚马逊7日承诺,将更改名下“亚历克萨”语音系统设置,令它不会莫名发笑,免得吓坏用户。“亚历克萨”是亚马逊开发的语音助手软件,可服从用户语音指令完成对话、播放音乐等任务。依照原来设计...

2022最火英文网名男女生

精选好听英文昵称带翻译1.moveon(离开)2.Monster(怪物)3.Solo吉他手4.Finish.(散场)...

智能家具 RecycleDot 的出现给传统家具厂商带来新的挑战

从可穿戴手环、手表到智能衣服,智能硬件逐步渗透到每一个领域。最近有一对父子MikeSandru和JohnSandru在自家的车库中设计了一款智能家具RecycleDot,给日渐萧条的家具行...

欧洲通信卫星公司 OneWeb 敦促印度DoT尽早批准提供卫星宽带服务

据telecomtalk2月17日报道,欧洲通信卫星公司EutelsatOneWeb近日敦促印度电信部(DoT)尽快批准其在印度部署双地球站网关的计划,以便连接其近地轨道(LEO)全球卫星星座,并...