HTTP 协议知识点总结(一)

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

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

HTTP 与 TCP/IP

OSI 模型与 TCP/IP 模型对比
OSITCP/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 的区别

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

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

PUT 请求

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

DELETE 请求

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

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

HEAD 请求

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

OPTIONS 请求

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

HTTP 状态码

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

类别原因
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer 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 文档 。

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

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

参考文章

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阶乘的精确值 大数问题

输入不超过1000的正整数n,输出n的阶乘的精确结果 样例输入:30 样例输出:265252859812191058636308480000000 分析: 为了保存结果,需要分析1000!有多大。用计算器算一算不难知道,1000&#x…

Diango博客--22.Django Haystack 全文检索与关键词高亮

文章目录1. Django Haystack 简介2. 安装 django-haystack和elasticsearch 23. 构建容器来运行 elasticsearch 服务4. 配置 Haystack5. 处理数据6. 配置 URL7. 修改搜索表单8. 创建搜索结果页面9. 高亮关键词10. 建立索引文件11. 修改搜索引擎为中文分词12. 防止标题被截断13. …

Vim和Vi的常用命令

Vim 文本编辑器 1、Vim 和 Vi: 两者都是多模式编辑器; Vim 是 Vi 升级版,再兼容 Vi 所有指令的同时增加了一些新功能支持; 特点: 语法加亮:使用不同的颜色加亮代码; 多级撤销:Vi 只能撤销一次操…

oracle中 sql语句:start with .. connect by prior.. 用法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 我们经常会将一个比较复杂的目录树存储到一个表中。或者将一些部门存储到一个表中,而这些部门互相有隶属关系。这个时候你就…

多重继承和单重继承

多重继承(Multiple Inheritance, MI)指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。

3分钟学会SVN:SVN快速上手

选择SVN客户端 Windows平台 TortoiseSVN:也叫乌龟SVN,Windows上最流行的SVN客户端,安装后你的右键就会多了几个SVN相关的菜单,非常方便Eclipse插件:在Eclipse中集成SVN插件,适合使用Eclipse开发的用户&…

flask框架(三):flask配置文件

flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:{DEBUG: get_debug_flag(defaultFalse), 是否开启Debug模式TESTING: False, …

C语言可变参数全解

cstdarg(stdarg.h)可变参数的处理 这个头文件定义了一些宏,可以通过这些宏来逐个访问被调函数的没有名字的参数列表,这些参数的个数 和类型都是不知道的。 一个函数可以通过包含一个逗号和三个点(,...)接收可变数量的额外参数,而不需…

Diango博客--23.单元测试:测试 blog 应用

文章目录1. 前言2. 搭建测试环境3. 测试模型4. 测试视图5. 测试模板标签6. 测试辅助方法和类1. 前言 我们博客功能越来越来完善了,但这也带来了一个问题,我们不敢轻易地修改已有功能的代码了! 我们怎么知道代码修改后带来了预期的效果&…

一般与特殊结构关系 整体与部分结构关系

一般与特殊结构关系又称为分类结构关系,是“is a”关系。 例如:飞机与交通工具都是类,飞机是一种特殊的交通工具。他们之间是“is a”关系。 上层类体现一般性和共性,下层类体现特殊性和具体性。 用这种结构关系来描述现实世界…

简单版:带干扰线的图形验证码生成

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.生成工具类; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; im…

图片格式转换工具与方法

2019独角兽企业重金招聘Python工程师标准>>> 使用ffmpeg进行格式转换 1.jpg 转 I420 ffmpeg -i 001.jpg -pix_fmt yuv420p 001_I420_fromJPG.yuv 2.png 转 I420 ffmpeg -i 222.png -pix_fmt yuv420p 222_I420_fromPNG.yuv 3.bmp 转 I420 ffmpeg -i xxx.bmp -pix_fmt…

Diango博客--24.单元测试:测试评论应用

文章目录1. 前言2. 数据基类3.测试 Comment Model4. 测试视图函数5. 测试模板标签1. 前言 comments应用的测试和blog应用测试的套路是一样的。 先来建立测试文件的目录结构。首先在 comments 应用的目录下建立一个名为 tests 的 Python 包,然后删除 comments 应用…

面向对象设计使用语言选择

面向对象设计的结果既可以用面向对象语言、也可以用非面向对象语言实现。 使用面向对象语言时,由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念映射到目标程序中。 使用非面向对象语言编写面向对象程序&#xf…

结合shiro 的图形验证码生成

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问&#…

利用C语言实现计算机图像处理的方法

1.图像平移 图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0 + dx, y0 &a…

E24- please install the following Perl modules before executing ./mysql_install_db

2019独角兽企业重金招聘Python工程师标准>>> [roott-cet7 scripts]# ./mysql_install_db --basedir/usr/local/mysql/ --datadir/app/data/ --usermysql FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db: Data::Dumpe…

SpringMVC异常报406 (Not Acceptable)的解决办法

使用SpsringMVC&#xff0c;使用restEasy调试&#xff0c;controller请求设置如下&#xff1a; Java代码 RequestMapping(value"/list",methodRequestMethod.GET,producesMediaType.APPLICATION_JSON_VALUE) ResponseBody public List<EditTimeout> list()…

Diango博客--25.使用Coverage统计测试覆盖率

文章目录1. 前言2. 安装 Coverage3. 简单配置 Coverage4. 运行 Coverage5. 完善 Coverage 配置6. 生成 HTML 报告7. 完善单元测试1. 前言 我们完成了对 blog 应用和 comment 应用这两个核心 app 的测试。现在我们想知道的是究竟测试效果怎么样呢&#xff1f;测试充分吗&#x…

面向对象语言的优点

1.一致的表达方法 从前面章节的讲述中可以知道&#xff0c;面向对象开发基于不随时间变化的、一致的表示方法。这种表示方法应该从问题域到OOA&#xff0c;从OOA到OOD&#xff0c;最后从OOD到面向对象编程(OOP)&#xff0c;始终稳定不变。 一致的表示方法&#xff1a; 既有利…