重温HTTP,你到底做了什么?(重温红色历史,汲取奋进力量)
haoteby 2025-03-25 13:22 25 浏览
这是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 的那些事!敬请期待呦!
我是懿,一个正在被打击却努力前进的码农。
最后,我想重复一句话:选择和一群优秀的人一起成长,你成长的速度绝对会不一样!
相关推荐
- Chrome OS 41 用 Freon 取代 X11_chrome os atom
-
在刚发布的ChromeOS41里,除了常规的Wi-Fi稳定性提升(几乎所有系统的changelog里都会包含这一项)、访客模式壁纸等之外,还存在底层改变。这一更新中Google移除...
- 苹果iPad Pro再曝光 有望今年六月发布
-
自进入2015年以后,有关大屏iPad的消息便一直不绝于耳,之前就有不少媒体猜想这款全新的平板电脑将会在三月发布,不过可惜的是我么只在那次发布会上看到了MacBookPro。近日@Ubuntu团队便...
- 雷卯针对香橙派Orange Pi 5 Max开发板防雷防静电方案
-
一、应用场景高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居、Linux桌面计算机、Linux网络服务器、Android平板、Android游戏机...
- Ubuntu Server无法更新问题解决_ubuntu server not found
-
上周老家的一台运行UbuntuServer的盒子无法连接上了,中秋这两天回来打开,顺手更新一下发现更新报错。提示`E:Releasefileforhttps://mirrors.aliyun...
- 虚幻引擎5正式版发布:古墓丽影&巫师新作采用、新一代实时渲染
-
机器之心报道编辑:杜伟、陈萍虚幻引擎5的目标是「助力各种规模的团队在视觉领域和互动领域挑战极限,施展无限潜能」。...
- AMD Milan-X双路霄龙7773X平台基准测试曝光 CPU缓存总量超1.5GB
-
OpenBenchmarking基准测试数据库刚刚曝光了AMDMilan-X双路霄龙7773X平台的跑分成绩,虽然很快就被撤下,但我们还是知晓了高达1.6GB的总CPU缓存。早些时...
- 全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)
-
Hello,大家好!近期工作中有涉及到Dify私有化离线部署,特别是针对于一些国产设备。因此特别整理了该教程,实测有效!有需要的小伙伴可以参考下!本文主要针对Dify1.7.2最新版本+国产操作系...
- 在ubuntu下新建asp.net core项目_创建ubuntu
-
本文一步步讲述在ubuntu下用visualstudiocode创建asp.netcore项目的过程。step1:环境操作系统:virtualbox下安装的lubuntu。请不要开启“硬件...
-
- 在晶晨A311D2处理器上进行Linux硬件视频编码
-
在KhadasVIM4AmogicA311D2SBC上,我更多的时间是在使用Ubuntu22.04。它的总体性能还不错,只不过缺少3D图形加速和硬件视...
-
2025-08-26 17:22 haoteby
- Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!
-
之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...
- 电影质量级渲染来了!虚幻引擎5.3正式发布:已开放下载
-
快科技9月8日消息,日前,Unrealengine正式发布了虚幻引擎5.3,带来了大量全方位的改进。...
- 2025如何选购办公电脑?极摩客mini主机英特尔系列选购指南
-
当下,迷你主机的性能越来越强,品类也越来越多。但是CPU是不变的,基本都是AMD和英特尔的。有一个小伙伴在评论区提问,我应该如何在众多机器中选购一台符合自己的迷你主机呢?那今天我们优先把我们的系列,分...
- ubuntu 20.04+RTX4060 Ti+CUDA 11.7+cudnn
-
ububtu添加国内源sudocp/etc/apt/sources.list/etc/apt/sources.list.backupsudovim/etc/apt/sources.lis...
- Linux Mint 18将重新基于Ubuntu 16.04 带来更好硬件支持
-
项目负责人ClementLefebvre在本月6日披露了关于LinuxMint18“Sarah”操作系统的大量信息,包括带来全新扁平化体验的Mint-Y主题。而现在,这款将于年底之前上线的操作...