HTTP协议

Posted 逗比煎饼侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议相关的知识,希望对你有一定的参考价值。

http:
一、无状态的协议
二、客户端和服务端的连接过程:三次握手
三、客户端和服务端的数据交互
1.客户端向服务端发送一个HTTP请求消息Request
GET /web/20171110/data/2.txt HTTP/1.1
Host: localhost
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Accept: */*
Referer: http://localhost/web/20171110/XMLHttpRequest6.html
Accept-Encoding: gzip, deflate, br
Accept-Language: en,zh-CN;q=0.8,zh;q=0.6

请求消息包括请求行、请求头部、空行、请求数据四个部分。

(1)请求行:请求方式,请求的URL,HTTP协议版本 GET /web/20171110/data/2.txt HTTP/1.1
(2)请求头部:用来说明服务器使用的附加信息
Host:请求的目的地
Connection:http的连接状态
User-Agent:服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送
Referer:用来让服务器判断来源页面, 即用户是从哪个页面来的,通常被网站用来统计用户来源,是从搜索页面来的,还是从其他网站链接过来,或是从书签等访问,以便网站合理定位.
Accept-Encoding:浏览器发给服务器,声明浏览器支持的编码类型
(3)空行:请求头部的后面必须是空行。即使没有请求数据,也有空行。
(4)请求数据:请求数据也叫主体,可以添加任意的其他数据。

2.服务端接收并处理客户端发送过来的请求后返回一个HTTP的响应消息Response
HTTP/1.1 200 OK
Date: Sat, 11 Nov 2017 12:28:48 GMT
Server: Apache/2.4.18 (Win32) OpenSSL/1.0.2e php/5.6.17
Last-Modified: Sat, 11 Nov 2017 11:51:48 GMT
ETag: "1f-55db3a98b5cdc"
Accept-Ranges: bytes
Content-Length: 31
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/plain

响应消息包括状态行、消息报头、空行、响应正文四个部分。

(1)状态行:HTTP协议版本、状态码、状态消息
(2)消息报头:客户端使用的一些附加信息
Date:日期
Content-Type:指定了MIME类型
(3)空行:空行是必须有的
(4)响应正文:服务端返回给客户端的文本信息
四、HTTP状态码(status)
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已经被接收、理解、接受
3xx:重定向--要完成请求必须进一步操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务端错误--服务端不能完成合法的请求

常见的状态码:
100 Continue //服务端已经接受初始的请求,客户端应继续发送其余的请求
101 Switching Protocols //服务端将遵从客户端转到另一种协议
200 OK //客户端请求成功
201 Created //服务端已经创建了文档,Location头给出了它的URL
202 Accepted //已经接受请求,还没有出来完成
203 Non-Authoritative Information //文档正常地返回,但一些应答头不正确,因为使用的是文档的拷贝
205 Reset Content //没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容
206 Partial Content //客户发送了一个带有Range头的GET请求,服务器完成了它
301 Moved Permanently //永久重定向,下回不会再找他了
302 Move temporarily //临时重定向,下回依然会请求服务器
304 Not Modified //缓存
305 Use Proxy //客户请求的文档应该通过Location头所指明的代理服务器提取
400 Bad Request //客户端请求出现语法错误
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在
405 Method Not Allowed //请求方法(GET、POST、HEAD、Delete、PUT等)对指定的资源不适用。
409 Conflict //由于请求和资源的当前状态相冲突,因此请求不能成功。
500 Internal Server Error //服务器发生不可预期的错误
503 Service Unavailable //服务器由于维护或者负载过重未能应答
505 HTTP Version Not Supported //服务器不支持请求中所指明的HTTP版本
更多状态码http://www.runoob.com/http/http-status-codes.html
五、readyState
0 初始状态 xhr对象刚创建完
1 连接 连接到服务器
2 发送请求 刚刚send完
3 接收完成 头接收完了
4 接收完成 体接收完了
六、HTTP请求方法
GET/POST/PUT/DELETE/HEAD

GET 把数据放在url里面传输 数据量很小、缓存、看得见 <=32K
POST 放在body里 数据量大、不会缓存、看不见 <=1G

GET——获取东西
POST、PUT——发送东西 大量发送
DELETE——删除
HEAD——让服务器只发送头回来就行(不需要内容)
七、HTTP工作原理
1、客户端连接到服务端
客户端与服务端建立TCP链接
2、客户端向服务端发送HTTP请求
通过TCP链接,客户端向服务端发送一个文本的请求报文,请求报文包括请求行、请求头部、空行、请求数据
3、服务端接收请求并返回HTTP响应
服务端解析请求,定位请求资源,服务端将资源复制到TCP套接字上,将响应返回给客户端。一个响应包括状态行、响应头部、空行、响应正文。
4、释放TCP链接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端解析返回过来的HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
八、在浏览器输入URL,到显示页面都发生了什么?
1、浏览器向DNS服务器请求解析URL中域名对应的IP地址
2、建立TCP链接
3、发送HTTP请求
4、服务端对浏览器的请求做出响应,将html返回给浏览器
5、释放TCP链接
6、浏览器解析HTML内容显示页面

以上是关于HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议工作原理是啥 HTTP协议工作原理介绍【详解】

HTTP 之 HTTP协议(HTTP协议概述HTTP消息缓存控制相关头部Cookie相关头部)

HTTP协议

Linux-http协议(应用层协议)-http概述-http格式-http版本-http方法-http状态码

大话http协议

Http协议简单解析