简介

HTTP 协议学习笔记。

状态码

1xx: 请求已接收到,需要逬一步处理才能完成

HTTP1.0不支持

100 Continue: 上传大文件前使用

101 Switch Protocols: 协议升级使用

102 Processing: WebDAV 请求可能包含许多涉及文件操作的子请求,需要很长时间才能完成请求。
该代码衷示服务器已经收到并正在处埋请求,但无响应可用.这样可以防止客户端超时,并假设请求丢失。

2xx: 成功处理请求

200 0K: 成功返回响应。

201 Created: 有新资源在服务端被成功创建。

202 Accepted: 服务器接收并开始处理滴求,但请求未处理完成。

203 Non-Authoritative Information: 当代理服务修改了 origin server 的原始响应包体时(例如更换了HTML中的元素值),代理服务器可以通过修改 200 为 203 的方式告知客户端这一事实。

204 No Content: 成功执行了请求且不携带响应包体,并暗示客户端无需更新当前的页面视图。

205 Reset Content: 成功执行了请求且不携带响应包体,同时指明客户端需更新当前的页面视图。

206 Partial Content: 使用 range 协议时返回部分内容。

207 Multi-Status: RFC4918, 在 WEBDAV 协议中以 XML 返回多个资源的状态。

208 Already Reported: RFC5842, 为避免相同集合下资源在 207 响应码下重复上报,使用 208 可以使用父集合的响应吗。

3xx: 重定向使用 Location 指向的资源

300 Multiple Choices: 资源衡多种表述,通过 300 返回给客户端后由其自行选择访问哪一种表述,由于缺乏明确的细节,300 很少使用。

301 Moved Permanently: 资源永久性的重定向到另一个 URI 中.

302 Found: 资源临时的重定向到另一个 URI 中。

303 See Other: 重定向到其他资源,常用于 POST/PUT 等方法的响应中,

304 Not Modified: 当客户端拥有可能过期的缓存时,会携带缓存标志的 etag、时间 等信息,询问服务端缓存是否可用,304 告诉客户端可以备用缓存。

307 Temporary Redirect: 类似 302 , 但明确重定向后请求方法必须与原请求方法相同,不可改变。

308 Permanent Redirect: 类似 301 , 但明确重定向后请求方法必须与原请求方法相同,不可改变。

4xx: 客户端出现错误

400 Bad Request: 服务器认为客户端出现了错误,但不能明确判断为以下哪种错误时使用此错误码。例如 HTTP 请求格式错误。

401 Unauthorized: 用户认证信息缺失或者不正确,导致服务器无法处理请求。

403 Forbidden: 服务器现解请求的含义,但没有权限执行此请求。

404 Not Found: 服务器没有找到对应的资源。

405 Method Not Allowed: 服务器不支持请求行中的 method 方法。

406 Not Acceptable: 对客户端指定的资源表述不存在(例如对语吉或者编码有要求),服务器返回表述列表供客户端选择。

407 Proxy Authentication Required: 对需要经由代理的请求,认证信息未通过代理服务器的验证。

408 Request Timeout: 服务器接收通求超时。

409 Conflict: 资源冲突,例如上传文件时目标位置已经存在版本更新的资源。

410 Gone: 服务器没有找到对应的资源,且明确的知遇该位置永久性找不到该资源。

411 Length Required: 如果请求含有包体且未携带 Content-Length 头部,且不属于 chunk 类请求。

412 Precondition Failed: 复用缓存时传递的 If-Unmodified-Since 或 lf-None-Match 头部不被满足。

413 Payload Too Large/Request Entity Too Large: 请求的包体超出服务器能处理的最大长度。

414 URI Too Long: 请求的 URI 超出服务器能接受的最大长度。

415 Unsupported Media Type: 上传的文件类型不被服务器支持。

416 Range Not Satisfiable: 无法提供 Range 请求中指定的那段包体。

417 Expectation Failed: 对于 Expect 请求头部期待的情况无法满足时的响应码。

5xx: 服务端出现错误

5OO Internal Server Error: 服务器内部错误,且不属于下描述类型。

501 Not Implemented: 服务器不支持实现请求所需要的功能。

502 Bad Gateway: 代理服务器无法获取到合法响应。

503 Service Unavailable: 服务器资源尚未准备好处理当前请求。

504 Gateway Timeout: 代理服务器无法及时的从上游获得响应。

505 HTTP Version Not Supported: 请求使用的 HTTP 协议版本不支持。

507 Insufficient Storage: 服务器没有足够的空间处理请求。

508 Loop Detected: 访问资源时检测到循环。

511 Network Authentication Required: 代理服务器发现客户端需要进行身份验证才能获得网络访问权限。

长连接与短连接

长连接

客户端请求
Connection: Keep-Alive

服务端表示支持:
Connection: Keep-Alive

短连接

Connection: Close

Host头部

Host: www.test.com

客户端IP

运营商公网IP
X-Forward-For: 0.0.0.0

用户IP
X-Real-IP: 0.0.0.0

限制代理服务器最大转发次数
Max-Forwards: 1*DIGIT

指名经过代理服务器名称及版本
Via: kong/1.5.1

禁止代理服务器修改响应包体
Cache-Control: no-transform

请求和响应上下文

请求上下文

指名客户端的类型信息,服务器可以据此对资源的表述做抉择
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36

浏览器对来自某一页面的请求自动添加的头部
Referer: https://www.test.com/home?id=1

响应上下文

指明服务器上应用软件的信息,用于帮组客户端定位问题或统计数据
Server: nginx/1.16.1

请求包体

包体协商要素

媒体资源的 MIME 类型及质量因子
Accept: text/html

内容编码
Accept-Encoding: gzip

表述语言
Accept-Language: zh-cn

传输包体方式

定长包体

长度固定
Content-Length: 1*DIGIT

不定长包体

Transfer-Encoding: chunked

指明包体以内联方式作为页面的一部分
Content-Disposition: inline

指明包体以附件方式下载
Content-Disposition: attachment;filename="test.png"

Form表单包体

请求形式

指明这是一个多表述体包体
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUt8p0AyvNIOXpCbw

请求体 Form Data 形式
------WebKitFormBoundaryUt8p0AyvNIOXpCbw
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
------WebKitFormBoundaryUt8p0AyvNIOXpCbw--

Content-Type 种类

数据被编码成 "&" 分割的键值对,同时以 "=" 分割键和值
application/x-www-form-urlencoded

boundary 分割符;每部分皆有 HTTP 头部描述子包体,如 Content-Type;last boundary 结尾
multipart/form-data

断点续传

简介

允许服务器基于客户端的请求只发送响应包体的一部分给到客户端;

客户端自动将多个片段的包体组合成完整的体积更大的包体。

服务器是否支持

支持
Accept-Ranges: bytes

不支持
Accept-Ranges: none

服务器响应

服务器正常响应
Content-Range: bytes 31-1333/1334
Content-Range: bytes 31-1333/*

请求范围不满足实际请求大小
416 Range Not Satisfiable

服务器不支持 Range 请求
200 OK
保存在客户端,由浏览器维护,表示应用状态的 HTTP 头部
set-cookie: 1P_JAR=2019-10-20-06;
expires=Tue, 19-Nov-2019 06:36:21 GMT;
domain=.google.com;
path=/;
SameSite=none;
HttpOnly
Cookie: 1P_JAR=2019-10-20-06;

跨域访问

请求头

Access-Control-Request-Headers
Access-Control-Request-Methods

响应头

告诉浏览器哪些域可以访问
Access-Control-Allow-Origin

告诉浏览器是否可以携带 Cookie
Access-Control-Allow-Credentials

预检请求时,告诉客户端允许携带的头部
Access-Control-Allow-Headers

预检请求时,告诉客户端允许的请求方法
Access-Control-Allow-Methods

预检请求时,告诉客户端响应可以缓存多久
Access-Control-Max-Age

告诉客户端哪些响应头可以供客户端使用
Access-Control-Expose-Headers

缓存

强缓存

绝对时间: 服务端下发的时间,但是客户端可能不一致
Expires: Thu,21 Jan 2017 23:39:02 GMT

相对时间: 以客户端为准,单位为秒;Expires 也下发的话,以此为标准
Cache-Controll: max-age=3600

协商缓存

什么是条件请求?

由客户端携带条件判断信息,而服务器预执行条件验证通过后,再返回资源的描述。

条件请求头

给服务端对比 Etag 的
If-Match: entity-tag
If-None-Match: entity-tag

给服务端对比 Last-Modified 的
If-Modified-Since: HTTP-date
If-None-Modified-Since: HTTP-date

If-Range: entity-tag/HTTP-date

条件响应头

服务端响应给客户端的,客户端可以通过 If-None-Match 发送给服务端进行对比
Etag

上次修改时间,客户端可以通过 If-None-Match 发送给服务端进行对比
Last-Modified

Cache-Control

max-age: 指定多久后过期。CSS 和 Javascript 文件可以这样设置。

no-cache: 表明必须向服务器发送一次请求,该请求头部必须携带 If-None-Match 等校验信息。服务端将会验证资源是否被修改过。HTML 文件可以这样设置。

no-store: 任何请求都不会被缓存。

no-transform: 禁止代理服务器修改响应包体。

public: 可以被代理或 CDN 缓存。

private: 不可以被代理或 CDN 缓存。

重定向

当浏览器接收到重定向响应码时,读取响应头的 Location,获取到新的 URI 并跳转

Location: http://www.test.com

网络爬虫

robots.txt

告知爬虫哪些内容不该爬取

User-Agent: 允许哪些机器人
Disallow: 禁止访问特性目录
Crawl-lay: 访问间隔秒数
Allow: 抵消 Disallow 命令
Sitemap: 指出站点地图的 URI

sitemap.txt

搜索引擎优化

参考资料

powered by Gitbook该文件修订时间: 2023-05-18 18:21:25

results matching ""

    No results matching ""