笔记来源,超赞的原文链接https://www.jianshu.com/p/80e25cb1d81a
1.基本概念和交互模型
- HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
- HTTP基于TCP/IP通信协议来传递数据
- HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端(Web服务器)发送请求。Web服务器根据接收到的请求向客户端发送响应信息
2.HTTP请求消息Request
- 客户端发送一个HTTP请求到服务器的请求消息由请求行,请求头部,空行,请求数据构成
- 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
第一部分:第1行代码为请求行
第二部分:第2-6行代码为请求头部
第三部分:第7行代码为空行
第四部分:空行下的为请求数据,本例请求数据为空
- 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
请求消息结构上一致,在应用过程中的一些不同下文会详细列举
3.HTTP响应消息Response
- 服务器在接收并处理客户端请求后返回一个HTTP响应消息,该响应消息由状态行,消息报头,空行,响应正文四部分组成
- 例子
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
第一部分:第1行代码为状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成
第二部分:第2,3行代码为消息报头,Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:第4行代码为空行
第四部分:空行下的html代码为响应正文
4.HTTP响应消息之状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
- 1xx:指示信息–表示请求已接收,继续处理
- 2xx:成功–表示请求已被成功接收、理解、接受
- 3xx:重定向–要完成请求必须进行更进一步的操作
- 4xx:客户端错误–请求有语法错误或请求无法实现
- 5xx:服务器端错误–服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
5.HTTP请求消息之请求方法
- HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
- HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
6.GET请求与POST请求的区别
- GET和POST本质上并无区别,但是由于HTTP的规定和 浏览器/服务器 的限制导致他们在应用过程中体现出一些不同
- 具体不同体现在下面几点
1.GET在浏览器回退或刷新时是无害的,而POST会再次提交请求。
2.GET产生的地址可以收藏,而POST不可以。
3.GET能被浏览器主动缓存,而POST不可以,除非手动设置。
4.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
5.GET请求在URL中传送的参数是有长度限制的,而POST没有限制。
6.GET对参数类型的限制只允许ASCII 字符,而POST没有限制。
7.GET的安全性较差,因为要请求的参数直接暴露在URL上,而POST不会
8.GET参数通过URL传递,POST放在Request body(请求数据)中。
9.GET产生一个TCP数据包;POST可能会产生两个TCP数据包即header和body分开发送。
7.HTTP的工作流程
1. 地址解析
2. 建立TCP连接
建立 TCP 连接 , 也就是常说的"三次握手" . 由于HTTP位于最上层的应用层 , 所以HTTP在工作之前要由 TCP 和 IP 协议建立网络连接。
3. 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
4. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
5. 浏览器解析HTTP响应
客户端解析响应,然后将响应数据中的HTML代码渲染给用户
6. 关闭连接
服务器端在发送完响应之后 , 就会关闭连接 , 如果过客户端的请求的头部信息中有 Connection-alive , 那么客户端在响应完这个请求之后不会关闭连接 , 直到客户端的所有请求都响应完毕 , 才会关闭连接。
来源:CSDN
作者:TiAmo?lyj
链接:https://blog.csdn.net/TiAmo_Lyj/article/details/104361213