HTTP 协议知识点总结(一)

HTTP

在许多大公司的面试中,经常会重点考察面试者的计算机基础知识。所以对于在计算机网络、数据结构、操作系统上花费更多的时间和精力,是完全值得的。HTTP 作为应用最为广泛的网络协议,不论前端和后端都需要经常接触。最近决定对 HTTP 进行了一些学习,所以整理一份笔记并分享给大家。

HTTP (HyperText Transfer Protocol) 通常被我们称为超文本传输协议,又译为超文本转移协议。它的命名如何,不需要过于纠结,我们更应该重视它的内容。

HTTP 与 TCP/IP

OSI 模型与 TCP/IP 模型对比
OSI TCP/IP
应用层
表示层
会话层
应用层
传输层 传输层
网络层 网络层
数据链路层
物理层
链路层
TCP/IP 四层模型分析

HTTP 是 TCP/IP 协议内部的一个子集,在了解它之前我们需要先了解一下 TCP/IP 相关的知识。TCP/IP(Transmission Control Protocol/Internet Protocol)协议分为应用层、传输层、网络层、链路层四层,我简单的来总结举例一下。

应用层

应用层向用户提供一系列的应用服务。
比如我们熟悉的 DNS(Domain Name Service,域名解析)、FTP(File Transfer Protocol,文件传输协议),当然还有我们要讲的 HTTP 协议。
有时在 App Store 无法下载应用时,就经常会把 DNS 设置为谷歌的 8.8.8.8 或者国内的 114.114.114.114,这些都是比较常见的服务。

传输层

传输层提供连接两台计算机之间的数据传输。
传输层有两种协议:
TCP(Transmission Control Protocol,传输控制协议)
UDP(User Datagram protocol,用户数据报协议)

网络层

网络层规定了通过什么样的方式将数据包传递给对方。
网络层协议的代表包括:
IP(Internet Protocol,互联网协议)
ICMP(Internet Control Message Protocol,互联网消息控制协议)

因为 IP 并不是完全可靠,无法保证数据被送达。所以需要 ICMP 传输出错报告控制信息。ICMP 最著名的应用应该就是 ping 了,比如我们上不去某个网站,就可以在终端输入测试一下。

ping www.baidu.com
// 然后就可以看到一些返回值
PING www.a.shifen.com (180.149.132.151): 56 data bytes
64 bytes from 180.149.132.151: icmp_seq=0 ttl=55 time=31.431 ms
Request timeout for icmp_seq 1
64 bytes from 180.149.132.151: icmp_seq=2 ttl=55 time=30.530 ms
64 bytes from 180.149.132.151: icmp_seq=3 ttl=55 time=30.233 ms    

链路层

链路层用来链接网络的硬件部分。
网络层传过来的数据在这里被加工成了可被物理层传输的结构包——帧。帧中包括 MAC 地址(Media Access Control)和一些其他信息。放一幅在网上找的图给大家展示一下。

数据帧结构
一个访问百度网站的例子
  1. 在浏览器输入 http://www.baidu.com
  2. DNS 通过你输入的地址,找到百度的 IP 地址 14.215.177.38。
  3. 通过 ARP 协议寻找 MAC 地址,建立 TCP 连接。
  4. 三次握手
    • 发送端:发送带有 SYN 的数据包
    • 接收端:应答,发送带有 SYN/ACK 的数据包
    • 发送端:应答,发送带有 ACK 的数据包
  5. 通过返回的数据包显示网页

这个例子简单总结一下,深入的话也写不完(摊手)。

常见的 HTTP 方法

方法 说明
GET 获取资源
POST 传输实体主体
PUT 传输替换目标资源
DELETE 删除目标资源
HEAD 获取报文首部
OPTIONS 获取支持的方法
常见方法分析

GET 与 POST 的区别

这也算是面试比较常问的问题了,这里放上一个表格。

GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器会提示)
书签/缓存/历史 X
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码
数据长度限制 URL 的最大长度是 2048 个字符 无限制
数据类型限制 只允许 ASCII 字符 无限制
可见性 数据在 URL 中对所有人可见、请求会保存在历史记录 数据保存在主体中、请求不会保存在历史记录

PUT 请求

PUTPOST 方法的区别在于,PUT方法是幂等的:调用一次与连续调用多次是等价的(即没有副作用),而连续调用多次POST方法可能会有副作用,比如将一个订单重复提交多次。

DELETE 请求

如果 DELETE方法成功执行,那么可能会有以下几种状态码:

  • 状态码 202 (Accepted) 表示请求的操作可能会成功执行,但是尚未开始执行。
  • 状态码 204 (No Content) 表示操作已执行,但是无进一步的相关信息。
  • 状态码 200 (OK) 表示操作已执行,并且响应中提供了相关状态的描述信息。

HEAD 请求

HEAD 请求就如同前面表格所说的是获取报文首部,该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源。

OPTIONS 请求

OPTIONS 请求就是用于获取目的资源所支持的通信选项,平时在做 ionic、Angular 的时候,它就经常会在请求前自动调用一个 OPTIONS 方法。

HTTP 状态码

简单的说,HTTP 状态码就是描述返回的请求结果
这里还是拿一个表格展示一下,由于种类比较多,所以只列举种类,不进行完全列举。

类别 原因
1xx Informational(信息性状态码) 接收的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务端错误状态码) 服务器处理请求出错

HTTP 报文首部字段

HTTP 报文的首部字段,主要是用来传递额外的重要信息

一个简单的请求例子

前面讲了这么多,这里结合请求方法、状态码等举一个例子。

发起请求:

GET / HTTP/1.1
Request URL: https://www.baidu.com/favicon.ico
Host: www.baidu.com
Accept-Language: zh-CN

服务端返回:

HTTP/1.1 200 OK
Date: Sat, 07 Apr 2018 02:17:48 GMT
Server: Apache
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
Accept-Ranges: bytes
Content-Length: 984
Content-Type: image/x-icon

现在我们分析一下这个例子。

发起请求

// 请求方法 / HTTP 版本号
GET / HTTP/1.1
// 请求地址
Request URL: https://www.baidu.com/favicon.ico
// 请求资源所在服务器
Host: www.baidu.com
// 优先选择的语言(自然语言)
Accept-Language: zh-CN

服务端返回

// HTTP 版本、HTTP 状态码 200
HTTP/1.1 200 OK
// 创建报文的日期
Date: Sat, 07 Apr 2018 02:17:48 GMT
// HTTP 服务器的安装信息
Server: Apache
// 资源的最后修改时间
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
// 支持字节范围请求
Accept-Ranges: bytes
// 实体主体的大小
Content-Length: 984
// 实体主体的类型
Content-Type: image/x-icon

HTTP 首部字段种类非常多,该例子举例了常用的一部分,想了解更多可以研究 MDN HTTP Headers 文档

MDN HTTP Headers

目前里面中文翻译不够完整,翻译水平高的朋友可以点击帮忙完善一下,为开源事业出一份力:)

这次就总结到这里了,由于水平有限,难免有些许纰漏。有什么错误请指出,不胜感激。

参考文章

为何HTTP被翻译为“超文本传输协议”是一次历史上的重大翻译错误?
HTTP 协议入门-阮一峰
TCP/IP 协议 百度百科
ping 原理与ICMP协议
漫谈网络通信——从OSI网络模型到TCP/IP协议族
HTTP 方法-w3school
HTTP 请求方法-MDN
《图解HTTP》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,941评论 1 13
  • 版本记录 前言 在互联网行业中,不管你是客户端前端还是后台,只要是与网络相关,你就必须了解一些基础知识,包括这里的...
    刀客传奇阅读 1,869评论 0 16
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,037评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 网络概念第一天 两台电脑怎么通过网络传输数据?怎样才能知道传输的是数据?谁摸过网线? 看电影,怎么看的?通过电流,...
    小吖朱阅读 1,539评论 0 1