码迷,mamicode.com
首页 > Web开发 > 详细

http协议

时间:2015-05-30 10:39:26      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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协议

标签:

原文地址:http://www.cnblogs.com/lhat/p/4539924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!