标签:
Http协议是浏览器和web服务器的通讯格式。
1. http请求都是由请求行、多个请求头和请求正文构成的,但GET请求用一个空行表示请求正文
a) GET请求
b) POST请求
下面是一个上传文件的post请求
<form action="" method="POST" enctype="multipart/form-data">
<input type="text" name="text1"><br />
<input type="file" name="file1"><br />
<input type="file" name="file2"><br />
<input type="submit" value="上传"/>
</form>
请求包内容如下:
POST /logsys/home/uploadIspeedLog!doDefault.html HTTP/1.1
Accept: text/plain, */*
Accept-Language:
zh-cn
Host:
192.168.24.56
Content-Type:multipart/form-data;boundary=-----------------------------7db372eb000e2
User-Agent:
WinHttpClient
Content-Length:
3693
Connection:
Keep-Alive
------WebKitFormBoundaryOXUzBnl7Bn3EnqRi
Content-Disposition: form-data; name="text1"
abc
------WebKitFormBoundaryOXUzBnl7Bn3EnqRi
Content-Disposition: form-data; name="file1"; filename="1.txt"
Content-Type: text/plain
//注意:有两个空行
------WebKitFormBoundaryOXUzBnl7Bn3EnqRi
Content-Disposition: form-data; name="file2"; filename="2.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryOXUzBnl7Bn3EnqRi--
红色部分是请求头,并不是每一个请求头都是必要的。对于文件上传,最重要的是Content-Type,它用于指定http请求的类型,multipart/form-data是必须的, boundary是数据分隔符,由浏览器随机生成,如果同时上传多个文件,在请求正文中通过boundary来分隔每个文件的内容;Content-Length是上传文件的总长度。
Chrome浏览器自带的抓包工具不支持显示上传的文件内容,所以看不到。
2. GET请求和POST请求的区别:
数据传递方式不同,GET方法将数据放在URL地址后,以“URL + 问号? + 参数=参数值&参数=参数值…”的形式传递;POST方法将数据放在请求体中。
数据传输量不同,GET方式最多携带1k的数据量,POST方式则没有限制。
3. 请求头
Accept:text/html,image/*,*/* 浏览器告诉服务器,我能接收的数据类型
Accept-Charset:ISO-8858-1 浏览器告诉服务器,我支持的字符集
Accept-Encoding:gzip,compress 浏览器告诉服务器,我能接收的压缩格式
Accept-Language:zh-cn,en-us 浏览器告诉服务器,我的语言环境
Host:www.baidu.com:80 ****,要请求的主机
If-Modified-Since:Tue, 11 Jul 2000 18:23:51 GMT
***,请求页面的最后修改时间,和服务器页面的最后修改时间对比,决定是否使用缓存。
User-Agent: ***,浏览器信息
Connection:close/Keep-Alive ***,一次请求后是否断开连接,Http1.0一次连接请求后就断开
Referer:http://www.hao123.com ***,客户机是哪个页面来的,用于防盗链
4. http响应,它包括一个状态行、多个消息头和实体内容。
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
“HTTP/1.1 200 ok” 表示一个状态行,200为状态码,常用的状态码有:200表示浏览器请求成功,302表示让浏览器重定向,304和307表示让浏览器使用缓存,403 表示权限不够访问资源的,404表示请求的资源不存在,500表示服务器运行发生异常。
常见的消息头:
Location:www.baidu.com 服务器通过这个头,告诉浏览器跳转到那里,和状态码302搭配使用
Server:apache tomcat 告诉浏览器服务器的类型
Content-Encoding:gzip 告诉浏览器返回数据的压缩格式
Content-Length:80 告诉浏览器返回数据的长度
Content-Type:text/html;charset=utf-8 告诉浏览器返回数据的类型和字符集
Refresh:1;url=http://www.taobao.com 让浏览器几秒之后跳转到哪里
Content-Disposition:attachment;filename=1.txt 表示让浏览器下载返回的数据
Transfer-Encoding: chunked 告诉浏览器数据是以分块方式回送的
//控制浏览器缓存的3个头
Expires:-1 值-1表示让浏览器不要缓存
Cache-Control:no-cache
Pragma:no-cache
标签:
原文地址:http://www.cnblogs.com/lhat/p/4539924.html