HTTP协议基础
HTTP协议
简介
超文本传输协议(HTTP) 是一个用于传输超媒体文档(例如HTML)的应用层协议。
它是为Web 浏览器与Web 服务器之间的通信而设计的,但也可以用于其他目的。 HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。
HTTP规定了传输的数据需要的格式。
传输HTTP协议格式的数据需要基于TCP协议,进行数据传输之前要建立连接。
URL
全称统一资源定位符(Uniform Resource Locator),俗称网址。
常见格式为:
[协议类型]://[服务器地址]:[端口号]/[资源的文件路径]?[查询参数]
- 协议类型常见的有
http
、https
、ftp
- 服务器地址可以是ip地址,也可以是域名(域名是ip地址的别称)
- 端口号指服务器程序的端口号。web服务器端口号一般为80。如果是80,可以省略不写
- 查询参数之间用&分隔
如:
https://www.python.org/downloads/release/python-3913/
https://www.python.org/search/?q=list
浏览器程序与web服务器程序的通讯过程
- 用户在浏览器程序中输入URL并回车
- DNS(域名解析服务器)收到URL并将域名解析为ip地址
- 浏览器程序收到解析后的URL
- 浏览器程序与web服务器程序通过TCP协议建立连接
- 浏览器程序向web服务器程序发送HTTP协议格式的请求数据
- web服务器程序在服务器主机上获取对应资源
- web服务器程序向浏览器程序发送HTTP协议格式的响应数据
浏览器开发者模式
进入方法:右击鼠标并点击检查
或者 直接使用F12
快捷键
- Elements(元素):可查看或修改HTML元素的属性、CSS属性、监听事件、断点等
- Console(控制台):可以执行JavaScript代码
- Sources(资源):可查看网页的的HTML、JavaScript、CSS源代码以及图片等资源文件。还可以设置断点,调试JavaScript代码。
- Network(网络):可查看http协议网络通信过程
Network
点击开发者模式的Network页面,输入网址并回车,就可以看到一项项请求与响应的过程。(下图左侧)。单击某条,可以看到该次通信的详细信息。
- Headers(标头):查看http格式的响应头,请求头等传输数据(解析后,点击view source可见源数据)
- Preview(预览):查看预览效果
- Response(响应):查看响应体,即web服务器返回的资源数据(html,js,css等)
HTTP格式报文
在开发者模式的Network的Headers中查看
主要数据(General)
一些请求相关的主要信息
Request URL
:请求的URLRequest Method
:请求方式,常见的有GET,POSTStatus Code
:服务器响应的状态码(200),状态描述(OK)Remote Address
:远程主机(即服务器)的ip地址
状态码
HTTP 状态码是用于表示web服务器响应状态的3位数字代码。
状态码 | 说明 |
---|---|
200 | 请求成功 |
307 | 重定向 |
400 | 错误的请求,即请求地址或者参数有误 |
404 | 请求的资源在服务器中不存在 |
500 | 服务器内部源代码出现错误 |
请求头(Request Headers)
由浏览器程序向web服务器程序发送
主要内容
GET / HTTP/1.1
:该行为请求行。GET
为请求的方式,/
为请求的资源路径,HTTP/1.1
为HTTP协议版本
请求方式 | 特点 |
---|---|
GET | 资源获取请求 |
POST | 数据提交请求。请求报文里一般有请求体。请求体中一般有用户提交的需要服务器解析或验证的数据。 |
Accept
:可接受的数据类型。Accept-Ecoding
:可接受的压缩格式Accept-Language:
可接受的语言Connection:keep-alive
:一直保持连接。(若长时间无响应,会自动断开连接)Cookie
:一种登录用户的身份标识Host
:服务器地址User-Agent
:用户代理,即客户端程序的信息与名称
原始请求报文格式示例
浏览器发送的请求报文数据的格式由HTTP协议规定,大概如下:
POST / HTTP/1.1\r\n (请求行)
Host: www.baidu.com\r\n (请求头信息)
....
\r\n (空行)
username=hello&pass=hello\r\n (请求体)
- 每行末需加上
\r\n
请求行
+请求头信息
+空行
+请求体
(如果有的话)
响应头(Response Headers)
由web服务端程序向浏览器程序发送
主要内容
-
响应行:
HTTP/1.1 200 OK
,HTTP/1.1
为协议版本,200
为状态码,OK
为状态描述 -
Content-Type
:响应体的类型 -
Date
:以0时区GMT为标准的响应时间 -
Server
:服务器名称。(BWS指的是BaiduWebServer) -
Transfer-Encoding: chunked
:发送的内容不确定长度,以\0\r\n
标记结束。如果确定长度,用Content-Length
描述。
原始响应报文格式示例
web服务器程序发送的响应报文数据的格式由HTTP协议规定,大概如下:
HTTP/1.1 200 OK\r\n (响应行)
Server: BWS/1.1\r\n (响应头信息)
...
\r\n (空行)
<!DOCTYPE html><html lang=“en”> …</html> (响应体)
- 每行末需加上
\r\n
响应行
+响应头信息
+空行
+响应体
- 响应体中应包含浏览器程序所请求的资源,如html,css,js,图片(二进制形式)等。可以在Network的Response中查看响应体的具体内容。