HTTP实用指南|青训营笔记

88 阅读6分钟

这是我参与「第四届青训营 」笔记创作活动的的第6天

HTTP协议

初识HTTP协议

HTTP即是Hyper Text Transfer Protocol超文本传输协议,它属于应用层的协议,基于TCP协议,分类为请求和响应,特点是简单无扩展,无状态。

协议分析

发展

HTTP/0.9:单行协议,请求有GET/mypage.html,响应只有HTML文档
HTTP/1.0:构键可扩展性,增加header,有了状态码,支持多种文档类型
HTTP/1.1:标准化协议,链接复用,缓存,内容协商
HTTP/2:优异的表现,二进制协议,压缩header,服务器推送
HTTP/3:处于提出草案阶段提出草案

报文

GET:获取资源,用于向服务器查询某一些信息。
POST:传输实体文本,POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。
PUT:这个方法用于传输文件。机制为要求在请求报文的主体中包含文件内容,然后保存在请求URI指定的位置。
DELETE:删除某个资源,一般是用来客户端指示服务端的,与PUT 不同的是,DELETE 是按照URL删除指定资源的。
OPTIONS:查询支持的方法。允许客户端查看服务器的性能。
CONNECT:要求用隧道协议连接代理。这个方法要求在与代理服务器通信的时候建立隧道,并实现用隧道协议进行TCP通信。
TRACH:要求用隧道协议连接代理。这个方法要求在与代理服务器通信的时候建立隧道,并实现用隧道协议进行TCP通信。

常见状态码

100,接受的请求正在处理,信息类状态码
2xx(成功)表示成功处理了请求的状态码
200(成功)服务器已成功处理了请求。
3xx(重定向)表示要完成请求,需要进一步操作。通常这些状态代码用来重定向
301,永久性重定向,表示资源已被分配了新的 URL
302,临时性重定向,表示资源临时被分配了新的 URL
303,表示资源存在另一个URL,用GET方法获取资源
304,(未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容
4xx(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理
400(错误请求)服务器不理解请求的语法
401表示发送的请求需要有通过HTTP认证的认证信息
403(禁止)服务器拒绝请求
404(未找到)服务器找不到请求网页
5xx(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求的错误
500,(服务器内部错误)服务器遇到错误,无法完成请求
503,表示服务器处于停机维护或超负载,无法处理请求

请求头

Accept:指定客户端能够接收的内容类型。
Accept-Charset:浏览器可以接受的字符编码集。
Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。
Accept-Language:浏览器可接受的语言。
Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。
AuthorizationHTTP:授权的授权证书。
Cache-Control:指定请求和响应遵循的缓存机制。
Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Content-Length:请求的内容长度。
Content-Type:请求的与实体对应的MIME信息。
Date:请求发送的日期和时间。
Expect:请求的特定的服务器行为。
From:发出请求的用户的Email。
Host:指定请求的服务器的域名和端口号。
If-Match:只有请求内容与实体相匹配才有效。
If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码。
If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。
If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。
If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。
Max-Forwards:限制信息通过代理和网关传送的时间。
Pragma:用来包含实现特定的指令。
Proxy-Authorization:连接到代理的授权证书。
Range:只请求实体的一部分,指定范围。
Referer:先前网页的地址,当前请求网页紧随其后,即来路。
TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。
Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。
User-AgentUser-Agent:的内容包含发出请求的用户信息。
Via:通知中间网关或代理服务器地址,通信协议。
Warning:关于消息实体的警告信息

CDN内容分发

CDN的全称是Content Delivery Network,翻译成中文就是内容分发网络。CDN依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取内容,降低网络延迟,提高访问速度。简单来讲,CDN是用来进行加速的,它可以让用户更快获得所需的数据。

CDN工作流程

当用户请求一个文件时,CDN的工作过程如下:
1.DNS请求当地local DNS
2.当地local DNS递归地查询服务器的gslb
3.服务器根据local DNS 分配最佳节点,返回IP
4.用户获得最佳接入IP,访问最佳节点。
5.如果该节点没有用户想要获取的内容,则通过内部路由访问上一节点,直到找到文件或到达源站为止。
6.CDN节点缓存该数据,下次请求该文件时可以直接返回。

跨域相关的请求头和响应头

请求头

Origin:当前请求源,和响应头里的Access-Control-Allow-Origin 对标, 是否允许当前源访问,Origin是不可修改的
Access-Control-Request-Headers:本次真实请求的额外请求头,和响应头里的Access-Control-Allow-Headers对标,是否允许真实请求的请求头
Access-Control-Request-Method:本次真实请求的额外方法,和响应头里的Access-Control-Allow-Methods对标,是否允许真实请求使用的请求方法

响应头

Access-Control-Allow-Credentials
Access-Control-Allow-Headers
Access-Control-Allow-Methods
Access-Control-Allow-Origin
Access-Control-Expose-Headers
Access-Control-Max-Age:设置预检请求的有效时长,就是服务器允许的请求方法和请求头做个缓存