| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 知识体系之HTTP -> 正文阅读 |
|
[网络协议]知识体系之HTTP |
目录 HTTP特点HTTP:超文本传输协议
首部字段Header
1. 通用首部字段请求报文和响应报文两方都会使用的首部。 Connection
Date
Transfer-Encoding
?Upgrade
2. 请求首部字段客户端向服务端发送请求报文时使用的首部。补充了请求附加内容、客户端信息、响应内容相关优先级等信息。 ?Host:客户端发送请求时,用来指定服务器的域名 虚拟主机运行在同一个IP上,因此使用首部字段Host加以区分 首部字段Host(Host: www.hackr.jp)会告知服务器,请求的资源所处的互联网主机名和端口号。 Anthorization ????????用来告知服务器,用户代理的认证信息。(与401错误码配合使用) ????????Authorization: Basic dWVub3NlbjpwYXNzd29yZA== User-Agent ? ? ? ? 将创建请求的浏览器和用户代理名称等信息传达给服务器。 ????????User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko Referer ????????首部字段Rederer会告知服务器请求的原始资源的URI Range 对于只需要获取部分资源的范围请求,包括首部字段Range即可告知服务器资源的指定范围。 备注:接收到附带Range首部字段请求的服务器,会在
Range: bytes=5001-10000,表示请求获取从第5001到10000字节的资源 Max-Forwards ????????通过Trace方法或Options方法,发送包含首部字段Max-Forwards的请求时,该字段指定可以经过服务器最大数目。 Accept ????????通知服务器,用户代理能够处理的媒体类型以及媒体类型的相对优先级(可使用type/subtype这种形式,一次指定多种媒体类型) 媒体类型
Accept-Charset ? ? ? ? 通知服务器用户代理支持的字符集以及字符集的相对优先顺序 Accept-Encoding ? ? ? ? 告知服务器用户代理支持的内容编码以及内容编码的优先级顺序。可一次性指定多种内容编码。 编码方式:gzip、compress、deflate、identity Accept-Language ? ? ? ? 告知服务器用户代理能够处理的自然语言集合以及自然语言集合的相对优先级。可一次指定多种自然语言集。 条件请求 If-XXX 服务器接收到条件请求后,只有判断指定条件为真,才会执行请求 If-Match:告知服务器匹配资源所用的实体标记值Etag(服务器对比If-Match的字段值和资源Etag,当且仅当二者一致时,才会执行请求。繁殖,返回412Precondition Failed的响应) If-Modified-Since:如果在If-Modified-Since指定的日期时间后,资源发生了更新,服务器才会接收请求
If-Range:它告知服务器若指定的If-Range字段值(Etag值或时间)和请求资源的Etag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。 3. 响应首部字段服务端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。 Accept-Ranges 用来告知客户端,服务器是否能处理范围请求(分为两种结果)
Etag 首部字段Etag能告知客户端实体的唯一标识。服务端为每份资源分配一个Etag。 Location
?Retry-After ????????告知客户端,在多久后可以发起重试请求。主要配合503 Service Unavailable响应 Age ????????Age能告诉客户端,服务器在多久前创建了响应。 4. 实体首部字段针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。 Allow:通知客户端,能够支持的HTTP方法method Content-Encoding:告知客户端,服务器对实体的主体部分选择使用的编码方式 ????????Content-Encoding: gzip Content-Language:告知客户端,服务器对实体的主体部分使用的语言(中文或英文等) ????????Content-Language: zh-CN Content-Length:表示实体主体部分的大小(字节) ????????Content-Length: 15000 Content-Location:首部字段Content-Location给出与报文主体部分相对应的URI。
????????Content-Location: http://www.hackr.jp/index-ja.html Content-MD5:在于检查报文主体在传输过程中是否保持完整,以及确认传输到达 ????????Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY== Content-Range:针对范围请求,返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围请求。 ????????Content-Range: bytes 5001-10000/10000 Content-Type:说明了实体主体内对象的媒体类型。 ????????Content-Type: text/html; charset=UTF-8 Expires:资源失效的日期 ????????Expires: Wed, 04 Jul 2012 08:26:05 GMT Last-Modified:资源最近一次修改的时间 ????????Last-Modified: Wed, 23 May 2012 09:59:55 GMT 5.为Cookie服务的首部字段Cookie
Set-Cookie
请求报文的构成请求报文:[请求方法、请求URI、HTTP协议版本]、[可选的请求首部]、[内容实体] 请求行:[method] [URI] [HTTP版本]
请求首部 空行 内容实体 响应报文的构成响应报文:[HTTP协议版本、状态码、原因短语]、[可选的响应首部]、[内容实体] 响应行: HTTP/1.1 HTTP的版本号、200 状态码、OK 原因短语 响应首部 空行 资源实体的主题(entity body) HTTP方法(method)GET:获取响应的主体内容 POST:传输实体主体 PUT:传输文件(就向FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置) HEAD:获得报文首部(和GET一样,只是不返回报文的主体部分,用于确认URI的有效性、资源更新的日期时间等) DELETE:删除文件(与PUT方法相反),按照请求URI删除指定资源 OPTIONS:询问支持的方法 TRACE:追踪路径(让web服务器端将之前的请求通信环回给客户端的方法) 1. 发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器端就将该数字减 1,当数值刚好减到 0 时,就停止继续传输,最 后接收到请求的服务器端则返回状态码 200 OK的响应 2.?客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修改?/ 篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理中转,TRACE 方法就是用来确认连接过程中发生的一系列操作 CONNECT:要求用隧道协议连接代理
????????要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用
SSL
(Secure Sockets Layer,安全套接层)和 TLS
(
Transport Layer Security
,传输层安全)协议把通信内容加 密后经网络隧道传输
Q1: GET和POST区别 A1: ①请求参数保存的位置 ②数据格式 ③数据大小限制
Q2: GET和POST方法都是幂等的么? A2:
状态码????????HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。 状态码的类别 2XX成功200?OK,从客户端发来的请求在服务端被正常处理了 在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。比如,
204?Not Content,服务端接收到的请求已经成功处理,但是在返回的响应报文中不包含实体的主体部分 比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新 206?Partial Content,表示客户端进行了范围请求,而服务端成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容
3XX 重定向301?Moved Permanently 永久重定向,表示请求的资源已经被分配到了新的URI,以后就使用资源现在所指的URI。(也就是说,如果已经把资源对应的URI保存为书签了,这时应该按照Location首部字段提示的URI重新保存)
302 Found,临时性重定向,表示请求的资源已经被分配了新的URI,希望用户本次能使用新的URI访问。
? ? ? ? 和301状态码相似,但是302状态码代表的资源不是被永久移动,只是临时性的。换句话说,已移动的资源对应的URI将来还有可能发生改变。比如,用户把URI保存成书签,但不会像301状态码出现时那样去更新书签,而是仍旧保留返回302状态码的页面对应的URI 补充:301和302都会在响应头里使用字段Location,指明后续跳转的URL,浏览器会自动重定向到新的URL。 303?See other,表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。 注解:303和302有着相同的功能,但303明确表示客户端应当采用GET方法获取资源,这点与302有区别。比如,
补充:HTTP的RFC规范,不允许客户端在重定向时改变请求的方法mentod
307 Temporary Redirect,临时重定向,该状态码和302有着相同的含义。 ? ? ? ? 为了解决上面的问题:尽管RFC标准禁止POST变换成GET,但是实际使用时大家并不遵守。引出了307。==>?307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应的行为,每种浏览器可能出现不同的情况。 304?Not Modified,表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况。
说明:附带条件的请求是指采用GET方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部
4XX 客户端错误400?Bad Request,表示请求报文中存在语法错误(服务端无法理解客户端发送的请求)
401?Unauthorized,表示发送的请求需要有通过HTTP认证的认证信息。另外,若之前已进行过一次请求,则表示用户认证失败。
403 Forbidden 表示对请求资源的访问被服务器拒绝了
?????????服务器没有必要给出拒绝的详细理由,但如果想做说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。 ? ? ? ? 未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)等列举的情况都可能是发生403的原因。 404 Not Found
使用场景
5XX 服务端错误500 Internal Server Error 表示服务端在执行请求时发生了错误(可能是web应用存在的bug或某些临时的故障)
501 Not Implemented 表示客户端请求的功能,服务端还不支持,类似”即将开业,敬请期待“的意思 502 Bad Gateway 通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误 503 Service Unavailable 服务器忙碌,暂时无法提供服务,类似”网络服务正忙,请稍后重试“
HTTPSHTTP的缺点
HTTPS? ? ? ? 通过和SSL(secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,建立安全通信线路后,加密HTTP的通信内容。 ? ? ? ? HTTPS = HTTP + 加密 + 身份认证 + 完整性保护 对称加密(共享秘钥加密)
存在问题: 非对称加密(公开密钥加密)说明:非对称加密,很好的解决了对称加密的问题 特点
过程
存在问题:公开密钥是否是正确的?举例说明
CA机构颁发的公开密钥证书作用:证明公开密钥正确性的证书(证明非对称加密的公开密钥是货真价实的公开密钥) 证明公开密钥的正确性,可以使用数字证书认证机构(CA,Certificate Authority)和相关机关颁发的公开密钥证书。
CA为“服务端公开密钥”颁发公开密钥证书的过程
浏览器验证证书有效性的流程
HTTPS安全通信机制HTTPS采用混合加密机制
HTTP/2做了什么优化? 头部压缩:HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分
二进制格式 ????????HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧(Headers Frame)和数据帧(Data Frame) ????????这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。 数据流 (stream) ????????HTTP/2 的数据包不是按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。 ????????在 HTTP/2 中每个请求或相应的所有数据包,称为一个数据流( ????????客户端和服务器双方都可以建立 Stream, Stream ID 也是有区别的,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。 多路复用 ????????HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应。 ????????移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率 服务器推送 ????????HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息。 ????????比如,客户端通过 HTTP/1.1 请求从服务器那获取到了 HTML 文件,而 HTML 可能还需要依赖 CSS 来渲染页面,这时客户端还要再发起获取 CSS 文件的请求,需要两次消息往返,如下图左边部分: ????????如上图右边部分,在 HTTP/2 中,客户端在访问 HTML 时,服务器可以直接主动推送 CSS 文件,减少了消息传递的次数?
HTTP/3 做了哪些优化?
Web攻击技术参考文章 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:52:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |