计算机网络: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--- ...
随机推荐
- Python__bs4模块
1 - 导入模块 from bs4 import BeautifulSoup 2 - 创建对象 fp = open('./test.html','r',encoding='utf-8') soup = ...
- Intel® QAT加速卡之同步异步模式
QAT 的两种操作模式 Intel QAT API同时支持同步和异步两种操作模式. 为了获得最佳性能,该应用程序应能够向加速引擎提交多个未完成的请求. 提交多个未完成的请求可最大程度地减少加速引擎上的 ...
- python爬区csdn文章信息(原始稿)
使用python对csdn的博主文章进行爬取,期间又遇到了新的问题和旧的已经遇到过的问题.首先做一个笔记,免得以后遇到同样的问题时还得浪费时间和经历. 刚开始目的没那么明确,主要在于熟悉相关的规则及流 ...
- Filter案例之敏感词过滤和代理模式
一.需求分析 二 .代理模式 1.概念 2.代码实现 代理对象可以强转为真实对象,即对应的接口类: 3.通过代理增强方法 其中,方法对象invoke真实对象,反射原理: 三.过滤敏感词汇案例代码实现 ...
- [第六篇]——云服务器之Spring Cloud直播商城 b2b2c电子商务技术总结
云服务器 云服务器(Elastic Compute Service, ECS)是一种简单高效.安全可靠.处理能力可弹性伸缩的计算服务. 云服务器管理方式比物理服务器更简单高效,我们无需提前购买昂贵的硬 ...
- 01-mysql必知必会
概述 主键:唯一区分表中每个行(不可重复,不允许null mysql:基于客户-服务器的数据库系统 使用mysql mysql是部署在主机上的,可以通过ssh建立mysql连接 # 显示数据库 sho ...
- Zookeeper分布式安装部署
1. 解压安装 1.1 解压Zookeeper安装包到/opt/module/目录下 tar -zxvf /opt/software/apache-zookeeper-3.6.2-bin.tar.gz ...
- Groovy系列(5)- Groovy IO操作
IO操作 Groovy为I/O操作提供了许多帮助方法,虽然你可以在Groovy中用标准Java代码来实现I/O操作,不过Groovy提供了大量的方便的方式来操作File.Stream.Reader等等 ...
- 传说中 VUE 的“语法糖”到底是啥?
一.什么是语法糖? 语法糖也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语.指的是计算机语言中添加的一种语法,在不影响功能的情况下,添加某种简单的语 ...
- Ubuntu18.04安装jenkins
官网参考指引:https://pkg.jenkins.io/debian-stable/ wget -q -O - https://pkg.jenkins.io/debian-stable/jenki ...