首页 > 其他分享 >HTTP请求时哪些请求头是默认携带的?

HTTP请求时哪些请求头是默认携带的?

时间:2023-07-24 19:56:23浏览次数:47  
标签:HTTP 请求 发出 accept AJAX 默认 服务端 跨域

提起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,请求,发出,accept,AJAX,默认,服务端,跨域
From: https://www.cnblogs.com/luzeyu/p/17578165.html

相关文章

  • 前端请求报错:'JSON parse error: syntax error, expect {, actual e…1, line 1, colu
    1、如果不用JSON.stringify(inputJson)包起来就会报错letinputJson={"selectUid":selectUid};varresponse=await$.ajax({type:'POST',url:'xxx',data:inputJson,//正确的是JSON.stringify(inputJson)......
  • 利用Nginx http_image_filter_module模块来裁剪过大的图片
    http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建......
  • 忽略证书的HTTPS请求实现
    publicstaticvoidhttpsTest(StringhttpUrl){//忽略证书的https请求try{SSLContextsslContext=newSSLContextBuilder().loadTrustMaterial(null,newTrustStrategy(){@OverridepublicbooleanisTrusted(X509Certificate[......
  • httprunner
    httprunner(仅作为个人笔记,如有雷同,请联系删除。。)https://www.cnblogs.com/aichixigua12/p/13162479.htmlHttpRunner是一款面向HTTP(S)协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。1、特点:继承Requ......
  • mac os socks5转http proxy
    1.使用homebrew安装privoxy,但安装时报错:https://juejin.cn/post/6961616069941264415homebrew执行brewupdate报错Error:homebrew-coreisashallowclone.To`brewupdate`,firstrun:git-C/usr/local/Homebrew/Library/Taps/homebrew/homebrew-corefetch--uns......
  • HttpClient-请求参数
    demo:packagetest;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.htt......
  • 快速检测HTTP代理IP是否有效的方法及python代码示例
     1.使用在线代理检测工具:有许多免费的在线代理检测工具可用,如ProxyChecker、ProxyScrape等。只需将待检测的代理IP和端口输入工具中,点击开始检测,即可迅速获得代理的可用性和匿名性等信息。 2.使用命令行工具进行检测:在命令行中使用curl命令来测试代理的可用性。例如,输入命令"......
  • SpringBoot基于Spring Security的HTTP跳转HTTPS
    简单说说之所以采用SpringSecurity来做这件事,一是SpringSecurity可以根据不同的URL来进行判断是否需要跳转(不推荐),二是不需要新建一个TomcatServletWebServerFactoryBean,新建这个Bean可能会导致SpringBoot关于Server的配置失效。三是网上大部分流传的通过实现WebServerFactor......
  • 怎么在MYSQL显示默认值
    项目方案:在MySQL中显示默认值1.简介在MySQL中,可以为表的列设置默认值,以确保在插入新记录时,如果没有提供该列的值,将使用默认值作为替代。本项目旨在提供一个方案,用于在MySQL中显示默认值。2.实现方案2.1创建表格首先,我们需要创建一个包含默认值的表格。可以使用以下代码在My......
  • Spring管理事务默认回滚的异常是什么?
    问题:Spring管理事务默认(即没有rollBackFor的情况下)可以回滚的异常是什么? 回答:RuntimeException或者Error。抛出运行时异常,是否回滚?Yes@TransactionalpublicbooleanrollbackOn(Throwableex){returnnewRuntimeException();}抛出错误,是否回滚? Yes@Transact......