http请求分析
一个Http请求一般始于如下几种方式:
1.在浏览器中输入一个URL地址
2.网页中的一个超链接
3.Response.Redirect("http://www.sohu.com")在后台进行重定向
4.Form表单提交
前三种方式都是以Get方式发起请求。第四种方式可以以Get方式发起请求,也可以以Post方式发起请求,只需要设置<form action="" method="Get/Post"></form>的method属性即可,默认该属性值为Get.
当客户端发起一个Http请求到服务端时,会传输一个Http请求消息给服务端,标准的Http请求消息格式如下:
请求行(request-line)——请求行的格式为:请求方式_资源路径_http版本号(Get http://www.sohu.com/Default.aspx HTTP/1.1)
消息头(headers)——说明服务器要使用的附加信息(ContentType:application/json Content_Length:18 等等其他头信息)
回车换行(CRLF)——表明头部信息结束
主体数据(request-body)——需要传输到服务端的数据内容,以Post方式请求时才会有该项数据。(username=tom&age=21)
回车换行(CRLF)——表明主体数据信息结束
需要说明的是:
1.当一个Http请求时Get方式的请求时,请求消息中只有前三项,而没有主体数据。当以Post方式请求时,会包含上述五项信息。
2.无论是Get请求还是Post请求,请求行中的资源路径必须是application/x-www-form-urlencoded方式编码。Get请求时,浏览器会自动对其进行UrlEncode。Post请求时,浏览器不会自动进行UrlEncode,所有需要手动对资源路径进行UrlEncode.
3.Post请求时,请求消息中存在主体数据,主体数据的编码方式由消息头中的ContentType属性来设置,主体数据的长度由Content_Length来设置。故在进行一些异步的Post请求时,需要设置ContentType属性。如果使用form表单进行Post请求时,只需要设置form元素的encType属性即可,浏览器会在请求消息的消息头中加入ContentType属性,并且值为encType的值。如果没有设置encType属性值,默认会将ContentType设置为application/x-www-form-urlencoded。
4.form元素进行请求时,如果是Get方式进行请求,action标签属性中如果存在"?子句",GET方式将会忽略这个子句。浏览器会自动将表单域的元素的name和value组成键值对放在请求的Url后面,如http://localhost/Default.aspx?age=21。如果以Post方式进行请求,action标签属性中存在"?子句",Post方式会保留这个子句,服务端也可以获得这个子句。
5.如果form元素进行请求时,form内含有文件上传控件,需要上传文件数据是,encType要设置成"multipart/form-data"。
注:
在Form元素的语法中,EncType表示提交数据的格式。用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。
下边是说明:
application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。
multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
Form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。
当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
http请求分析的更多相关文章
- [原]Django慢请求分析工具--dogslow
当你的网站突然变慢了,你怎么办? 先看监控,查看系统的资源消耗,CPU?IO?磁盘? 然后看日志,查看第一个出现慢请求的接口是哪个? 然后看依赖的服务,是第三方服务还是DB瓶颈,还是redis变慢,还 ...
- iOS美丽约网络请求分析
网络请求分析html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padd ...
- 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析
//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...
- 使用tcpdump+Wireshark(或Fiddler)做linux服务器的网络请求分析
我们的服务器上,一般都没有窗口界面,这时候要抓包,用tcpdump是最方便的.而分析网络请求时,wireshark又是相当方便的,这时候我们就需要把它们两个一起来使用了. tcpdump 抓取数据 命 ...
- HTTP请求分析工具Fiddler
主要用于分析http头信息和响应头信息,以及具体的post数据和响应数据,可以监测电脑上http请求.
- 完整的http请求分析
首先我们要明白什么是http. http:超文本传输协议(HTTP,HyperText Transfer Protocol). 超文本传输协议是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必 ...
- sql server 性能调优之 当前用户请求分析 (1)
一. 概述 在生产数据库运行期间,有时我们需要查看当前用户会话状态或者是说数据库当前是否运行良好, 应用的场景比如:当运行的应用系统响应突然变慢时需要分析数据库的.或想分析当前的数据库是否繁忙,是否有 ...
- 【转】HTTP协议之multipart/form-data请求分析
原文链接:http://blog.csdn.net/five3/article/details/7181521 首先来了解什么是multipart/form-data请求: 根据http/1.1 rf ...
- TOMCAT8源码分析——处理请求分析(下)
前言 本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过<TOMCAT源码分析——请求原理分析(上)>和<TOMCAT源码分析——请求原理分析(中)>.在& ...
- TOMCA源码分析——处理请求分析(上)
在<TOMCAT源码分析——请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT源码分析——请求原理分析 ...
随机推荐
- 零基础~仿qq登录界面
html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- jdk1.8源码学习笔记
前言: 前一段时间开始学习了一些基本的数据结构和算法,算是弥补了这方面的知识短板,但是仅仅是对一些算法的了解,目前工作当中也并没有应用到这些,因此希望通过结合实际例子来学习,巩固之前学到的内容,思前想 ...
- TerminateProcess
Remarks The TerminateProcess function is used to unconditionally cause a process to exit. The state ...
- laravel5.5缓存系统
目录 1 Redis的配置 1.1 安装PRedis 1.2 配置 1.2.1 配置redis数据库 1.2.2 更改session的配置 1.2.3 更改cache配置 1.3 使用redis 2 ...
- 利用NSAttributedString实现图文混排
UILabel 和 UITextView 都能添加 NSAttributedString 属性字符串,通过这一点,可以实现带有属性的文字和文字内包含图片的文本内容展示. 效果如下: 1-初始化可变 ...
- 【Insert Interval】cpp
题目: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if nec ...
- 3D U-Net卷积神经网络
3D U-Net这篇论文的诞生主要是为了处理一些块状图(volumetric images),基本的原理跟U-Net其实并无大差,因为3D U-Net就是用3D卷积操作替换了2D的,不过在这篇博文中我 ...
- VMware下Linux配置局域网和外网访问
我想尝试的是利用本机的ip+port来访问虚拟机上的web服务器,因为这样的话,我就能够将我的web服务器部署成为一个能让外网访问的服务器了,首先说下我的环境: 主机:系统win7,ip地址172.1 ...
- 深入理解CSS中的margin
1.css margin可以改变容器的尺寸 元素尺寸 可视尺寸--标准盒子模型中盒子的宽度是不包括margin值的,clientWidth 占据尺寸--包括margin的宽度 outWidth不在标准 ...
- beta版本前准备
目录 过去存在的问题 任务分工 开发规范 后端总结 卉卉 家灿 前端总结 绪佩 青元 恺琳 宇恒 丹丹 算法&API接口 家伟 鸿杰 一好 文档&博客撰写 政演 产品功能 我们已经做了 ...