一、HTTP 概念
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
HTTP 协议和TCP/IP协议族的其他众多协议相同,用户客户端和服务器之间的通信
二、HTTP发展史
1989http诞生:
最初设想:借助多文档之间相互关联形成的超文本(HypeText),连接可相互参阅WWW(万维网)
1990年http/0.9版本
HTTP 0.9版本问世
1996 http/1.0版本
1996年5月,HTTP正式作为标准被公布
1997 http/1.1版本
1997年1月公布http1.1版本,也是目前最主流的http协议版本
三、HTTP 的通信过程
(1)先建立TCP连接,三次握手过程,HTTP协议是承载在TCP上的应用层协议
(2) 浏览器封装请求消息,将封装后的HTTP请求通过网络寻址发送到具体的服务器上
(3)服务器收到请求后解封装,协议HTTP协议头中信息,根据请求方法中的资源路径找到对应的请求资源,然后将封装响应报文发送给客户端
(4)HTTP 1.0是短连接,HTTP1.1开始支持长连接
(5)请求头Connection字段:表示是否需要持久连接,(HTTP1.1默认进行持久连接)。如:Connection:close,Connection:keep-Alive,表示持久连接
四、HTTP报文
用于HTTP协议交互的信息被称为HTTP报文,请求端的HTTP报文叫请求报文,响应端的叫做响应报文。HTTP报文由多行(CR+LF作换行符)数据构成的字符串文本
【报文首部】
服务器端或客户端需处理的请求或响应的内容及属性
【CR+LF】
CR(Carrige Return,回车符)和LF(Line Feed,换行符)
【报文主体】
应被发送的数据
例如:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8(CRLF)
Accept-Encoding:gzip, deflate, sdch(CRLF)
Accept-Language:zh-CN,zh;q=0.8(CRLF)
Connection:keep-alive(CRLF)
Cookie:(CRLF)
Host:www.baidu.com(CRLF)
Upgrade-Insecure-Requests:1(CRLF)
五、请求报文及响应报文的结构
请求报文:
请求行、请求首部字段、通用首部字段、实体首部字段、其他
http 的请求方法
(1)GET
请求访问已被URI识别的资源
(2)POST
传输实体的主体
(3)PUT
传输文件
(4)HEAD
HEAD方法和GET方法一样,只是不反回报文主体部分。用于确认URI的有效性及资源更新的日期时间等
(5)DELETE
删除文件
(6)OPTIONS
查询针对请求URI指定的资源支持的方法
(7)TRACE
让Web服务器将之前的请求通信环回给客户端
六、HTTP响应报文
响应报文
请求行、请求首部字段、通用首部字段、实体首部字段、其他
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认证)的认证信息。若之前已经行过一次请求,则表示用户认证失败
403 Forbidden: 表明对请求资源的访问被服务器拒绝了
404 Not Found :表明服务器上无法找到请求的资源
500 Internal Server Error :表明服务器端在执行请求时发生错误,也有可能是Web应用存在的bug或临时故障
503 Service Unavailable:表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
http是无状态的协议:
http协议自身不对请求和响应之间的通信状态做保存,协议对于发送的请求和响应都不做持久化处理,这是为了更快处理大量事物,确保协议的可伸缩性,但是随着web的发展,发现因无状态出现事物处理不及时的情况越来越多,后来为了拥有保存状态的功能,引入cooke 的概念。比如登录之后就处于登录状。
来源:51CTO
作者:大雪儿
链接:https://blog.51cto.com/dingxue/2471905