1

前言

最近在看nodejs,发现需要很多http相关的知识,就去找了本「图解HTTP」看,
记录下自己觉得比较重要的知识点

URI格式

http:// user:passwd @www.cheesekun.top :80 /dir/index.html ?uid=1 #ch1
协议方案名 登录信息 服务器地址 服务器端口 文件路径 查询字符串 片段标识符

http首部字段

由于字段类别很多,只挑选了一些打开网页常见的字段

General(通用首部字段)

请求报文和相应报文都会使用的首部

首部字段名 说明 某参数 作用
Connection 逐跳首部,连接的管理 keep-alive 客户端与服务器进行持久连接,可用参数close断开

Request(请求首部字段)

从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容,客户端信息,响应内容相关优先级等信息

首部字段名 说明 参数 作用
Accept 用户代理可处理相对优先级的媒体类型 text/html,application/xhtml+xml,image/webp,/;q=0.8 优先采用text和html格式,q为优先权重值
Accept-Encoding 优先的内容编码 gzip,deflate,sdch 支持gzip等内容编码及其优先级
Accept-Language 优先的语言(自然语言) zh-CN,zh;q=0.8,en-us,en; 优先中文
Content-Length 实体主题的大小(单位:字节)
Host 请求资源所在的服务器
Referer 对请求中URI的原始获取方 https://www.google.com 该页面是在google链接而来
User-Agent HTTP客户端程序的信息
X-Request-With 客户端的请求是Ajax请求还是其他请求

Response(响应首部字段)

从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息

首部字段名 说明 某参数 作用
Accept-Ranges 是否接受字节范围请求
Content-Type 实现主体的媒体类型
Date 创建报文的日期时间
ETag 资源的匹配信息 "一串字符" 标识所有资源
Expires 实体主体过期的日期时间 一个日期 缓存超过该日期会从源服务器获取资源
Location 转移URI指向 一个URI 配合3xx,重定向提示转移URI路径
Last-Modified 资源的最后修改日期时间
Pragma 报文指令 no-cache 兼容http1.0,http1.1使用Cache-Conrol:no-cache,表示不接收缓存
Transfer-Encoding 指定报文主体的传输编码方式 chunked(分块) 分块传输编码
Vary 代理服务器缓存的管理 Accept-Language 从代理服务器拿取A-L的缓存,若无,则从源服务器拿

Enitity(实体首部字段)

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息

HTTP状态码

状态码告知从服务器端返回的请求结果

状态码 类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

2XX 成功

  • 200 OK:表示客户端的请求被服务器成功处理

  • 204 No Content:该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。

  • 206 Partial Content:该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range 指定范围的实体内容。

3XX 重定向

3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

  • 301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。

  • 302 Found:临时性重定向:该状态码表示请求的资源已被分配了新的URI,希望用户本次请求能使用新的URI。302和301很相似,302表示的URI并不是永久性移动,换句话说就是URI还有可能发生变化。

  • 303 See Other:该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。303和302有着相似的功能,他们之间的区别是303状态码表示明确客户端采用GET请求获取资源

  • 304 Not Modified:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主题部分。跟重定向没有关系。

4XX客户端错误

4XX响应结果表示错误发生在客户端

  • 400 Bad Request:该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。

  • 401 Unauthorized:该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。

  • 403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了。

  • 404 Not Found:该状态码表明服务器上无法找到请求的资源。

5XX服务器错误

5XX 的响应结果表明服务器本身发生错误。

  • 500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误。

  • 503 Service Unavailable:该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

结语

挺好的一本书,172张图片也特别帮助理解。
原文:cheesekun.top


塞尔达真好玩
255 声望5 粉丝