`
carge
  • 浏览: 51902 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

HTTP协议发送数据到服务器端的若干种形式

 
阅读更多

 

 

HTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>HTTP协议学习</title>
</head>
<body>
<form action="test1.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <input name="field_1" type="text" value="123" />
  <br/>
  <input name="field_1" type="text" value="456" />
  <br/>
  <input name="field_2" type="text" value="789" />
  <br/>
  <input type="file" name="upload_file[]" />
  <br/>
  <input type="file" name="upload_file[]" />
  <br/>
  <input type="submit" name="Submit" value="submit" />
</form>
</body>
</html>

 

PHP页面:

<?
print_r($_FILES);
print_r($_POST);
?>

 

 

1. 当表单method为POST,并且enctype为multipart/form-data情况

 

1.1 请求数据

POST /go/test/test1.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost/go/test/test.php
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7db1192f70f20
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2)
Host: localhost
Content-Length: 906
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7db1192f70f20
Content-Disposition: form-data; name="field_1"

123
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="field_1"

456
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="field_2"

789
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="upload_file[]"; filename="D:\text_file1.txt"
Content-Type: text/plain

This is content of the text file 1.

Other files are same to text file.
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="upload_file[]"; filename="D:\text_file2.txt"
Content-Type: text/plain

This is content of the text file 2.

Other files are same to text file.
-----------------------------7db1192f70f20
Content-Disposition: form-data; name="Submit"

submit
-----------------------------7db1192f70f20--

 

1.2 响应数据

HTTP/1.1 200 OK
Date: Thu, 27 Jan 2011 03:32:47 GMT
Server: Apache/2.2.15 (Win32) PHP/5.2.13
X-Powered-By: PHP/5.2.13
Content-Length: 849
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

Array
(
    [upload_file] => Array
        (
            [name] => Array
                (
                    [0] => text_file1.txt
                    [1] => text_file2.txt
                )

            [type] => Array
                (
                    [0] => text/plain
                    [1] => text/plain
                )

            [tmp_name] => Array
                (
                    [0] => C:\WINDOWS\Temp\php14B.tmp
                    [1] => C:\WINDOWS\Temp\php14C.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 73
                    [1] => 73
                )

        )

)
Array
(
    [field_1] => 456
    [field_2] => 789
    [Submit] => submit
)

 

1.3 简要分析说明

(1)  在消息头中存在一个“Content-Type: multipart/form-data; boundary=---------------------------7db38a3570f20 ",其中的boundary是用来告诉程序如何把消息体中各个字段分开;

(2)  HTTP协议发送的时候,并不关心各个field的name,即允许一次发送中有多个field有相同的名字。PHP处理这种数据时,如果名字相同且名字以 “[]”结尾,则会把这些数据放入一个数组中(见upload_file);如果名字相同但不是以“[]”结尾,则后面一个field会覆盖前面的field (见field_1);

(3) 发送文件的时候是直接把文件内容放在该区域的boundary区域。

 

 

2. 当表单method为POST,并且enctype为application/x-www-form-urlencoded情况

 2.1 请求数据 

POST /go/test/test1.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost/go/test/test.php
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2)
Host: localhost
Content-Length: 129
Connection: Keep-Alive
Cache-Control: no-cache

field_1=123&field_1=456&field_2=789&upload_file%5B%5D=D%3A%5Ctext_file1.txt&upload_file%5B%5D=D%3A%5Ctext_file2.txt&Submit=submit

 

 2.2 响应数据 

HTTP/1.1 200 OK
Date: Thu, 27 Jan 2011 03:51:56 GMT
Server: Apache/2.2.15 (Win32) PHP/5.2.13
X-Powered-By: PHP/5.2.13
Content-Length: 209
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

Array
(
)
Array
(
    [field_1] => 456
    [field_2] => 789
    [upload_file] => Array
        (
            [0] => D:\\text_file1.txt
            [1] => D:\\text_file2.txt
        )

    [Submit] => submit
)

 

2.3 简要分析

(1) 表单为POST方式的时候,当enctype为空时,enctype默认为“application/x-www-form-urlencoded”;

(2) 此时的文件域数据被当作普通数据来处理;

(3) 此时发送数据不是放在boundary之中而是组合成一个URL queryString的形式;

(4) 所有的field_name和field_value都被URL编码。

 

 

分享到:
评论

相关推荐

    tcp_file_transfer.rar_labview TCP_labview tcp client_tcp server

    3. **数据分包与发送**:文件内容被分成若干数据包,每个数据包通过TCP连接发送到客户端。 4. **接收与重组**:客户端接收到来自服务器的数据包,按照顺序重新组合成原始的字节流。 5. **文件写入**:客户端将接收到...

    ntripclient-MATLAB

    caster是服务器端,负责接收、存储和发送差分改正信息;RINEX数据流是标准的数据格式,用于交换GPS观测数据;客户端则用于连接caster,接收并应用这些改正数据。在MATLAB中实现NTRIP客户端,我们需要构建网络连接、...

    计算机网络名词解释及试题1.pdf

    CSMA/CD是局域网中的一种介质访问控制方式,某站点想要发送数据,必须首先侦听信道,如果信道空闲,立即发送数据并进行冲突检测;如果信道忙,继续侦听信道,直到信道变为空闲,才继续发送数据并进行冲突检测。 ...

    rtmp中文手册

    - **Chunk(块)**:消息的一部分,消息在网络发送前会被拆分成若干个小的数据块。 - **Chunk Stream(块流)**:通信过程中允许数据块单向流动的逻辑通道。 - **Multiplexing(复用)**:将独立的音频/视频数据合并...

    draft-pantos-http-live-streaming-23.pdf

    HLS(HTTP Live Streaming)是一种由苹果公司提出的流媒体传输协议,目的是为了有效地传输无界多媒体数据流。通过HLS协议,可以将音频、视频和字幕等多媒体内容分割成小的数据包,再由服务器推送至客户端播放器进行...

    基于JAVA的文件传输开发应用.pdf

    存传输的时候,网络数据流和文件数据流都是以字节的形式包装的,需要占用虚拟机中的大量内存空间,当文件过大时,就会出现内存溢出的错误,我们采取的方法是大文件按照传输块分成若干次发送。 在Android系统中,...

    华为交换机LLDP配置及技术原理

    LLDP(Link Layer Discovery Protocol)是一种标准的链路层发现协议,用于将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将其以标准的管理信息库MIB...

    基于ASP的多特软件爬虫DT 2022 v6.0.zip

    ASP(Active Server Pages)是微软公司推出的一种服务器端脚本环境,用于创建动态交互式网页。在“基于ASP的多特软件爬虫DT 2022 v6.0.zip”中,我们可以看到这个项目是利用ASP技术来实现的一款多特软件下载站的网络...

    (完整word版)计算机网络重点知识总结-谢希仁版.doc

    分组交换是现代计算机网络的主要工作方式,它将大的数据报文分割成若干个较小的数据块,每个块加上首部成为分组,然后逐个发送。分组在接收端被重新组合,这种方式允许网络动态选择最佳路径,但不保证分组的可靠交付...

    C# ASP.NET - 分块下载文件

    在服务器端,你需要检查`HttpRequest`对象中的`HttpWebRequest.Headers["Range"]`,这将包含客户端请求下载的特定块的范围。 4. **发送数据块**:根据客户端的范围请求,从服务器读取相应数据块并写入`HttpResponse...

    ASP动态网页设计教程【PPT】

    - ASP提供了若干内置对象,如Request(获取用户请求信息)、Response(向客户端发送信息)、Session(保存用户会话数据)、Application(在整个应用程序范围内共享数据)和Server(服务器对象,用于执行服务器端操作...

    2021-2022计算机二级等级考试试题及答案No.16046.docx

    - TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的协议,它在发送数据之前需要先建立连接,并在数据传输完成后关闭连接。TCP提供了可靠的数据传输服务,能够保证数据按序、无丢失地传输。 - ...

    计算机网络课后题答案 谢希仁

    - **往返时间(RTT)**:从发送端发送数据开始,到发送端收到来自接收端的确认所需的时间。 - **利用率**:网络资源的使用程度。 #### 十五、网络利用率与时延的关系 假设网络的利用率达到90%,则网络时延将是其...

    高二信息技术学业水平测试31套部分难的选择题.pdf

    1. ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于创建动态交互式网页。ASP技术允许开发人员在服务器端编写脚本,处理用户请求并返回结果。当客户端浏览器请求ASP网页时,服务器执行ASP代码并...

    TCP IP 详解 卷三

    在《TCP/IP 详解 卷三》中,作者首先介绍了客户-服务器事务的概念,这是一种通信模式,其中客户端(通常是用户)发起请求到服务端,而服务端则负责处理请求并返回响应。这种模型广泛应用于互联网的各种服务中,例如...

    计算机网络(谢希仁第五版)课后答案

    (1)物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务。 (2)给其服务用户(数据链路层)在一条物理的传输媒体上传送和接收比特流(一般为...

    计算机网络与通信期末考试复习题及答案.doc

    物理层负责处理原始的比特流,不关心数据的意义,只关注如何将这些比特正确地从发送端传送到接收端。 2. **电子邮件传递协议**: - 电子邮件的传递主要由**POP3**(Post Office Protocol Version 3)和**SMTP**...

    socket通信c/s代码c语言实现

    3. **C/S架构**:客户端/服务器架构(Client/Server architecture)是一种分布式应用程序架构,其中客户端负责显示数据并处理用户交互,而服务器端则提供数据处理和存储等功能。 #### 三、客户端代码详解 1. **...

Global site tag (gtag.js) - Google Analytics