http协议知识点 - XiaoMeimei/Notes GitHub Wiki
1. 什么是http协议
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
2. http请求的组成
协议类型://主机域名(或IP地址):端口(有默认值)/资源路径/
3. URI,URL,URN的区别与联系
URI(Uniform Resource Identifier):统一资源标识符。用来唯一的标识一个资源。
URL(Uniform Resource Locator):统一资源定位符。它是一种具体的URI,指明了通过路径找到该资源。
URN(Uniform Resource Name):统一资源名。它也是一种具体的URI,指明了通过名称找到该资源。
综上,URL和URN是子集,现多把URI等价于URL。
4. 从输入地址到接收数据的过程
http(应用层)----->tcp(传输层)---->ip(网络层)---->数据链路层---->物理层
-
若输入URL主机域名,将会进行DNS解析把域名解析为IP地址及端口,然后与之建立一个TCP链接。
-
若输入URL为IP地址及端口,将直接与之建立一个TCP连接。
-
浏览器发送一个带有信息的http请求报文到服务器,信息内容包括身份验证,需请求的资源列表等。
-
服务器接到了请求,然后进行处理(响应)。
-
服务器把处理的http响应报文返回给浏览器。
-
关闭TCP连接。
-
浏览器对响应报文进行处理,在页面上渲染,最终呈现给用户。
5. http请求之request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

Get:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106
Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
Post:
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。
第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等
第三部分:空行,请求头部后面的空行是必须的
即使第四部分的请求数据为空,也必须有空行。
第四部分:请求数据也叫主体,可以添加任意的其他数据。
6. http请求之response
第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第二行和第三行为消息报头,Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。
空行后面的html部分为响应正文。
7. http 状态码
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
8.常用的7种http方法
GET 从服务器获取数据 不需要实体的主体
POST 向服务器发送需要处理的数据 需要
HEAD 只从服务器获取头部 不需要
PUT 将请求的主体部分存在在服务器 需要
TRACE 对可能通过代理的报文进行跟踪 不需要
OPTIONS 检查可以在服务器上执行哪些方法 不需要
DELETE 从服务器上删除数据 不需要
参考文档:http协议知识点