HTTP请求时哪些请求头是默认携带的?
提起HTTP的请求头和响应头总是一头雾水,因为总是看上去一大堆,好多还不知道是什么意思。
今天我们先研究请求头,我就想,如果我们能弄清楚,在我们什么都不做的情况下,一个最简单的HTTP请求会携带哪些请求头,那么复杂的情况无非是在这上面做加法,我们对请求头就能做到心中有数了。
我从以下4个维度测试,看哪些请求头是默认携带的。只发出一个最简单的HTTP请求,别的什么都不做。
1. AJAX请求,不跨域
2. AJAX请求,跨域
3. 服务端发出的HTTP请求
4. 浏览器发出的AJAX之外的其他请求
最终,我想要弄清楚以下几个问题:
1. AJAX发出的的GET、POST、PUT、DELETE、OPTIONS五种请求有什么不同?
2. 原生的XMLHttpRequest请求和axios请求有什么不同?(我习惯用axios)
3. 是否跨域会有什么不同?
4. 服务端发出的GET、POST、PUT、DELETE、OPTIONS五种请求会有什么不同?
5. 服务端发出的请求和AJAX会有什么不同?
我曾经以为只要是访问api接口就都是AJAX,结果在同事问我“你这是AJAX请求还是代理?”时,我用一脸懵逼的表情看着他,他用关怀弱智的表情看着我...
事实是只有浏览器通过XMLHttpRequest对象和Fetch对象发出的请求才叫AJAX,才存在跨域,服务端发出的HTTP请求是不存在跨域的。
以下一个最简单的,浏览器通过XMLHttpRequest对象发出的,不跨域的,GET请求的请求头:

我们先来看看6个以sec开头的“奇怪”请求头,这6个请求头不管是否跨域都会携带,只是在跨域时sec-fetch-site的值从same-origin变成了same-site。
搜了一下,3个sec-ch开头的是实验功能,3个sec-fetch开头的是Fetch对象相关的,由于我个人都用不着,所以不在讨论范围。
问题一:AJAX发出的的GET、POST、PUT、DELETE、OPTIONS五种请求有什么不同?
经过测试其他的4种请求头,得出以下结论:
1. 都携带以下8个请求头:host、connection、accept、accept-encoding、accept-language、user-agent、referer、cookie
2. 相比get,其余4种增加了:origin(跨域情况下5种请求都有origin)
3. POST和PUT增加了:'content-length': '0'
问题二:原生的XMLHttpRequest请求和axios请求有什么不同?
测试用axios发出这5种请求,然后对比从XMLHttpRequest发出的请求,得出以下结论:
axios只是把 accept: '*/*' 改成了:accept: 'application/json, text/plain, */*',经过测试在跨域时也是如此,axios只是修改了accept请求头。
问题三:是否跨域会有什么不同?
从另一个域名发起请求,形成了跨域,然后对比5种请求时跨域和非跨域的区别,结果如下:
这5种请求跨域后都是少了cookie,只是在GET时跨域请求多了origin。
再来看服务端发出的请求,我们直接使用axios,就不比较通过http模块发的请求了。这是一个最简单的服务端通过axios发出的GET请求:

问题四:服务端发出的GET、POST、PUT、DELETE、OPTIONS五种请求会有什么不同?
我们先来看一下服务端发出这5种请求会有什么不同?经过测试,结论如下:
1. 都携带以下4个请求头:host、accept、connection、user-agent
2. POST和PUT增加了:'content-type': 'application/x-www-form-urlencoded'和'content-length': '0'
问题五:服务端发出的请求和AJAX会有什么不同?
再来看一下服务端发出的请求和AJAX有什么不同?经过比较,结论如下:
1. 当然是数量,从默认携带8个,变成了只有其中的4个,少了accept-encoding、accept-language、referer、cookie
2. user-agent从浏览器信息变成了axios以及它的版本号
3. connection从keep-alive变成了close
最后,我们看一下浏览器发出的AJAX以外的请求会携带哪些请求头?
经过测试,还是这8个,只不过在浏览器地址栏直接回车时,会少一个referer。
我们现在来看一下这8个请求头的功能吧,现在我们知道了,这8个是浏览器发出HTTP请求默认会携带的请求头。
host:请求将要发送到的服务器主机名和端口号,如果没有包含端口号,会自动使用被请求服务的默认端口
connection:网络连接是否持久化,现在我们知道浏览器发出的请求是keep-alive,服务端发出的请求是close
accept:告知(服务器)客户端可以处理的内容类型,这种内容类型用MIME类型来表示。
accept-encoding:告知(服务器)客户端可以理解的内容编码方式,我们常用到的场景是gzip压缩。
accept-language:告知(服务器)客户端可以理解的自然语言。
user-agent:告知(服务器)发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。
referer:当前页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。
cookie:携带cookie,跨域时默认不会携带,关于跨域时cookie的表现我们后面再讨论。
好了,现在我们对HTTP请求头心中有数了!知道哪些是所有请求都会有的默认的,哪些是根据需求人为添加的了。
HTTP请求时哪些请求头是默认携带的?的更多相关文章
- 微信小程序:POST请求data数据请求不到
最近开始开发小程序,遇到许多小问题,直奔主题. wx.request()是微信封装的ajax请求方法,也是小程序中ajax唯一的一个方法,被放在了API文档的第一个位置,的确使用率是最高的. 但是wx ...
- 微信小程序:post请求参数放在请求体中还是拼接到URL中需要看后台是如何接收的
前端发送post请求时,请求参数可以放在请求中,代码如下: function post(url, data, callback) { wx.request({ method: 'POST', url: ...
- AJAX请求 $.ajaxSetup方法的使用:设置AJAX请求的默认参数选项,当程序中需要发起多个AJAX请求时,则不用再为每一个请求配置请求的参数
定义和用法ajaxSetup() 方法为将来的 AJAX 请求设置默认值.语法$.ajaxSetup({name:value, name:value, ... }) 该参数为带有一个或多个名称/值对的 ...
- 请求时控制器的返回结果view()怎么会默认调到某个页面的?
请求时控制器的返回结果view()怎么会默认调到某个页面的? (1)请求时会拿方法行为的名字去和视图的名字对应,会默认去views视图下的与控制器名称一样的文件夹下名字与方法对应的视图文件匹配对应,然 ...
- python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息
背景介绍: 发送搜索请求时,需要用到登录接口返回值中的token值 代码实现: 登录代码: 搜索接口:
- Ajax详解及其案例分析------如何获得Ajax对象,使用Ajax对象发送GET和POST请求,校验用户名,POST和GET请求时的乱码处理,实现级联的下拉列表
本节主要内容预览: 1 获得Ajax对象 2 使用Ajax对象发送GET请求 3 使用Ajax对象发送POST请求 4 使用Ajax校验用户名 5 POST请求时的乱码处理 6 GET请求时的乱码处理 ...
- HTTP请求行、请求头、请求体详解
HTTP 请求头各参数具体含义 Header 解释 示例Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/htmlAccept-Charset 浏览器可以接 ...
- Axios发送请求时params和data的区别
在使用axios时,注意到配置选项中包含params和data两者,以为他们是相同的,实则不然. 因为params是添加到url的请求字符串中的,用于get请求. 而data是添加到请求体(body) ...
- Spring Cloud系列之客户端请求带“Authorization”请求头,经过zuul转发后丢失了
先摆解决方案: 方法一: 方法二: zuul.routes.<routeName>.sensitive-headers= zuul.routes.<routeName>.cus ...
- Mac下Jmeter快速安装与入门-模拟测试Post请求及设置Http头
[1]去Apache官网下载 Binaries系列的最新Jmeter.gz包 [2]下载到本地之后解压缩,进入到解压之后的目录然后,找到apache-jmeter-4.0/bin/jmeter.sh ...
随机推荐
- 2022-10-10:以下go语言代码输出什么?A:[1 2 3 0 1 2];B:死循环;C:[1 2 3 1 2 3];D:[1 2 3]。 package main import “fmt“
2022-10-10:以下go语言代码输出什么?A:[1 2 3 0 1 2]:B:死循环:C:[1 2 3 1 2 3]:D:[1 2 3]. package main import "f ...
- Python忽略NoData计算多张遥感影像的像元平均值:whitebox库
本文介绍基于Python中whitebox模块,对大量长时间序列栅格遥感影像的每一个像元进行忽略NoData值的多时序平均值求取. 在文章Python ArcPy批量计算多时相遥感影像的各像元 ...
- linux DHCP
目录 一.DHCP概念 二.DHCP工作过程 三.DHCP实验 一.DHCP概念 概念:动态主机配置协议,自动为计算机分配tcp/ip参数 DHCP的优点:1.减少管理员的工作难度 2.避免错误的可能 ...
- 2022年第十四届四川省大学生程序设计大赛 A
A Adjacent Swapping 题意: 给定一个字符串,每次可以移动相邻字符,求最小移动次数可以把它变成s+s这样左右两边相同的字符串. 思路: 1:我们知道他一定是偶数长度,所以我们把字符串 ...
- 代码随想录算法训练营Day12 栈与队列
代码随想录算法训练营 代码随想录算法训练营Day12 栈与队列| 239. 滑动窗口最大值 347.前 K 个高频元素 总结 239. 滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的 ...
- 安装ODOO13
在CentOS 7服务器下安装和配置Odoo 13 录到服务器: ssh root@your_server_ip1如需检查计算机上安装的CentOS的版本,可以运行以下命令: cat /etc/red ...
- 在 Net Core 开发中如何解决 Cannot access a disposed object 这个问题
一.简介 Net Core跨平台项目开发多了,总会遇到各种各样的问题,我就遇到了一个这样的问题,不能访问 Cannot access a disposed object 错误,经过自己多方努力,查阅资 ...
- chess草稿(附代码!)
2022/8/12日过了,代码如下:(已删除调试语句,保留注释,为了使代码更容易看懂并没有卡常.卡完常的代码不是给人看的) 点击查看代码 /* 倒序操作+合并连通块+维护集合,支持合并.区间查询+线段 ...
- 可以,很强,68行代码实现Bean的异步初始化,粘过去就能用。
你好呀,我是歪歪. 前两天在看 SOFABoot 的时候,看到一个让我眼前一亮的东西,来给大家盘一下. SOFABoot,你可能不眼熟,但是没关系,本文也不是给你讲这个东西的,你就认为它是 Sprin ...
- Java拓展-拆,装箱,线程,反射
导言: 在学习JavaSE的时候,我们会使用Java基础编程,并且了解了什么是面向对象的编程,会使用Java写一些基础算法程序, 接下来,我们需要了解Java的自动拆箱和自动装箱,单线程和多线程,反射 ...