在许多大公司的面试中,常常会重点考察面试者的计算机基础知识。因此对于在计算机网络、数据结构、操做系统上花费更多的时间和精力,是彻底值得的。HTTP 做为应用最为普遍的网络协议,不论前端和后端都须要常常接触。最近决定对 HTTP 进行了一些学习,因此整理一份笔记并分享给你们。html
HTTP (HyperText Transfer Protocol) 一般被咱们称为超文本传输协议,又译为超文本转移协议。它的命名如何,不须要过于纠结,咱们更应该重视它的内容。前端
OSI | 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 了,好比咱们上不去某个网站,就能够在终端输入测试一下。app
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)和一些其余信息。放一幅在网上找的图给你们展现一下。
这个例子简单总结一下,深刻的话也写不完(摊手)。
方法 | 说明 |
---|---|
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 请求
PUT
与 POST
方法的区别在于,PUT方法是幂等的:调用一次与连续调用屡次是等价的(即没有反作用),而连续调用屡次POST方法可能会有反作用,好比将一个订单重复提交屡次。
DELETE 请求
若是 DELETE
方法成功执行,那么可能会有如下几种状态码:
202
(Accepted) 表示请求的操做可能会成功执行,可是还没有开始执行。204
(No Content) 表示操做已执行,可是无进一步的相关信息。200
(OK) 表示操做已执行,而且响应中提供了相关状态的描述信息。HEAD 请求
HEAD 请求就如同前面表格所说的是获取报文首部,该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此能够节约带宽资源。
OPTIONS 请求
OPTIONS 请求就是用于获取目的资源所支持的通讯选项,平时在作 ionic、Angular 的时候,它就常常会在请求前自动调用一个 OPTIONS 方法。
简单的说,HTTP 状态码就是描述返回的请求结果。 这里仍是拿一个表格展现一下,因为种类比较多,因此只列举种类,不进行彻底列举。
类别 | 缘由 | |
---|---|---|
1xx | Informational(信息性状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 须要进行附加操做以完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器没法处理请求 |
5xx | Server Error(服务端错误状态码) | 服务器处理请求出错 |
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》