zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    【转】安装VS2008:this application has requested the run
    【转】开源史上的8大交易
    PowerDesigner属性设置笔记
    国外威客网站大盘点
    [Java]单项链表与双端链表[原]
    Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
    Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
    Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
    创业公司如何实施敏捷开发
    创业公司如何实施敏捷开发
  • 原文地址:https://www.cnblogs.com/happy-coder/p/6125918.html
Copyright © 2011-2022 走看看