layout: pagetitle: “HTTP-学习”
date: 2019-10-05 01:01

整理资料来源:star.nsctf.cn
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。
HTTP是无状态协议

请求报文和响应报文结构:

http-learn - 图1

请求报文

http-learn - 图2

HTTP方法

GET:请求访问已被URI识别的资源。
POST:传输实体的主体。
PUT:传输文件
HEAD:和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新时间等。
DELETE:删除文件
OPTIONS:查询针对请求URI指定的资源支持的方法。
TRACE:让Web服务器端将之前的请求通信环回给客户端。

响应报文

http-learn - 图3

HTTP状态码

1XX:信息性状态码,接收的请求正在处理口
2XX:成功状态码,请求正常处理完毕
3XX:重定向状态码,需要进行附加操作以完成请求
4XX:客户端错误状态码,服务器无法处理请求
5XX:服务器错误状态码,服务器处理请求出错

HTTP常见状态码
200 OK:表示从客户端发来的请求在服务器端被正常处理了。
301 MOVED Permanently:永久性重定向,表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
302 Found:临时性重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
304 Not Modified:客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。
400 Bad Request:表示请求报文中存在语法错误,当错误发生时,需修改请求的内容后再次发送请求。
401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC、DIGEST认证)的认证信息。若之前已进行过1次请求,则表示用户认证失败。
403 Forbidden:表明对请求资源的访问被服务器拒绝了。
404 Not Found:表明服务器上无法找到请求的资源。
500 Internal Server Error:表明服务器端在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障。
503 Service Unavailable:表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

HTTP首部字段

首部字段名:字段值
例如,Content-Type:test/html
单个HTTP首部字段可以有多个值,例如:Keep-Alive: timeout=15,max=100

HTTP首部字段类型

通用首部字段:请求报文和响应报文两方都会使用的首部。

  • Cache-Control:通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制
  • Connection:控制不再转发给代理的首部字段;管理持久连接
  • Date;表明创建HTTP报文的日期和时间
  • Via:使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径。报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生,所以必须在经过代理时附加该首部字段内容。
  1. Cache-Control 控制缓存的行为
  2. Connection逐跳首部、连接的管理
  3. Date创建报文的日期时间
  4. Pragma报文指令
  5. Trailer 报文末端的首部一览
  6. Transfer-Encoding 指定报文主体的传输编码方式
  7. Upgrade 升级为其他协议
  8. Via代理服务器的相关信息
  9. Warning错误通知

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

  • Accept:

    • Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级,可使用type/subtype这种形式,一次指定多种媒体类型。
    • 文本文件:text/html,text/plain,text/css,application/xhtml+xml,application/xml
    • 图片文件:image/jpeg,image/gif,image/png
    • 应用程序使用的二进制文件:application/octet-stream,application/zip
  • Accept-Language

    • 首部字段Accept-Language用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级,可一次指定多种自然语言集,按权重值q来表示相对优先级。
    • Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3
  • Authorization

    • 用来告知服务器,用户代理的认证信息
    • Authorization:Basic dWVub3N1bjpwYXNzd29yZA==
  • Host

    • 首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段。
  • Referer

  • User-Agent

    • 首部字段User-Agent会将创建请求的浏览器和用户代理名称等信息传达给服务器。
    • User-Agent:Mozilla/5.0(Macintosh;Intel Mac OS X10_13_2)AppleWebKit/537.36(KHTML,like Gecko)Chrome/66.0.3359.181 Safari/537.36
Accept用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding优先的内容编码
Accept-Language优先的语言
AuthorizationWeb认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在服务器
If-Match比较实体标记(ETag)
If-Modified-Since比较资源的更新时间
If-None-Match 比较实体标记(与if-Match相反)
|If-Range资源未更新时发送实体Byte的范围请求
Range实体的字节范围请求
Max-Forwards最大传输逐跳数
Referer对请求中URI的原始获取方
User-AgentHTTP客户端程序的信息

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

  • Location:使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源。
  • Server:首部字段Server告知客户端当前服务器上安装的HTTP服务器应用程序的信息。

    • Server:Apache/2.2.6(Unix)PHP/5.2.5
Accept-Ranges   是否接受字节范围请求
Age 推算资源创建经过时间
ETag    资源的匹配信息
Location    令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
ServerHTTP  服务器的安装信息
Vary    代理服务器缓存的管理信息
wwW-Authenticate    服务器对客户端的认证信息

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

Allow   资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language    实体主体的自然语言
Content-Length  实体主体的大小(单位:字节)
Content-Location    替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range   实体主体的位置范围
Content-Type    实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified   资源的最后修改日期时间
  • Allow

    • 通知客户端能够支持的所有HTTP方法,服务器会把所有能支持的HTTP方法写入首部字段Allow后返回。
    • 当服务器接收到不支持的HTTP方法时,会以状态码405 Method Not Allowed作为响应返回。
    • Allow:GET,HEAD,POST
  • Content-Length

    • 实体主体部分的大小(单位是字节)。
    • Content-Length:1000
  • Content-Type

    • 实体主体内对象的媒体类型,字段值用type/subtype形式赋值。
    • Content-Type:text/html;charset=UTF-8

Github

HTTP学习思维导图仓库

列表

HTTP学习 1——WEB基础
HTTP学习2——简单的HTTP协议
HTTP学习3——HTTP报文内的HTTP信息
HTTP学习4——返回结果的HTTP状态码
HTTP学习5——与HTTP协作的WEB服务器
HTTP学习6——HTTP首部
HTTP学习7——确保Web安全的HTTPS
HTTP学习8——确认访问用户身份的认证