HTTP基本知识

HTTP报文结构

报文首部+空行(CR+LF)+报文主体

1. 请求报文

1.1 报文首部

请求行+请求首部字段+通用首部字段+实体首部字段

1.1.1 请求行

请求方法+空格+请求URI+空格+HTTP版本

GET / HTTP/1.1

请求方法

1.GET - 从指定的资源请求数据。

2.POST - 向指定的资源提交要被处理的数据。

3.HEAD 与 GET 相同,但只返回 HTTP 报头,不返回文档主体。

4.PUT 上传指定的 URI 表示。

5.DELETE 删除指定资源。

6.OPTIONS 返回服务器支持的 HTTP 方法。

7.CONNECT 把请求连接转换到透明的 TCP/IP 通道。

1.1.2 请求首部字段

Accept:通知服务器用户代理可以处理的媒体类型以及相对优先级  Accept:text/html,application/xml;q=0.9

Accept-Charset:通知服务器用户代理所支持的字符集以及相对优先级

Accept-Encoding:通知服务器用户代理所支持的内容编码及相对优先级

Accept-Language:客户端能够处理的自然语言集及相对优先级

Authorization:认证信息(证书值)

Host:请求的资源所处的互联网主机名和端口号(请求中必须包含的字段)

Proxy-Authorization:发送到代理服务器的认证信息

Range:只获取部分资源的范围请求(返回206 Partial Content,无法处理则返回200)

User-Agent:浏览器和用户代理名称等信息

Expect:告知服务器期望出现的某种特定行为

From:告知服务器使用用户代理的用户的电子邮箱地址

TE:告知服务器客户端能够处理响应的传输方式及相对优先级

Referer:告知服务器请求原始资源的URI。请求的URI是从哪个页面发起的

Max-Forwards:指定可经过服务器的最大数目

If-Match:Etag标记。当if-match中的eTag与服务器中的ETag相同时,服务器才会接受请求。

If-None-Match:Etag标记。当if-match中的eTag与服务器中的ETag不同时,服务器才会接受请求。

If-Range:若该字段(Etag或时间)和请求资源的ETag值或时间一致时,则作为范围请求处理,否则返回全部资源

If-Modified-Since:时间。只有在此时间后,资源发生更新,服务器才会接受请求。

If-Unmodified-Since:时间。只有在此时间后,资源未发生更新,服务器才会接受请求。

1.1.3 请求通用首部字段

Cache-Control:控制缓存的行为 
              no-cache:缓存服务器不能缓存资源,且源服务器以后不会对资源有效性进行确认
              no-store:规定缓存不能在本地存储请求和响应的任一部分
              max-age:有效的时间

Connection:控制不再转发给代理的首部字段;管理持久连接(当想要关闭时使用Connection:close)

Date:创建http报文的日期和时间

Transfer-Encoding:传输报文主体时采用的编码方式(chunked分块传输)

1.1.4 其他

cookie:服务端接收到的cookie信息

2. 响应报文

2.1 响应报文首部

响应行(状态行)+响应首部字段+通用首部字段+实体首部字段

2.1.1状态行

HTTP版本+空格+状态码+原因短语

HTTP/1.1 200 OK

2.1.2 响应首部字段

Accept-Ranges:告知是否能处理范围请求,可接受时为true,否则为none

Age:告知客户端,源服务器在多久之前创建了响应(单位s)

ETag:告知客户端,资源在服务器端的唯一标识

Location:重定向到某位置,一般用于3**响应

Proxy-Authenticate:把代理服务器所要求的认证信息发送给客户端

Retry-After:告知客户端多久后再次发送请求,一般与503或者3**一起使用(可以是具体时间也可以是创建响应后的秒数)

Server:告知客户端,此服务器上安装的http服务器应用程序信息

Vary:对缓存进行控制。当资源与该字段指定的值相同时才直接从缓存中返回。

WWW-Authenticate:用于Http访问认证

2.1.3 响应通用首部字段

Cache-Control:控制缓存的行为 
              no-cache:缓存服务器不能缓存资源,且源服务器以后不会对资源有效性进行确认
              no-store:规定缓存不能在本地存储请求和响应的任一部分
              max-age:有效的时间

Connection:控制不再转发给代理的首部字段;管理持久连接(当想要关闭时使用Connection:close)

Date:创建http报文的日期和时间

Transfer-Encoding:传输报文主体时采用的编码方式(chunked分块传输)

Pragma:用于与Http/1.0的向后兼容定义的,与Cache-Control一样

Trailer:事先说明在报文主体后记录了哪些首部字段,可用于分块传输编码时

Upgrade:用于检测Http协议及其他协议是否可用更高版本进行通信

Via:为了追踪客户端与服务器之间的请求和响应报文的传输路径

Warning:告知用户一些与缓存相关的问题的警告

2.1.4 实体首部字段

Allow:告知客户端,服务器所支持的http方法

Content-Encoding:告知客户端,服务器对实体的主体部分采用的编码方式(gzip,compress,deflate,identity)

Content-Language:实体主体的自然语言

Content-Length:实体主体部分的大小(字节)

Content-Location:报文主体部分相对应的URI

Content-Range:当前发送部分及整个实体大小

Content-Type:实体主体内对象的媒体类型

Expires:实体主体的过期时间(与Cache-Control中max-age一起出现时,max-age优先)

Last-Modified:资源的最后修改时间

Content-MD5:是一串由MD5算法生成的值,其目的在于检查报文在传输过程中的完整性

2.1.5 其他

Set-Cookie:开始状态管理所使用的Cookie信息

状态码

100 Continue 继续,一般在发送post请求时,已发送了http header之后服务器端将返回此信息,表示确认,之后发送具体参数信息。

200 OK 请求成功,正常返回信息

201 Created 请求成功并且服务器创建了新的资源

202 Accepted 服务器已接受请求,但尚未处理

204 No Content 请求成功,没有资源返回

206 Partical Content 部分内容,范围请求的成功返回

301 Moved Permanent 永久重定向 

302 Found 临时重定向

303 See Other 与302功能一样,但明确表示应当用get方法请求新的URI

304 Not Modified 服务器告诉客户,原来的文档还可以继续使用。可直接使用客户端未过期缓存。自从上次请求后,请求的网页未修改过。

400 Bad Request 请求的语法错误

401 Unanthorized 请求要求用户的身份认证,请求未授权

403 Forbidden 服务器拒绝此请求,禁止访问

404 Not Found 找不到资源

405 Method Not Allowed 

500 Internal Server Error 服务器内部错误

501 No Implemented 不支持请求的功能

502 Bad Gateway 充当网关或代理的服务器收到一个无效请求

503 Service Unavaiable 服务不可用,服务器超载或系统维护

HTTP的缺点

1.通信使用明文(不加密),内容可能会被窃听

2.不验证通信方的身份,有可能遭遇伪装

3.无法证明报文的完整性,有可能遭篡改

HTTPS

HTTPS = HTTP + SSL

HTTP + 通信加密 + 证书 + 完整性保护 = HTTPS

Table of Contents