计算机网络:HTTP
计算机网络基础:HTTP
先验知识
HTTP和其他协议的关系
通过下图,了解IP协议,TCP协议,DNS服务在使用HTTP协议通信过程中各自发挥的作用:

服务器处理流程
接受客户端连接 ------> 接受请求报文 ------> 处理请求 ------> 访问Web资源 ------> 构造应答 ------> 发送应答
URL和URI
URL
Uniform Resource Locator,统一资源定位符,访问web浏览器时需要输入的网页地址就是这个;
表示了资源的地址,根据URL是可以找到这个资源的;
例如:https://www.cnblogs.com/zhuchengchao/p/12899458.html
URI
Uniform Resource Identity,统一资源标识符,即用字符串标识了某一个资源;
例如:/zhuchengchao/p/12899458.html
联系与区别
URL为URI的子集,举个例子:URI为——花,URL为——百合花;
URI用字符串标识某一互联网资源,而URL表示了资源的地址;
URI是抽象的,在详细定位资源时要使用URL;
HTTP报文格式
请求报文格式

请求报文的方法
GET:获取指定的服务端资源
- 请求参数直接跟在URL后面;
- 请求的URL长度有限制;
- 传输参数明文传输,不安全;
- 一般作为用户获取资源,即查询数据;
POST:提交数据到服务器端
- 请求参数在请求体中,即上图中的报文主体;
- 请求的URL长度没有限制;
- 相对安全;
- 一般用于修改数据;
其他方法:
- PUT:传输文件;
- UPDATE:更新指定的服务端资源;
- DELETE:删除指定的服务端资源;
- HEAD:获取报文首部,和GET的区别为,不需要返回报文主体,只要首部即可;
- OPTIONS:查询支持的方法,是否支持GET,PUT,DELETE... ...
响应报文格式

响应报文的状态码

2XX:请求成功状态码
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 200 | OK | 从客户端发出的请求在服务器端被正确处理了 |
| 204 | No Content | 请求已经被成功处理,返回的相应报文中不含主体数据 |
| 206 | Partial Content | 服务器对客户端的范围请求相应成功 |
3XX:重定向状态码
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 301 | Moved Permanently | 永久性重定向:为资源的请求分配了新的URI,以后都要使用这一个URI |
| 302 | Found | 临时重定向:为资源的请求分配了新的URI,仅限于本次 |
| 303 | See Other | 与302相同,但明确表明需用GET方式获取资源 |
| 304 | Not Modified | 客户端发送附带的条件请求不满足,导致返回的响应内容不包含主体 |
| 307 | Temporary Redirect | 临时重定向:与302相同,但307遵守不将POST变为GET请求。 |
4XX:客户端错误状态码
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 400 | Bad Request | 请求报文存在语法错误,服务器无法理解 |
| 401 | Unauthorized | 发送的请求需要通过HTTP认证 |
| 403 | Forbidden | 对资源的访问请求被服务器拒绝了 |
| 404 | Not Found | 服务器上无法找到请求的资源 |
5XX:服务器错误状态码
| 状态码 | 原因短语 | 说明 |
|---|---|---|
| 500 | Internal Server Error | 服务器在执行请求时发生了错误,无法提供资源 |
| 503 | Service Unavailable | 服务器暂时处于超负荷或正在停机维护,无法处理请求 |
HTTP报文首部
HTTP协议的请求和响应报文中必定包含着HTTP的首部;
在上方HTTP的请求/响应报文的格式中可以看出,报文首部由如下部分组成:
- 请求报文:请求行,请求首部字段,通用首部字段,实体首部字段;
- 响应报文:状态行,响应首部字段,通用首部字段,实体首部字段。
格式:
- 首部字段名:字段值
通用首部字段
请求报文和响应报文都会使用的字段。
| 首部字段名 | 说明 | 示例 |
|---|---|---|
| Cache-Contorl | 控制缓存行为 | Cache-Contorl: private, max-age=0, no-chache |
| Connection | 管理持久连接;控制不再转发给代理的首部字段 | Connection: Keep-Alive Connection: 不再转发的首部字段名 |
| Data | 创建报文的日期时间 | Data: Thu, 26 Mar 2020 05:36:55 GMT |
| Pragma | 报文指令 | Pragma: no-cache |
| Trailer | 报文末端的首部一览 | Trailer: Expires ...(报文主体)... Expires: Thu, 26 Mar 2020 05:36:55 GMT |
| Transfer-Encoding | 指定报文主体的传输编码方式 | Transfer-Encoding: chunked |
| Upgrade | 升级为其他协议 | Upgrade: TSL/1.0 Connection: Upgrade |
| Via | 代理服务器的相关信息 | Via: 1.0 gw.hacher.jp(Squid/3.1) Via: 1.0 gw.hacher.jp(Squid/3.1), 1.1 al.example.com(Squid/2.7) |
| Waring | 错误通知 | Waring: 警告码 警告的主机:端口号 “警告内容” (日期时间) Waring: 113 gw.hacker.jp:8080 "Heuristic expiration" |
请求首部字段
客户端向服务器发送请求报文时使用的首部,补充了请求的附加内容,客户端信息,响应内容相关优先级等信息。
| 首部字段名 | 说明 | 示例 |
|---|---|---|
| Accept | 用户代理可处理的媒体类型 | Accept:text/html, application/xhtml+xml, application/xml;q=0.9, image/apng,/;q=0.8 |
| Accept-Charset | 优先的字符集 | Accept-Charset: iso-8859-5.unicode-1-1;q=0.8 |
| Accept-Encoding | 优先的内容编码 | Accept-Encoding: gzip, deflate, br |
| Accept-Language | 优先的语言(自然语言) | Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 |
| Authorization | Web认证信息 | Authorization: Basic avajoPdaD== |
| Expect | 期待服务器的特定行为 | Expect: 100-continue |
| From | 用户的电子邮箱地址 | From: xxx@xxx.xxx |
| Host | 请求资源所在的服务器 | Host: www.baidu.com |
| if-Match | 比较实体标记(ETag) | if-Match: "123456" |
| if-Modified-Since | 比较资源的更新时间 | if-Modified-Since: 时间 |
| if-None-Match | 与if-Match相反 | if-None-Match: "123456" |
| if-Range | 资源未更新时发送实体Byte的范围请求 | if-Range: "123456" Range: bytes=5001-10000 |
| if-Unmodified-Since | 与if-Modified-Since相反 | if-Unmodified-Since: 时间 |
| Max-Forwards | 最大传输逐跳数,为0时,不再进行转发 | Max-Forwards:10 |
| Proxy-Authorization | 代理服务器要求客户端的认证信息 | Proxy-Authorization: Basic avajoPdaD== |
| Range | 实体的字节范围请求 | Range: bytes=5001-10000 |
| Referer | 对请求中URI的原始获取方 | Referer: https://www.baidu.com/ |
| TE | 传输编码的优先级 | TE: gzip, deflate; q=0.5 |
| User-Agent | HTTP客户端程序的信息 | User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 |
响应首部字段
从服务器向客户端返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息。
| 首部字段名 | 说明 | 示例 |
|---|---|---|
| Accept-Ranges | 是否接受字节范围请求 | Accept-Ranges: bytes |
| Age | 推算资源创建经过时间 | Age: 53 |
| ETag | 资源的匹配信息 | ETag: "5e8d4b59-c5c" |
| Location | 令客户端重定向到指定URI | Location: http://....... |
| Proxy-Authenticate | 代理服务器对客户端的认证信息 | Proxy-Authenticate: Basic realm="Usagidesign Auth" |
| Retry-After | 对再次发起请求的时机要求 | Retry-After: 120 |
| Server | HTTP服务器的安装信息 | server: sffe |
| Vary | 代理服务器缓存的管理信息 | Vary : Accept-Encoding |
| WWW-Authenticate | 服务器对客户端的认证信息 | WWW-Authenticate: Basic realm="Usagidesign Auth" |
实体首部字段
针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等于实体有关的信息。
| 首部字段名 | 说明 | 示例 |
|---|---|---|
| Allow | 资源可支持的HTTP方法 | Allow: GET, HEAD |
| Content-Encoding | 实体主体适用的编码方式 | Content-Encoding: gizp |
| Content-Language | 实体主体的自然语言 | Content-Language: zh-CN |
| Content-Length | 实体主体的大小(单位:Byte) | Content-Length: 1500 |
| Content-Location | 替代对应资源的URI | Content-Location: http:// ../../.. |
| Content-MD5 | 实体主体的报文摘要 | Content-MD5: JBK...ddkjfkl== |
| Content-Range | 实体主体的位置范围 | Content-Range: bytes 5001-10000/10000 |
| Content-Type | 实体主体的媒体类型 | Content-Type: image/jpeg |
| Expires | 实体主体过去的日期时间 | Expires: Sat, 23 May 2020 01:41:38 GMT |
| Last-Modified | 资源的最后修改日期时间 | Last-Modified: Sat, 16 May 2020 01:41:38 GMT |
非HTTP1.1首部字段——Cookie
概述
由于HTTP是无状态协议,即无法记住之前与其通讯的客户端;
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态;

| 首部字段 | 说明 | 首部类型 |
|---|---|---|
| Set-Cookie | 开始状态管理所使用的Cookie信息 | 响应首部字段 |
| Cookie | 服务器接收到的Cookie信息 | 请求首部字段 |
Set-Cookie:
Set-Cookie: status=enable; expire= 时间; path=/; domain=.***.com
字段说明:
| 属性 | 说明 |
|---|---|
| NAME=VALUE | 赋予Cookie的名称和其值(必须) |
| expire=DATE | Cookie的有效期 (若无,则默认为浏览器关闭为止) |
| path=PATH | 将服务器上的文件目录作为Cookie的使用对象 (若无,则默认为文档所在的文件目录) |
| domain=域名 | 作为Cookie使用对象的域名 (若无,则默认为创建Cookie的服务器域名) |
| Secure | 仅在HTTPS安全通信时才会发送Cookie |
| HttpOnly | 加以限制,使Cookie不能被JavaScript脚本访问 |
Cookie:
Cookie: BAIDUID=***; BDORZ=***; COOKIE_SESSION=***; BD_HOME=1; H_PS_PSSID=***; sug=3; sugstore=0; ORIGIN=2; bdime=0Cookie: status=enable
告知服务器,当客户端想要获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie
Session
服务器端会话技术,访问者从访问某个网站开始到离开为止;
在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中;
由于HTTP是无协议的,因此会使用Cookie来管理Session,因此Session的实现是依赖于Cookie的;
Session与Cookie的区别:
- session存储数据在服务器端,Cookie在客户端;
- session没有数据大小限制,Cookie有;
- session数据安全,Cookie相对于不安全。

HTTPS
概述
HTTPS(Secure)是安全的HTTP协议,不作为新协议,只是在HTTP通信接口部分加上了SSL(Secure Socket Layer,安全套接层)和TSL(Transport Layer Security,安全层传输协议),HTTPS是身披SSL外壳的HTTP;

HTTPS=HTTP+加密+完整性保护
格式:https://<主机>:<端口>/<路径>
端口由原先的80端口,变为443端口
HTTP存在的问题
问题一:HTTP是明文传输的,内容会被窃听;
问题二:不验证通信方的身份,可能遭遇伪装
问题三:无法证明报文的完整性,可能已遭篡改
HTTPS解决问题
采用加密方式
通信加密:
通过SSL或TSL的组合使用,加密HTTP的通信内容;
用SSL建立安全通信线路后,就可以在这条线路上进行HTTP通信;

内容加密:
HTTP采用混合加密机制:综合使用了非对称和对称加密的方式,流程概括如下:

根据了随机数1,2,3和相同的加密算法生成了共享秘钥;
双方使用对称秘钥进行加密通信。
- 内容加密是指,将传输的报文主体进行加密,但是对于报文首部信息是不会加密的;
- 共享加密=对称加密:加密和解密都是通过同一个秘钥;
- 公钥加密=非对称加密:
- 公钥:可以随意发布在网上,可以解开有私钥加密的数据;
- 私钥:需要保密,不能被人知道,可以解开由公钥加密的数据。
数字证书
通过数字证书来确定通信方,数字证书是可信任组织颁发给特定对象的认证;
通过证书,可以证明通信方就是意料之中的服务器。

数字证书组成:证书格式、版本号;证书序列号;签名算法;有效期;对象名称;对象公开秘钥;...
HTTPS通信步骤

参考
《图解TCP/IP》 [日]竹下隆史等
《图解HTTP》[日]上野宣
计算机网络:HTTP的更多相关文章
- [计算机网络]简易http server程序
好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...
- [Network] 计算机网络基础知识总结
计算机网络学习的核心内容就是网络协议的学习.网络协议是为计算机网络中进行数据交换而建立的规则.标准或者说是约定的集合.因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标 ...
- 计算机网络中的帧封装(C实现)
这段时间开始复习计算机网络,看到帧封装这一节,结合以前的课程设计,就用C写了个帧封装的程序,说实话C学的确实不怎么样,实现的时候对于文件操作那部分查了好多资料,下面说说帧封装是啥情况. 学过计算机网络 ...
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 转载
基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...
- 计算机网络(7)-----TCP协议概述
传输控制协议(Transmission Control Protocol) 概念 一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中,它 ...
- 【转】牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会 ...
- 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解
楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...
- 2016.7.7 计算机网络复习要点第四章之网际协议IP
1.与IP协议配套使用的还有三个协议: **地址解析协议ARP: **网际控制报文协议ICMP: **网际组管理协议IGMP: 2.虚拟互连网络: **没有一种单一的网络能够适应所有用户的需求: ** ...
- 计算机网络及TCP/IP知识点(全面,慢慢看)
TCP/IP网络知识点总结 一.总述 1.定义:计算机网络是一些互相连接的.自治的计算机的集合.因特网是网络的网络. 2.分类: 根据作用范围分类: 广域网 WAN (Wide Area Networ ...
- 开始认真学计算机网络----computer network学习笔记(一)
什么是计算机网络,就是连一堆计算机,计算机不单单指pc,还包括打印机啦,手机啦巴拉巴拉一堆 为什么要连,share data共享数据 数据? 文档,图片,视频,巴拉巴拉 网络有什么类型? LAN--- ...
随机推荐
- Django——Ajax发送请求验证用户名是否被注册
场景: 用户注册的时候,输入用户名之后,Ajax发送请求到后端,后端验证该用户名是否已经被注册,然后返回到注册页面提示用户. 1.模型: from django.db import models cl ...
- Java并发知识总结,超详细!
首先给大家分享一个github仓库,上面放了200多本经典的计算机书籍,包括C语言.C++.Java.Python.前端.数据库.操作系统.计算机网络.数据结构和算法.机器学习.编程人生等,可以sta ...
- TCP头部格式和封装
文章目录 12.3 TCP头部和封装 12.3.1 端口号 12.3.2 序列号 12.3.3 头部长度 12.3.4 相关控制位 12.3.5 窗口大小 12.3.6 校验和 12.3.7 选项字段 ...
- TCP超时重传、序列号、滑动窗口简介
文章目录 12 TCP:传输控制协议(初步) 12.1 引言 12.1.1 ARQ和重传 12.1.2 分组窗口和滑动窗口 12.1.3 变量窗口:流量控制和拥塞控制 12.1.4 变量窗口:设置重传 ...
- GridView控件使用
增加显示列gridView.Columns.AddVisible("AgentName", "姓名");设置是否为只读gridView1.OptionsBeha ...
- 比年轻更年轻,快看能否接棒B站?
撰文 |懂懂 编辑 | 秦言 来源:懂懂笔记 背靠超新Z世代,快看能否接棒B站? 国漫什么时候能追上日漫? 国漫作者真能挣到钱吗? 国漫什么时候才能走向世界? 这是中国漫画从业者的"灵魂三问 ...
- DLL延时加载技术与资源释放
DLL延时加载技术与资源释放 0x00 前言 诸如调用非Windows的第三方库,我们或许会使用到dll文件,而这个时候原本程序运行需要相应的dll文件才能加载启动.通过DLL延时加载技术,使用延时加 ...
- golang接口类型判断 VS 接口类型查询
接口类型判断:接口.(类型) 1.类型查询:查询接口数据对应的类型是否是指定的类型 2.类型转化:如果是指定类型,就将数据转化为接口类型查询: 1.reflect.TypeOf(接口) 2.接口.(T ...
- Java统计文件中字母个数
import java.text.DecimalFormat; import java.io.File; import java.io.FileReader; import java.io.Buffe ...
- MapReduce原理深入理解(一)
1.MapReduce概念 1)MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. 2)MapReduce是分布式运行的,由两个阶段组成:Map和R ...