当前位置: 首页 > ai >正文

笔记——学习HTTP协议

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报文结构:

  1. 请求报文——从客户向服务器发送请求报文。
    请添加图片描述

    请求行:方法 目标路径 协议版本
    首部行(请求头):用来说明浏览器、服务器或报文主体的一些信息。
    请求主体:在请求报文中一般不用

  2. 响应报文——从服务器到客户的 回答。
    请添加图片描述

    • 状态行:版本 状态码 描述
    • 首部行(响应头)
    • 实体主体

三、HTTP请求方法:

  • 根据HTTP标准,HTTP请求可以使用多种请求方法
  • HTTP1.0定义了三种请求方法:GET,POST和HEAD方法
  • HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法
序号方法描述
1GET请求指定的页面,并返回实体主体
2HEAD类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据包含在请求体中
4PUT从客户端向服务器传送的数据取代指定的文档的内容(在指定的url下储存一个文档)
5DELETE请求服务器删除指定的页面(删除指定url所标志的资源)
6CONNECT用于代理服务器
7OPTIONS允许客户端查看服务器的性能(获取服务器允许的HTTP请求方法)
8TRACE回显服务器收到的请求,主要用于测试或诊断
9PATCH是对PUT方法的补充,用来对已知资源进行局部更新

四、HTTP常见请求头:

字段描述
Accept指定客户端能够接收的内容类型
Accept-Encoding指定浏览器可以支持的web服务器返回内容压缩编码类型
Accept-Language浏览器可接受的语言。例:Accept-Language:en,zh
Connection表示是否需要持久连接 // HTTP 1.1默认进行持久连接
CookieCookie是用来存储一些用户信息以便让服务器辨别用户身份的
Content-Type请求的实体的MIME信息
Host指定请求的服务器的域名和端口号
Referer表示先前网页的地址
User-Agent告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。

五、HTTP状态码:

  • HTTP状态码作用:Web服务器用来告诉客户端,发生了什么事
状态码已定义范围描述
1XX100-101表示通知信息,如收到请求,正在处理
2XX200-206表示请求成功
3XX300-307表示重定向
4XX400-417表示客户端错误,如请求中有错误的语法或不能完成请求
5XX500-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)   # 返回页面的编码方式

请添加图片描述

http://www.xdnf.cn/news/13179.html

相关文章:

  • 第二篇:Agent2Agent (A2A) 协议——A2A 架构、组件和通信动态
  • 百度之星2021——BD202104 萌新
  • JavaScript闭包-作用域链的魔法
  • KubeSphere 容器平台高可用:环境搭建与可视化操作指南
  • YOLO电力物目标检测训练
  • Spring Boot + Vue 前后端分离项目解决跨域问题详解
  • HTML 语义化
  • ​​CentOS 7.9​​ 上配置 ​​Fail2ban 自动封禁 IP​​ 的完整步骤,整合了多篇权威资料的最佳实践
  • 功能界面的组件化编码流程
  • LeetCode 11题“盛最多水的容器”
  • 论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(三)
  • SecureCRT 中使用 `crt.Session.Config.SetOption` 方法
  • STM32时钟与GPIO工作模式
  • LeetCode:912归并排序,洛谷:ACM风格
  • Manus AI 与多语言手写识别
  • 论文笔记:LANGUAGE MODELS REPRESENT SPACE AND TIME
  • 【HarmonyOS 5】鸿蒙CodeGenie AI辅助编程工具详解
  • 1、ZYNQ 开篇简介
  • 向量数据库Milvus在windows环境下的安装
  • SQL进阶之旅 Day 24:复杂业务场景SQL解决方案
  • Unity实现不倒翁
  • Dispatch PDI(DPDI)kettle调度管理平台稳定版本,正式登场!
  • Nuxt + Pinia + Element Plus 后台管理系统搭建教程(含源码)
  • CMake测试find_package()命令的相关原理
  • 10- AI大模型-LangChainV0.3应用(一) - 简介,模型调用,prompt模板,输出解析器
  • 6.10
  • Vue.js 中的 v-bind 指令详解
  • Vue 模板语法之指令语法详解
  • 深入解析 GitHub Token 与 NPM Token:自动化发布的完整指南
  • 医学图像分割最新进展