当测试遇到request指定header(疑惑到反思)

场景描述:

1. (php+nginx)RD提测代码中向后端发起请求时指定header内容,包括useragent/content-type/accept-encoding(原框架中未指定)。

 ‘useragent‘       => "Mozilla/5.0"
 ‘content-type‘    => "application/x-www-form-urlencoded"
 ‘Accept-Encoding‘ => "gzip"

2. 在测试环境测试,能够返回预期的结果;

3. 潜在担心头部指定不当会造成乱码等情况,但不清晰(问题所在,未清晰了解导致未知的敬畏)

解决:

1. 重新理解header中的useragent/content-type/accept-encoding;

根据《HTTP权威指南》附录所述,useragent/content-type/accept-encoding意义如下:

  •  useragent
  1. 定义

2. 用途:如服务器可根据发起请求的客户端类型定制化返回结果

3. 所取值的意义:

‘useragent‘       => "Mozilla/5.0"

Mozilla/5.0 is the general token that says the browser is Mozilla compatible, and is common to almost every browser today.(参考:useragent

  • content-type

1. 定义

2. 用途:内容协商头部集。如浏览器收到服务端的返回,即可知道如何展示;但其实现有场景是客户端头部中的header,表单的提交流程如下(参考:form)。

其中与content-type相关的就是user agent会根据enctype值encode表单元素。

3. 所取值的意义:

‘content-type‘    => "application/x-www-form-urlencoded"

当以上所说的表单元素enctype未指定时,会采用默认content-type值,即为application/x-www-form-urlencoded。

  • accept-encoding

1.定义

2.用途:内容协商头部集。

3. 所取值意义:压缩算法

 ‘Accept-Encoding‘ => "gzip"

2.header未指定时useragent/content-type/accept-encoding使用的是什么值?

  • 实质:HTTP内容协商机制
  • nginx.conf中http部分指定头部字段赋值规则(以下以nginx官网代码为例)
user       www www;  ## Default: nobody
worker_processes  5;  ## Default: 1
error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 8192;

events {
  worker_connections  4096;  ## Default: 1024
}

http {
  include    conf/mime.types;  ##指定content-type
  include    /etc/nginx/proxy.conf;
  include    /etc/nginx/fastcgi.conf;
  index    index.html index.htm index.php;

  default_type application/octet-stream;  #默认类型,无类型,字节流
 ......
}
  • content-type由其中的引入的mime.types文件指定(相对路径基于webserver目录),根据文件后缀名指定content-type。(参考:MIME与mime.type
types {
  text/html                             html htm shtml;
  text/css                              css;
  text/xml                              xml rss;
  image/gif                             gif;
  image/jpeg                            jpeg jpg;
  application/x-javascript              js;
  text/plain                            txt;
  text/x-component                      htc;
  text/mathml                           mml;
  image/png                             png;
  image/x-icon                          ico;
  image/x-jng                           jng;
  image/vnd.wap.wbmp                    wbmp;
......
}
http {
......
gzip            on;
gzip_min_length 1000;
gzip_proxied    expired no-cache no-store private auth;
gzip_types      text/plain application/xml;
......

}

3. header未指定时(原框架)和指定时(现代码)有什么区别(服务端处理和客户端接收)

看到这里,回归场景,这些头部主要用于实现内容协商(Chapter 17 HTTP权威指南),是否指定的区别需要确认服务器是否实现了内容协商机制,及其nginx配置。

另外,测试环境和线上环境配置可能存在差异,最终后续是移除了header赋值相关代码。

时间: 2024-10-22 04:02:39

当测试遇到request指定header(疑惑到反思)的相关文章

获取不到自定义的request的header属性

java获取headers的代码如下: // 获取http-header里面对应的签名信息 Enumeration<?> headerNames = request.getHeaderNames(); logger.info("request headerNames : {}", JSONParser.toJSONString(request.getHeaderNames())); logger.info("request sys_sign header : {}

HttpServletRequest request 获取header 和 body

//获取header Enumeration headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String key = (String) headerNames.nextElement(); String value = request.getHeader(key); System.out.println("=======车机返回Map:"+value+"=====

volley Request添加Header的HTTP请求

package com.example.zbclient.util; import java.util.HashMap; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import com.android.volley.AuthFailureError; import com.android.volley.DefaultRetryPolicy; import com.android

墙内三大云数据库测试对比 不指定

我司CTO和技术总监都是腾讯系的,所以我们一开始就选用腾讯云的服务.他们家的云数据库提供了可视化的运维操作页面和自动备份的能力,降低了DB运维的门槛.同时云数据库还支持高可用架构,对数据的安全性和服务的可靠性更有保障.另外有的云数据库厂商还提供了诸如数据库审计.慢查询分析.数据回档等能力,大大减轻了数据库运维和DBA的工作量. 其实我们就没有专门的DBA,都是开发自己上去折腾,通过把数据库的可靠性外包给云端,确实极大地降低了我们的工作量,这一点还是挺爽的.但是在具体的使用过程中,发现还是有些地方

测试流程的指定

测试流程制定 目标 制定完整且具体的测试路线和流程,为快速.高效和高质量的软件测试提供基础流程框架.最终目标是实现软件测试规范化.标准化. 测试流程说明 流程图 需求分析 需求分析由产品经理制定,要求细化每一个功能的细节,每一个按钮的位置以及边界范围,对于稍大或稍复杂需求要求建模. ( 1 )测试需求是制订测试计划的基本依据,只有确定了的测试需求才能够为测试计划提供客观依据 ; ( 2 )测试需求是设计测试用例的指导,只有确定了要测什么.需要测哪些方面,才能有针对性的设计测试用例 ; ( 3 )

redmine在linux上的mysql性能优化方法与问题排查方案

iredmine的linux服务器mysql性能优化方法与问题排查方案 问题定位: 客户端工具: 1. 浏览器inspect-tool的network timing工具分析 2. 浏览器查看 response header, 分析http server 与 web server.       服务器工具:   0. nmon 查看各类系统负载, rrdtool 查看网络状况.   1. uptime看cpu负载;    free看内存;  mem ; cat /proc/meminfo以及  i

chrome http Request Header 修改插件

chrome http Request Header 修改插件 2013-05-31 11:03:03|  分类: JavaScript |  标签:chrome  extensions  change  http  header  |举报|字号 订阅 下载LOFTER我的照片书  | 最近因为需要搞 Chrome 的浏览器插件,所以了解了 Chrome Extensions 的一些基本知识.Chrome 插件都可以在以下目中找到. C:\Users\YouName\AppData\Local\

ubuntu 14.04 LTS 安装webbentch压力测试工具

最近在做 压力测试工具,除了apache的ab测试工具外,发现webbentch工具也不错,这里简单介绍下这两个工具. 一.webbentch安装: wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar.gz cd webbench-1.5 make && make install 如果没有安装ctags,则安装的时候会报错.ctags的安装: apt-get

利用Java编码北京PK10平台制作测试CSRF令牌验证的Web API

拙文是利用了Jmeter来测试北京PK10平台制作(www.1159880099.com)QQ1159880099 带有CSRF令牌验证的Web API:最近几天趁着项目不忙,练习了用编码的方式实现. 有了之前Jmeter脚本的基础,基本上难点也就在两个地方:获取CSRF令牌.Cookie的传递. 首先添加依赖,在POM.xml中添加以下内容: <!-- https:// mvnrepository.com/artifact/org.apache.httpcomponents/httpclien