• TCP/IP笔记 应用层(3)——HTTP


    1. URL

    URL(Uniform Resource Locator) 相当于一个文件名在网络范围的扩展。

    1.1 格式

    schema://host[:port#]/path/.../[?query-string][#anchor]

    scheme            指定低层使用的协议(例如:http, https, ftp)

    host                   HTTP服务器的IP地址或者域名(存放资源的地方)

    port#                 HTTP服务器的默认端口是80,这种情况下端口号可以省略。

    path                   访问资源的路径

    query-string       发送给http服务器的数据

    anchor-             锚

    2. HTTP

    HTTP (HyperText Transfer Protocol),超文本传送协议 。HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。

    2.1 工作过程

    (1) 浏览器分析超链指向页面的 URL。
    (2) 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
    (3) 域名系统 DNS 解析出清华大学服务器的 IP 地址。
    (4) 浏览器与服务器建立 TCP 连接
    (5) 浏览器发出取文件命令:
          GET /chn/yxsz/index.htm。
    (6) 服务器 给出响应,把文件 index.htm 发给浏览器。
    (7) TCP 连接释放。
    (8) 浏览器显示“清华大学院系设置”文件 index.htm 中的所有文本。

    注:打开一个网页一般需要多次Request:

    (1)首先浏览器获取到index.html页面,然后浏览器就会对index.html进行解析

    (2)解析后发现其中还有很多信息,比如图片、css、js等其他引用信息,然后浏览器就会自动对这些信息发出Request请求

    (3)当所有的数据都获取完毕后,浏览器就会把网页显示出来。(一般来说,当页面的大体框架获取完成后就会把页面显示出来)

    2.2 特点

    (1)面向事务的客户服务器协议。
    (2)HTTP 1.0 协议是无状态的(stateless)。

    同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.
    (3)HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。
    (4)万维网浏览器就是一个 HTTP 客户,而在万维网服务器等待 HTTP 请求的进程常称为 HTTP daemon,有的文献将它缩写为 HTTPD。
    (5)HTTP daemon 在收到 HTTP 客户的请求后,把所需的文件返回给 HTTP 客户。   

    2.3 HTTP消息格式

    HTTP有2种消息:

    Request(请求报文)——从客户向服务器发送请求报文。
    Response(响应报文)——从服务器到客户的回答。

    2.3.1 Request

    先看Request 消息的结构,   Request 消息分为3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. header和body之间有个空行, 结构如下图

    第一行中的方法(Method)表示请求方法,比如"POST","GET",  URL表示请求的资源, Http/version-number 表示HTTP协议的版本号

    当使用的是"GET" 方法的时候, body是为空的。

    方法:

    Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.

    GET和POST的区别:

    (1)GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.  POST方法是把提交的数据放在HTTP包的Body中.

    (2)GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

    (3)GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

    (4)GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

    2.3.2 Response

    状态码:

    1xx 表示通知信息的,如请求收到了或正在进行处理。
    2xx 表示成功,如接受或知道了。
    3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
    4xx 表示客户的差错,如请求中有错误的语法或不能完成。
    5xx 表示服务器的差错,如服务器失效无法完成请求。

    状态码更加详细的信息请参见:

    http://blog.csdn.net/matrix_laboratory/article/details/8649559

    http://blog.csdn.net/matrix_laboratory/article/details/11764239

  • 相关阅读:
    排查oom方法
    逃逸分析-栈上分配
    java堆是分配对象的唯一选择吗
    GC
    jvm为什么把-Xms和-Xmx的值设置成一样
    java堆
    java为何使用native 方法
    linux top命令信息详解
    java定位系统性能问题
    struts 初体验
  • 原文地址:https://www.cnblogs.com/wuyuankun/p/3754646.html
Copyright © 2020-2023  润新知