HTTP概念
超文本传输协议(HTTPHyperText Transfer Protocol)联网上应用最为广泛的一种网络协
议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。
HTTP协议结构
HTTP通信过程:客户端主动向服务端发送请求,服务端接收并响应先从客户端开始建立通信,服务端在没接收到请求之前不会发送响应。
HTTP报文:用于HTTP协议交互的信息被称为HTTP报文
- 请求端的HTTP报文叫做请求报文,响应端的叫做响应报文。
- HTTP报文是由多行(CR+LF作换行符)数据构成的字符串文本。
- 【报文首部】服务器端或客户端需处理的请求或响应的内容及属性
- 【CR+LF】CR(Carrige Return,回车符)和LF(Line Feed,换行符)
- 【报文主体】应被发送的数据
请求报文及响应报文的结构
HTTP请求报文
HTTP方法——用于下达命令,用于告诉服务器端如何处理请求
l GET(一般不用get方法传输,用post方法)
请求访问已被URI识别的资源。
l POST
传输实体的主体。
l PUT
传输文件
l HEAD
HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。
l DELETE
删除文件
l OPTIONS
查询针对请求URI指定的资源支持的方法。
l TRACE
让Web服务器端将之前的请求通信环回给客户端。
HTTP响应报文
状态码表示请求成功或失败的数字代码
HTTP状态码——负责表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常,通知的错误等工作
l 1XX
信息性状态码,接收的请求正在处理
l 2XX
成功状态码,请求正常处理完毕
l 3XX
重定向状态码,需要进行附加操作以完成请求
l 4XX
客户端错误状态码,服务器无法处理请求
l 5XX
服务器错误状态码,服务器处理请求出错
HTTP常见状态码
l 200OK
表示从客户端发来的请求在服务器端被正常处理了。
l 301 MOVED Permanently
永久性重定向,表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URL。
l 302 Found
临时性重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
l 304 Not Modified
客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。
l 400 Bad Request
表示请求报文中存在语法错误,当错误发生时,需修改请求的内容后再次发送请求。
l 401 Unauthorized
该状态码表示发送的请求需要有通过HTTP认证(如BASIC、DIGEST认证)的认证信息。若之前已进行过1次请求,则表示用户认证失败
l 403 Forbidden
表明对请求资源的访问被服务器拒绝了。
l 404 Not Found
表明服务器上无法找到请求的资源
l 500 Internal Server Error
表明服务器端在执行请求时发生了错误,也有可能是Wb应用存在的bug或某些临时的故障。
l 503 Service Unavailable
表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
HTTP是一种无状态协议——自身不对请求和响应之间的通信状态进行保存
- 协议对发送的请求或响应,都不做持久化的处理——为了更快地处理了大量事物,确保协议地可伸缩性
- 为了实现保存状态地功能,引入了Cookie:sid
HTTP首部字段——HTTP报文的要素之一
- 无论请求还是响应都能用到首部字段,起到传递额外重要信息的作用
- 给浏览器和服务器提供报文主体大小、使用语言,认证信息等内容
HTTP首部字段结构
- 首部字段名:字段值 例如:Content-Type:text/html
- 单个HTTP首部字段可以有多个值 例如:Keep-Alive:timeout=15,max=100
HTTP首部字段类型
l 通用首部字段
请求报文和响应报文两方都会使用的首部。
l 请求首部字段
从客户端向服务器端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
l 响应首部字段
从服务器端向客户端返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息。
l 实体首部字段
针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息。
通用首部字段
l Cache-Control
通过指定首部字段Cache-Controlp的指令,就能操作缓存的工作机制;
l Connection
控制不再转发给代理的首部字段;管理持久连接
l Date
表明创建HTTP报文的日期和时间
l Via
使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径。报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。首部字段Vi不仅用于追踪报文的转发,还可避免请求回环的发生,所以必须在经过代理时附加该首部字段内容。
请求首部字段
l Accept
- Accepti首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级,可使用type/subtypei这种形式,一次指定多种媒体类型。
- 文本文件:text/html,text/plain,text/css,application/xhtml-+xml,application/xml
- 图片文件:image/jpeg,image/gif,image/png
- 应用程序使用的二进制文件:application/octet-stream,application/zip
l Accept-Language
- 首部字段Accept-Language)用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级,可一次指定多种自然语言集,按权重值q来表示相对优先级。
- Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3
l Authorization
- 用来告知服务器,用户代理的认证信息
- Authorization:Basic dWVub3N1bjpwYXNzd29yZA==
l Host
- 首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯—一个必须被包含在请求内的首部字段。
l Referer
- 首部字段Referera会告知服务器请求的原始资源的URI。
- Referer:http://www.example.com/index.php
l User-Agent
- 首部字段User-Agents会将创建请求的浏览器和用户代理名称等信息传达给服务器。
- User-Agent:Mozilla/5.0(Macintosh;Intel Mac OS X 10_13_2)
- AppleWebKit/537.36 (KHTML,like Gecko)Chrome/66.0.3359.181
- Safari/537.36
响应首部字段
l Location
- 使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源。
l Server
- 首部字段Server告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
- Server:Apache/2.2.6 (Unix)PHP/5.2.5
实体首部字段
l Allow
通知客户端能够支持的所有HTTP方法,服务器会把所有能支持的HTTP方法写入首部字段Allow后返回。
当服务器接收到不支持的HTTP方法时,会以状态码4O5 Method Not Allowed作为响应返回。
Allow:GET,HEAD,POST
l Content-Length
实体主体部分的大小(单位是字节)。
Content-Length:1000
l ontent-Type
实体主体内对象的媒体类型,字段值用type/subtypei形式赋值。
Content-Type:text/html;charset=UTF-8