3-3:HTTP协议之request和respond及常见请求方法和常见状态码
文章目录
- 一:request
- (1)请求报文基本构成
- (2)请求方法
- 二:respond
- (1)响应报文基本构成
- (2)HTTP常见状态码
- 三:HTTP常见Header(字段)
注意下面需要分析请求报头和响应报头的构成,需要使用到抓包工具,推荐使用fillder
一:request
(1)请求报文基本构成
在浏览器中输入百度的网址,选中相应数据,右侧显示中上半部分为请求报头,下半部分显示为相应报头,点击raw(原始数据)查看
信息具体如下
GET https://www.baidu.com/ HTTP/1.1 #请求行
Host: www.baidu.com #请求的主机
Connection: keep-alive #长连接 HTTP可以选择不断开TCP,从而连接持久化
sec-ch-ua: " Not;A Brand";v="99", "Microsoft Edge";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)#浏览器,操作系统信息
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: BIDUPSID=9F74B621908F780204441F86DCCE03A5; PSTM=1598331815; BAIDUID=9F74B621908F7802E2D41BCA0AE628E1:FG=1; BAIDUID_BFESS=9F74B621908F7802E2D41BCA0AE628E1:FG=1; BD_UPN=12314753; COOKIE_SESSION=0_1_1_1_0_0_0_0_1_0_0_0_0_0_0_1_0_1624878202_1624878201%7C1%230_1_1624878201%7C1; BDUSS=kFjVE4wOVphT2l-Ym82YnE5RHdJUlZTRW10MU5qM1lqS1p4eVUxaVNHR2pPUUZoRVFBQUFBJCQAAAAAAAAAAAEAAADjDoXG1-7Lp77NysfO0jYyMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOs2WCjrNlgR; BDUSS_BFESS=kFjVE4wOVphT2l-Ym82YnE5RHdJUlZTRW10MU5qM1lqS1p4eVUxaVNHR2pPUUZoRVFBQUFBJCQAAAAAAAAAAAEAAADjDoXG1-7Lp77NysfO0jYyMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOs2WCjrNlgR; BD_HOME=1; H_PS_PSSID=34099_34225_31253_34226_33848_34133_33607_34134_26350; sugstore=0; BA_HECTOR=ah85al8g252h0l05ui1gdoqqk0r #缓存信息
# 此行为空行
(2)请求方法
HTTP请求方法如下
1:GET方法
GET方法用来请求已经被URI识别的资源,指定的资源经过服务器解析后返回响应内容。比如请求的资源是文本,那么就会保持原样返回
使用GET方法请求的例子
2:POST方法
虽然用GET方法也可以传输实体的主体,但是一般不用GET方法进行传输,而是采用POST。虽然说POST的功能与GET很相似,但是POST的主要目的并不是获取响应的主体内容
使用POST方法请求的例子
GET和POST的区别
你现在打开我的这篇文文章阅读,浏览器就会发送GET请求给服务器,服务器则会返回相应的数据
而如果你在我的文章下面评论,点击提交后,浏览器就会执行一次POST请求,把你的评论放进请求报文里,然后拼接好POST请求头,再通过TCP协议发送服务器
3:PUT方法
PUT方法用来传输文件,比如QQ邮箱发送邮件添加附件,上传百度云盘文件都可以近似理解为PUT方法。为什么说近似呢,因为实际上PUT方法是不安全的,一旦对服务器进行写操作都是不安全的,而且在HTTP1.1中PUT方法自身又不带验证机制,因此任何人都可以上传文件,存在极大的安全隐患。所以一般的web网站是不会使用这样的方法的。
4:HEAD方法
HEAD方法只请求报文首部,而不获得报文正文
如下
5:DELETE方法
DELETE方法用于删除文件,和PUT相反。当然DELETE肯定也是不安全的,所以一般不会开放
二:respond
(1)响应报文基本构成
抓包信息如下
HTTP/1.1 200 OK #响应行
Bdpagetype: 2
Bdqid: 0x8231b40200113aab
Cache-Control: private
Connection: keep-alive # 长连接
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8 # 返回的文件类型
Date: Wed, 30 Jun 2021 13:08:55 GMT
Expires: Wed, 30 Jun 2021 13:08:55 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=271; path=/ # 服务器给客户端设置cookie
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=34099_34225_31253_34226_33848_34133_33607_34134_26350; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 162505853526142891629381477419473517227
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
# 此行为空行,下面是正文
dabk k u V ?@ EͽC4ޏ #Gd ()! -* @ NIv I$[ S \N * D +J , ǘ3 > /d= Y q t ; 4 } > ' ? w*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***
可以看到响应报头正文部分均为乱码,其实这是HTTPS请求,已经被加密了
这里我们使用Linux中telnet工具尝试抓包
在命令行中输入telent www.baidu.com 80
,请求百度的80端口
接着我们手动进行请求,请求方法是GET,请求URL如果输入/
表示请求首页,版本为1.1
请求正文略过,直接输入换行,此时会发现百度服务器会将百度的首页,也就是一个HTML文件返回过来,这就是响应正文
其中content-length就是标识响应正文的长度的
(2)HTTP常见状态码
当客户端向服务器端发送请求时,会返回状态,借助它,用户可以知道服务器到底是正常了请求,还是出了问题,如果处理问题,到底是出了怎样的问题
HTTP状态码常见的共有五大类,不同数字具有不同的含义
2XX-成功
204-No Content:服务器已经成功处理了请求,但在返回的响应报文中不含实体的主体部分(另外,也不会允许返回任何实体的主体)。举例,如果你从浏览器发出的请求处理后,若返回204,那么浏览器显示的页面则不会发生更新。使用场景主要集中在只需要从客户端向服务器发信息,而对客户端不需要发送新信息内容的情况下使用
206-Partial Content:表示客户端发起了范围请求,同时服务器成功执行了此次请求。响应报文中的
“Content-Range”
指定范围的实体内容
3XX-重定向
该状态码表示浏览器需要执行某些特殊的操作才能正确处理请求
以302为例,你在没有淘宝网时,点击上面的购物车选项
本应该跳转到购物车页面,但是由于没有登录,所以服务器强制让你重定向到登录页面,可以发现次登录页面状态码是302
301-Moved Permanently:意思是永久重定向,表示请求的资源已经分配了新的URL,意思可以理解为人家网址已经变了,你的快捷方式(收藏)还指向以前的URL
302-Found:意思是临时重定向,表示请求的资源已经分配了新的URL,希望用户可以新的URL访问,但是这一次先放过你,虽然访问错了,但是服务器帮你跳转过来。
303-See Other:该状态码表示由于请求的圆存在着另一个URL,应使用GET(这一点和302有所区别)获取资源
304-Not Modified:不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存定定向,用于缓存控制。
4xx-客户端错误
400-Bad Request:表示客户端的请求报文有错误,是一个很笼统的错误。
403-Forbidden:意思是服务器拒绝访问,并不是客户端的请求出错
404-Not Found:表示请求的资源在服务器上找不到,无法提供客户端
5xx-服务器错误500-Internal Server Error:和400一样,是一个笼统性的错误,只是表明服务器出现了错误
501-Not Implemented:表示客户端请求的功能还不⽀持,类似“即将开业,敬请期待”的意思
502 Bad Gateway:通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
503-Service Unavailable:表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后再试”的意思。
三:HTTP常见Header(字段)
可以看到不管是request还是response都有请求行这一部分
Host字段:客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
Content-Length:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。
Connection字段:常用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用。
- HTTP/1.1 版本的默认连接都是持久连接,但为了兼容⽼版本的 HTTP,需要指定 Connection 首部字段的值为Keep-Alive 。
Content-Type 字段:用于服务器回应时,告诉客户端,本次数据是什么格式
Content-Type: text/html; charset=utf-8
表示发送的是网页及其编码格式- 客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。
Accept: */*
表示可以接受任意格式
Content-Encoding 字段:段说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式
User-Agent: 声明用户的操作系统和浏览器版本信息,这东西在爬虫中涉及较多
referer: 当前页面是从哪个页面跳转过来的
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能
3-3:HTTP协议之request和respond及常见请求方法和常见状态码相关推荐
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码
接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...
- http接口测试:了解协议、请求方法、响应状态码
http接口测试:了解协议.请求方法.响应状态码 接口在各个系统间的重要性无需重申,主要体现在外部系统与系统之间以及内部各子系统之间的交互点.通过这些特定的交互点和一些特殊的规则标准(协议)来进行系统 ...
- HTTP协议学习笔记(一)请求方法名及状态码
HTTP协议是位于TCP协议之上的应用层协议,是应用进程之间通讯的一种协议.之所以称之为应用层协议,是因为它无需关心数据是通过什么方式到达对端的,在到达对方的应用程序之前都经历了什么,而只需要协商好使 ...
- HTTP协议中常见请求方法以及一些常见错误代码
GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体. PUT: 从客户端向服务器传送的数据取代指定 ...
- HTTP协议、HTTP请求方法、常见状态码、HTTP消息
HTTP协议 客户端请求,服务端响应.浏览器与服务器不建立持久连接,响应后连接失效. HTTP请求方法 一.GET GET方法用于获取请求页面的指定信息. 二.HEAD 除了服务器不能在响应里返回消息 ...
- HTTP协议中request报文请求方法和状态响应码
一个HTTP请求报文由4部分组成: 请求行(request line) 请求头部(header) 空行 请求数据 下图给出了请求报文的一般格式: 请求行中包括了请求方法,常见的请求方法有: GET:从 ...
- HTTP协议之http状态码详解
什么是HTTP状态码 HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事. 状态码位于HTTP Response 的第一行中,会返回一个"三位数字的状态码"和一个&q ...
- 302状态码_HTTP协议详解(基础概念 方法 状态码 首部 连接 Cookie 新特性 安全)
一 .基础概念 URI URI 包含 URL 和 URN. 请求和响应报文 1. 请求报文 2. 响应报文 二.HTTP 方法 客户端发送的 请求报文 第一行为请求行,包含了方法字段. GET 获取资 ...
- [转]HTTP协议之状态码详解
HTTP协议之状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了. 如果是做AJ ...
最新文章
- CUDA 内存统一分析
- js中获取时间new date()的用法
- python codecs模块(用于执行编码转换之类的)
- 五、JavaScript基础知识,学会操作元素的简单事件(一)
- 常用贴片三极管主要参数
- WPF中一个控件绑定另一个控件的属性
- 【Retinex】【Frankle-McCann Retinex】matlab代码注释
- sqlserver、mysql删除重复数据
- 从智能门锁,看3D视觉的安全性突围
- java技术可行性分析_java毕业设计管理系统需求分析
- java番茄钟_番茄时间管理 - java Swing版
- H3C 无线控制器WX2510H-F与无线接入点WA5320-C-EI的安装与关联详细指导书
- AWVS14.1.2下载安装教程(2021.3.6版本)
- php免费项目下载文件,php——文件下载
- LeetCode1818:绝对差值和
- Bootstrap-table 如何合并相同单元格
- wex5 ajax,关于Ajax请求 - WeX5开发者论坛 - 起步软件技术论坛 - Powered by Discuz!
- 浅谈精准提取日志中的URL
- android 图片ps处理图片大小,【精】【教程】用Photoshop调整图片大小,以方便上传到论坛...
- uniapp一套代码开发app和微信小程序
热门文章
- 分区创建 linux_在 Intel NUC 上安装 Linux
- iphone怎么看wifi密码_无线网密码正确但是手机连接不上wifi怎么回事?
- 原来这么看导师对论文或文稿的批注才不会辜负!
- 国家粮食与物资储备局揭示中国稻谷产毒真菌分布及仓储动态变化
- 修复MacBook Touch Bar(触控栏)无法正常工作的方法
- fcpx插件:Beautiful Slideshow - 时尚简洁图片幻灯片开场
- 这款免费小工具,让你的Mac也能实现右键新建
- python安装matlab库_[python][matlab]在python36上安装matlab2015b引擎
- 大熊猫学生网页设计模板 静态HTML动物保护学生网页作业成品 DIV CSS大熊猫野生动物主题静态网页
- CentOS7 安装 Nginx PHP