目录
一、OSI七层协议 vs TCP/IP五层协议
二、HTTP协议
1.URL
1.1URL 中的可省略部分
2.请求消息Request
2.1请求行
2.2请求头
2.3空行
2.4请求数据
2.5HTTP 请求方法
3.响应消息Response
3.1响应行
3.2消息报头
3.3空行
3.4响应正文
4.常见的状态码
5.Content-Type
一、OSI七层协议 vs TCP/IP五层协议
二、HTTP协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
HTTP默认端口号为80,HTTPS默认端口号是443
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收 到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应. 事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应 的交互过程;现在很多浏览器页面使用的都是HTTPS协议,相当于在HTTP协议和TCP之间增加了一层加密SSL协议
浏览器进程和web服务器进程通常不在一台主机上,需要借助网络通信
1.URL
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息
URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。
1.1URL 中的可省略部分
- 协议名: 可以省略, 省略后默认为 http://
- ip 地址 / 域名: 在 HTML 中可以省略(比如 img, link, script, a 标签的 src 或者 href 属性), 省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致
- 端口号: 可以省略. 省略后如果是 http 协议, 端口号自动设为 80; 如果是 https 协议, 端口号自 动设为 443.
- 带层次的文件路径: 可以省略. 省略后相当于 / . 有些服务器会在发现 / 路径的时候自动访问 /index.html
- 查询字符串: 可以省略
- 片段标识: 可以省略
2.请求消息Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头(header)、空行和请求数据四个部分组成。
2.1请求行
请求行有请求方法、资源路径、其他版本组成。用来说明请求类型,要访问的资源以及所使用的HTTP版本
2.2请求头
紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等
2.3空行
请求头部后面的空行是必须的,就算请求数据为空,也必须有空行。
2.4请求数据
也叫主体,可以添加任意的其他数据。
2.5HTTP 请求方法
图源
2.1GET方法 --- 获取资源
GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源. 在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求. 另外, HTML 中的 link, img, script 等标签, 也会触发 GET 请求, 使用 JavaScript 中的 ajax 也能构造 GET 请求.
2.2 POST 方法 --- 发布资源
POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面). 通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求.
2.3GET和POST的区别
- 语义不同: GET 一般用于获取数据, POST 一般用于提交数据
- GET 的 body 一般为空, 需要传递的数据通过 query string 传递, POST 的 query string 一般 为空, 需要传递的数据通过 body 传递
- GET 请求一般是幂等的, POST 请求一般是不幂等的. (如果多次请求得到的结果一样, 就视为请求是幂等的)
- GET 可以被缓存, POST 不能被缓存
3.响应消息Response
HTTP响应也由四个部分组成,分别是:响应行、消息报头、空行和响应正文。
3.1响应行
由HTTP协议版本号, 状态码, 状态消息 三部分组成。第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
3.2消息报头
用来说明客户端要使用的一些附加信息,第二行和第三行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
3.3空行
消息报头后面的空行是必须的
3.4响应正文
服务器返回给客户端的文本信息。空行后面的html部分为响应正文。
4.常见的状态码
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)
状态码 |
描述 |
200OK |
请求成功 |
404Not Found |
请求资源路径不存在 |
405Method Not Support |
请求资源不支持该请求方法 |
500Internal Server Error |
内部服务器错误 |
5.Content-Type
- text/html : HTML格式
- text/css : CSS格式
- text/javascript application/javascript : JavaScript 格式
- text/json application/json: JSON数据格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式