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)、空行和请求数据四个部分组成。

http request 解析

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协议知识点

关于HTTP协议,一篇就够了