• http协议


    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                                       

  • 相关阅读:
    A Simple Problem About Truth Table
    Android Fragment完全解析,关于碎片你所需知道的一切
    Android系统中标准Intent的使用
    Android应用开发全程实录-你有多熟悉listView
    Android四大基本组件介绍及生命周期
    设计模式
    Java流(Stream)、文件(File)和IO
    Java网络编程详解
    Java 多线程
    深入理解Java虚拟机 精华总结(面试)
  • 原文地址:https://www.cnblogs.com/lhat/p/4539924.html
Copyright © 2020-2023  润新知