HTTP协议
文章目录
- HTTP协议
- 一、统一资源定位符(url):
- URL编码格式:
- 二、HTTP报文结构:
- 三、HTTP请求方法:
- 四、HTTP常见请求头:
- 五、HTTP状态码:
- 六、HTTP常见响应头:
- 七、HTTP请求测试
- 1.curl
- 2.python
HTTP(HyperText Transfer Protocol)超文本传输协议,是一个应用层协议,本身无连接,使用TCP连接进行可靠的传送。是万维网客户端程序与万维网服务器程序之间进行交互的协议。
一、统一资源定位符(url):
url一般包含四个部分:<协议>://<主机>:<端口>/<路径>
url格式:协议://用户名:密码@子域名.域名.顶级域名:端口/目录/文件名.文件后缀?参数=值#锚部分
URL编码格式:
url编码表:
HTML URL 编码参考手册 | 菜鸟教程
- 只有字母和数字[0-9a-zA-Z]、一些特殊符号”$-_.+!*’(),”[不包括双引号],以及某些保留字,才可以不经编码直接用于url
- 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会收到影响。可以说web是构建在同源策略基础上的,浏览器只是针对同源策略的一种体现。
- url格式中,协议,主机,端口三部分相同,才能算是同源。
二、HTTP报文结构:
-
请求报文——从客户向服务器发送请求报文。
请求行:方法 目标路径 协议版本
首部行(请求头):用来说明浏览器、服务器或报文主体的一些信息。
请求主体:在请求报文中一般不用 -
响应报文——从服务器到客户的 回答。
- 状态行:版本 状态码 描述
- 首部行(响应头)
- 实体主体
三、HTTP请求方法:
- 根据HTTP标准,HTTP请求可以使用多种请求方法
- HTTP1.0定义了三种请求方法:GET,POST和HEAD方法
- HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面,并返回实体主体 |
2 | HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据包含在请求体中 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容(在指定的url下储存一个文档) |
5 | DELETE | 请求服务器删除指定的页面(删除指定url所标志的资源) |
6 | CONNECT | 用于代理服务器 |
7 | OPTIONS | 允许客户端查看服务器的性能(获取服务器允许的HTTP请求方法) |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
9 | PATCH | 是对PUT方法的补充,用来对已知资源进行局部更新 |
四、HTTP常见请求头:
字段 | 描述 |
---|---|
Accept | 指定客户端能够接收的内容类型 |
Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型 |
Accept-Language | 浏览器可接受的语言。例:Accept-Language:en,zh |
Connection | 表示是否需要持久连接 // HTTP 1.1默认进行持久连接 |
Cookie | Cookie是用来存储一些用户信息以便让服务器辨别用户身份的 |
Content-Type | 请求的实体的MIME信息 |
Host | 指定请求的服务器的域名和端口号 |
Referer | 表示先前网页的地址 |
User-Agent | 告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。 |
五、HTTP状态码:
- HTTP状态码作用:Web服务器用来告诉客户端,发生了什么事
状态码 | 已定义范围 | 描述 |
---|---|---|
1XX | 100-101 | 表示通知信息,如收到请求,正在处理 |
2XX | 200-206 | 表示请求成功 |
3XX | 300-307 | 表示重定向 |
4XX | 400-417 | 表示客户端错误,如请求中有错误的语法或不能完成请求 |
5XX | 500-505 | 表示服务端错误,如服务器失效无法完成请求 |
六、HTTP常见响应头:
响应头字段 | 描述 |
---|---|
Allow | 服务器支持哪些请求方法(如GET、POST等)。 |
Content-Type | 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。 |
Location | 表示后面的文档属于什么MIME类型 |
Refresh | 表示浏览器应该在多少时间之后刷新文档,以秒计。 |
Set-Cookie | 设置和页面关联的Cookie |
Content-Location | • 请求资源可替代的备用的另一地址 |
Content-Length | 响应体的长度 |
七、HTTP请求测试
1.curl
curl 是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具。它可以说是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
环境:
服务端:centOS 7虚拟机,开启Apache服务,IP地址:172.31.39.163
客户端:win11系统,IP地址:172.31.39.92,在"C:\Windows\System32\drivers\etc\hosts”中添加一行172.31.39.163 test.com,以使解析域名test.com为172.31.39.163
用到参数:
参数 | 说明 |
---|---|
(无参) | 直接跟域名或IP,返回页面源码 |
-v | 显示http请求头和响应头,并返回页面信息 |
-i | 可以参看请求 URL 的响应头,URL 的响应头将与响应体一起返回打印出来 |
-I | 只显示响应头 |
-X | 用来更改HTTP请求方法 |
—data | 指定post数据 |
-A | 指定User-Agent |
-e | 指定referer |
—header | 自行增加一个头信息 |
例:使用curl发送一个自定义http请求,并用-v参数显示出来
curl -X POST --data "name=data" -A "Mozilla/5.0" -e "http://127.0.0.1" --header "Content-Type:application/x-www-form-urlencoded" test.com
2.python
使用requests库请求网页资源
requests.get(url,params,headers)
requests.request(method,url)
import requestsurl = 'http://test.com'
# 用字典来作为POST表单数据
from_data = {'name': 'data'
}
# 用字典表示请求头
# header = {
#
# }
# r = requests.get(url, params='') # params可以用来get传参
r = requests.post(url, data=from_data, headers=header)# r = requests.request(method,url)# 选择其他请求方法
# r.encoding = '' # 指定页面的编码方式
print(r.text) # 返回解码后的页面字符串
print(r.content) # 以字节形式返回
print(r.status_code) # 返回响应状态码
print(r.request.method) # 返回请求方法
print(r.request.headers) # 返回请求头
print(r.headers) # 返回响应头
# print(r.cookies) # 返回cookie
# print(r.encoding) # 返回页面的编码方式