zoukankan      html  css  js  c++  java
  • HTTP协议学习,post于get;用Fiddler测试请求

    转载 收藏于网络

    1.简介:

    HTTP协议:Hypertext transfer protocol 超文本 传输 协议

    它是TCP/IP协议集中的一个运用层协议。

    用于定义WEB浏览器和WEB服务器之间交换数据的过程和数据的格式。

    2.会话方式:

    1.建立链接 2.客户端发送请求到服务器 3.服务器响应 4.关闭链接

    3.HTTP/1.1比HTTP/1.0的进步

    1.一个ICP/IP上可以包含多个HTTP请求和响应

    (这样,一个网页中的多张图片就可以在一个TCP/IP中传输 (HTTP/1.0每个图片需要建立一个TCP/IP连接) 。 但是每个单独网页文件,必须建立一个单独的TCP/IP连接)

    2.多个请求和响应和同时进行。

    (一个网页的单独ICP/IP连接中。发送第一次请求后,不用等待第一次响应完成,可以先发送第二次请求。)

    (服务器按照客户端请求的先后顺序,回送响应结果。)

    3.增加更多的请求头和响应头。 如:增加HOST请求头,可以使用主机名,表示访问服务器上面那个web站点。

    4.HTTP请求消息

    请求消息的结构:1.一个请求行(请求方式 请求URL HTTP版本) 2.若干消息头(可选,可以没有) 3.实体内容(GET请求没有,而且只有POST、PUT、Delete、请求才有)          消息头和实体的内容之间要用空行隔开(代表消息头结束,空行后面是实体内容。按ENTER键就可以)

    5.HTTP响应消息

    响应消息的结构:1.一个状态行 2.若干消息头(可选,可以没有) 3.实体内容(可以没有)          消息头和实体的内容之间要用空行隔开(代表消息头结束,空行后面是实体内容。实体内容就是网页的源代码)

    6.消息头作用:

    相当于服务器和浏览器之前的指令。

    浏览器用消息头向服务器传递信息:1.传递自己国家的语言Accept-Language  2.把当前网页从哪个链接来访问的告诉服务器 ...

    服务器告诉浏览器:1.告诉浏览器使用什么字符集显示页面 2.在客户端创建一个cookie ...

    格式:名称:空格 值(多个值用,号隔开) 回车。 有些头可以出现多次。 不区分大小写,默认,每个单词首字母大写。

    7.使用telnet命令测试

    1.telnet localhost 80
    2.按下  'CTRL+]',打开本机回显功能。
    3.按回车
    4.GET /a.htm HTTP/1.0 回车,再按一下回车。

    HTTP/1.0中的请求案例:
    GET /a.html HTTP/1.0

    HTTP/1.1 200 OK
    Content-Length: 16
    Content-Type: text/html
    Last-Modified: Tue, 16 Oct 2012 07:14:37 GMT
    Accept-Ranges: bytes
    ETag: "885ba7e66dabcd1:7d4"
    Server: Microsoft-IIS/6.0
    X-Powered-By: ASP.NET
    Date: Sat, 20 Oct 2012 07:31:58 GMT
    Connection: close

    var data="12345"

    (var data="12345"是a.htm的网页内容)

    HTTP/1.1中的请求案例(状态行后面必须加上空行 然后加上HOST才行):

    GET /1.htm HTTP/1.1
    HOST:

    HTTP/1.1 200 OK
    Content-Length: 427
    Content-Type: text/html
    Last-Modified: Sun, 21 Oct 2012 11:23:57 GMT
    Accept-Ranges: bytes
    ETag: "f82bcc8f7eafcd1:7dc"
    Server: Microsoft-IIS/6.0
    X-Powered-By: ASP.NET
    Date: Sun, 21 Oct 2012 11:24:33 GMT

    锘?html>
    <head>
        <title>Does get request can auto transfer input's para in url?</title>
    </head>
    <body>
        <form method="get"  action="http://127.0.0.1/Default.aspx" enctype="applicat
    ion/x-www-form-urlencoded">
            UserName:<input id="txtUserName" type="text" />
            PassWord:<input id="txtPassWord" type="text" />
            <input id="Submit1" type="submit" value="submit" />
        </form>
    </body>
    </html>

    简单请求:GET /1.htm  响应的内容:只有实体内容没有消息头等..

    POST请求案例:

    POST /default.aspx HTTP/1.1
    HOST:
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 35

    userName=zhangsan&password=123456
    HTTP/1.1 200 OK
    Date: Sun, 21 Oct 2012 11:33:40 GMT
    Server: Microsoft-IIS/6.0
    X-Powered-By: ASP.NET
    X-AspNet-Version: 4.0.30319
    Cache-Control: private
    Content-Type: text/html; charset=utf-8
    Content-Length: 545

    Form type can get parameter,userName:zhangsan,password:123456


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or
    g/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head><title>

    </title></head>
    <body>
        <form name="form1" method="post" action="default.aspx" id="form1">
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2
    ODcyMjlkZJxyQVLtbVdT/S4NG8fM3Qcn72RqiNW53mCR7pPt+9kF" />

        <div>
        </div>
        </form>
    </body>

    注意:1.Content-Type必须是application/x-www-form-urlencoded,才能获取到提交的数据。
          2.这里Content-Length计算的是传递的如果Content-Length: 35
          3.消息头和实体内容之间要空格隔开,按2次ENTER键

    8 响应状态码

    常见状态码:

    9 通用信息头:

    包括一些于被传输的实体内容没有关系的消息头。 (即能用于请求的消息头,也能用于响应的消息头)

    Cacle-Control: no-cache 请求完成后,不保存缓存,下一次重新请求服务器

    Connection: close 请求完成后,断开连接.不能继续发出请求。  telnet中:GET /1.htm HTTP/1.1 Host: Connection: close HTTP/1.1 200 OK......失去了跟主机的连接。

    Date: 日期

    Pragma: no-cache

    Trailer:Date

    Transfer-Encoding: chunked 分段传输

    Upgrade: HTTP/2.0,SHTTP/1.3

    Via: HTTP/1.1 Proxy1, HTTP/1.1 Proxy2 代理服务器

    Warning: any text

    10.请求头

               

    11.实体头:

    12.扩展头:

    附:用Telnet测试http请求比较麻烦,Fiddler工具非常强大好用。

    传递一个json对象发post请求案例:

    1.打开Fiddler,点击Composer选项卡

    2.下拉框选择Post

    3.输入请求的URL,比如:http://localhost:49194/api/user/

    4.Request Headers中输入:

    Content-Type: application/json; charset=utf-8

    Content-Length: 398 (这个是你要和你请求正文的字符长度一致,可以不输入,自动计算)

    5.输入,Requst Boy,比如:

    {"UserName":"logic5","Password":"Test1234","FirstName":"Ivan","LastName":"Chen","LastLoginDate":"2010-01-01","Email":"ivan.chen@logicsolutions.com","CreateDate":"2010-01-01","LastPasswordChangedDate":"2010-01-01","LastLockoutDate":"2010-01-01","IsLockedOut":true,"IsApproved":false,"DisableDate":"2010-01-01","IsDisable":false,"profile":{"TINs":"743222298","ProviderId":168829,"UserName":"logic5"}}

    点击Execute,操作成功!

    说明:本文整理自传智博客张孝祥老师的教程。 缅怀张老师!!!

  • 相关阅读:
    Singleton模式
    Factory模式
    AbstactFactory模式
    Maven的介绍及使用
    MySQL索引分析及使用
    Runnable接口和Callable接口的区别
    Java中的常见数学运算
    mkdir()和mkdirs()区别
    面试小问题——Object中有哪些常用方法?
    面试小问题——什么是多态?
  • 原文地址:https://www.cnblogs.com/llhhll/p/4721780.html
Copyright © 2011-2022 走看看