浏览器对HTTP请求的编码行为
浏览器对请求的URL编码行为
浏览器会对请求的URL中非ASCII码字符进行编码。这里不是指对整个URL进行编码,而是仅仅对非ASCII码字符部分进行编码,详情请看下面的实验记录。
- 实验一:在URL参数Name中输入中文“哈哈”,在Fiddler中抓取的请求中“哈哈”被编码成了“%e5%93%88%e5%93%88” 。
http://localhost:27713/MyIndex.aspx?Name=哈哈
- 实验二:将URL中的“MyIndex”替换成中文“哈哈”,参数Name中输替换成刚才被编码过的中文“哈哈”。从Fiddler抓到的请求中可以看到中文“哈哈”被编码了,但“%e5%93%88%e5%93%88”仍保持不变。如果它被编码了(即中文“哈哈”被编码两次),它应该长这样“%25e5%2593%2588%25e5%2593%2588” 。由此可以得出,浏览器仅对URL中的非ASCII码字符进行编码而已。
http://localhost:27713/哈哈.aspx?Name=%e5%93%88%e5%93%88
HTTP服务器在接收到这样的请求时,会对URL中转义的字符进行解码,请看下面实验三。
- 实验三:抓的请求Name=%e5%93%88%e5%93%88,但在程序里获取参数Name时是已被解码还原成中文“哈哈”。
但是,HTTP协议中并没有指定使用何种编码和字符集来解释URL中的非ASCII字符,因此,否能成功解析完全取决于URL中非ASCII内容的编码是否与 HTTP服务器的解析编码一致。
浏览器对POST请求相关的编码行为
对于POST请求,表单中的参数值是通过request body发送给服务器,此时浏览器会根据页面 Content-Type 指定的字符集对表单数据进行编码,然后再将表单数据发送给服务器。服务器收到请求后会对表单数据进行解码。因为编码、解码是由浏览器和服务器完成的,所以开发人员一般是感觉不到这个过程的。但你可以通过下面的实验截图,直观的感受这个编解码过程。
- 步骤一:填写表单,提交请求。
- 步骤二:抓取请求,确认用户名被编码。
- 步骤三:在程序后台获取被服务器解码后的用户名。
参考引用:
https://blog.csdn.net/happy_wuyuqing/article/details/8144830
https://www.cnblogs.com/haitao-fan/p/3399018.html
浏览器对HTTP请求的编码行为的更多相关文章
- 浏览器HTTP协议请求头信息
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.客户端向服务器发送一个请求,请求头包含请求的方法.URI.协议版本.以及包含请求修饰符.客户信息和内容的类似于MIME的消息结构 ...
- [1.6W字] 浏览器跨域请求限制的详细原理分析&寻找一种最简单的方式实现XHR跨域(9种方法, 附大招可以纯前端实现跨域!)
Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...
- [1.6W字]浏览器跨域请求的原理, 以及解决方法(可以纯前端实现) #flight.Archives011
Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...
- MediaElement.js之浏览器跨域请求视频播放
浏览器跨域问题一直以来都是作为前端开发人员常见的问题,所以今天学习了下如何使浏览器跨域请求资源 需要了解的知识 -域(主域,子域,什么是跨域) 简单来说由于浏览器同源策略,凡是发送请求url的协议(h ...
- .net后台模拟浏览器get/post请求
#region 后台模拟浏览器get/post请求 /// <summary> /// 发送请求方式 /// </summary> /// <param name=&qu ...
- UrlConnection doPost Https请求 、编码设置
UrlConnection doPost Https请求 .编码设置 UrlConnection doPost方法 /** * 发送POST请求 * * @param url 请求地址url * @p ...
- ajax是怎么发请求的和浏览器发的请求一样吗?cookie
下午设置cookie时出现了个问题 用ajax发的post请求php,在php的方法里设置了cookie,然后在浏览器请求的php里打印cookie值但是一直获取不到cookie的值 分析: 1.aj ...
- 关于对浏览器发送POST请求的一点研究
网上对与HTTP的Method,GET和POST的区别,说得毕竟详细.然后提到一点,说浏览器对两者的还有一个比较容易让人忽略的区别就是:POST会分2次发送,而GET只1次. GET发送1次,这个没什 ...
- 原来浏览器原生支持JS Base64编码解码 outside of the Latin1 range
原来浏览器原生支持JS Base64编码解码 « 张鑫旭-鑫空间-鑫生活 https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-bto ...
随机推荐
- 【原创】Silverlight之TextBox的LostFocus、GotFocus事件
<TextBox x:Name="txtCount" Width="200" Height="35" GotFocus="t ...
- geoserver笔记
geoserver中只支持shp 的数据的发布,也就是.shp的数据.其他的如mapgis的数据则需要转成.shp的格式 要发布地图数据为WMS服务,首先得建立工作空间(也可以使用现有的工作空间),然 ...
- Java 8 接口中的默认方法与静态方法
Java 8 接口中的默认方法与静态方法 1. 接口中的默认方法 允许接口中包含具有具体实现的方法,该方法称"默认方法",默认方法使用用 default 关键字修饰. public ...
- jqgrid单元格合并
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- 2018.08.29 NOIP模拟 pmatrix(线性筛)
[问题描述] 根据哥德巴赫猜想(每个不小于 6 的偶数都可以表示为两个奇素数之和),定义 哥德巴赫矩阵 A 如下:对于正整数对(i,j),若 i+j 为偶数且 i,j 均为奇素数,则 Ai,j = 1 ...
- hdu-1130(卡特兰数+大数乘法,除法模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1130 卡特兰数:https://blog.csdn.net/qq_33266889/article/d ...
- 使用bat批处理文件备份postgresql数据库
@echo offset pgsql_path=d:\"Program Files"\PostgreSQL\9.3\bin\ //安装目录set database=postgr ...
- AVL树C++实现
1. AVL 树本质上还是一棵二叉搜索树,它的特点是: 本身首先是一棵二叉搜索树. 带有平衡条件: 每个结点的左右子树的高度之差的绝对值(平衡因子) 最多为 1. 2. 数据结构定义 AVL树节点类: ...
- Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'dataSource' of bean class [com.liuyang.jdbc.PersonDao]: No property 'dataSource
这个错误是说我的启动失败了.这类问题要从配置文件中开始找原因,我用的是spring框架,所以我从application.中找的原因 然后对比路径,对比文件的命名和id,都没有问题,为什么会在启动的时候 ...
- nexus 组件下载和上传
一. 重写 super pom 修改 maven 的 settings.xml Configuring Maven to Use a Single Repository Group <setti ...





