zoukankan      html  css  js  c++  java
  • HTTP协议从入门到大牛,初识HTTP协议(学习笔记)

    HTTP数据传输协议

      当访问一个网页时,浏览器会向服务器发起一条HTTP请求,接着服务器会去寻找相应的资源,如果请求成功,就会把这个对象,对象类型,对象长度以及其他的信息放在HTTP响应中,发送给客户端。

      因为资源种类太多,所以WEB服务器在返回响应时会为HTTP对象附加一条MIME类型(数据类型),当浏览器接收到数据时,会去查看这个MIME类型,然后会根据这个类型去渲染它(前提这个浏览器支持这种类型,否则浏览器会通过其他方式,这个没有一个固定的形式)。

    MIME类型由两部分组成:

      主要类型 / 具体类型

    Image/jpeg

    如:

      人  /  男或女

    HTTP 协议入门:http://www.ruanyifeng.com/blog/2016/08/http.html

    MIME type还可以在尾部使用分号,添加参数。

    Content-Type: text/html; charset=utf-8

    客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。

    Accept: */*

    上面代码中,客户端声明自己可以接受任何格式的数据。

    Content-Encoding 字段

      由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。

    Content-Encoding: gzip

      客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。

    Accept-Encoding: gzip, deflate

    Referer

      表示这个请求是从哪个URL过来的。

      用途1:获取用户是从哪个网站跳转到你主页的。

      用途2:推荐注册应该也是通过这个实现的。(我猜的)

    Cache-Control

      对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。

    由HTTP引发的性能问题

      服务器只有处理完上一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。
      为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。

    统一资源标识符URI

      资源标识符分为两种类型分别是:URL和URN,也就是说URL和URN都是URI的子集。

    URL(统一资源定位符)

      URL详细的说明了某个资源的位置以及如何去访问它。
      URL是URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置。

      URL包括3部分:
        1.访问资源所使用的协议类型 如: http:// 或 https://
        2.服务器地址
        3.服务器上具体的文件路径

    URN(统一资源名)

      用来标识一个实体名字,它并不关心这个资源的具体位置。
      URN是URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源。

      百度云离线下载就是使用的URN:以及这个http://www.xuexila.com/fangfa/1115853.html

      URN可以用来实现磁力链接 http://www.tuicool.com/articles/Z36nauv
      

    URL,URN,URI它们之间的区别:http://web.jobbole.com/83452/


    HTTP请求方法

      方法是用来告诉服务器做什么事情的,状态码则用来告诉客户端,发生了什么事情。

    常见HTTP方法
      GET:从服务器获取资源
      POST:把发送数据到服务器
      PUT:将客户端数据存储到服务器中
      DELETE:从服务器中删除数据
      HEAD:将资源发送到HTTP首部

    状态码

      每条HTTP响应报文返回时都会携带一个状态码,这个状态码由3位数字组成,他告诉客户端请求是否成功,或是否需要采取其他动作,另外它还会附带一条解释性的短语用来描述这个响应结果。

      100 - 199 信息提示
      200 - 299 成功
      300 - 399 重定向
      400 - 499 客户端错误
      500 - 599 服务器错误

    报文

      从客户端发往服务器端的HTTP报文称为请求报文,从服务器端发往客户端的报文称为响应报文。

    HTTP报文包括以下3部分

      起始行:
        在请求报文中说明要干什么,在响应报文中说明出现了什么情况。

      首部字段:
        首部字段可以包含0个或多个,每个字段包含一个名字以及相应的值它们用 :来分割,每个字段为一行。

      主体:
        请求主体包括了要发送给服务器的数据,响应主体装载了要返回给客户端的数据,主体可以是普通的文本也可以是二进制数据,另外请求主体是可选的。

    传输协议TCP/IP
      TCP提供了:无差错的数据传输,数据按发送的顺序到达,可以任意时刻把数据发送出去。

      在HTTP客户端向服务器发送报文之前,需要用网际协议地址和端口号在客户端和服务器之间建立一条TCP/IP连接。

      IP地址和端口号通过URL上获取,如果URL上使用的是主机名形式,那么浏览器会通过DNS来将对应的域名解析成IP地址,如果URL上没有提供端口号,那么默认为80端,数据库默认端口为3306。

    步骤如下:
      1.浏览器从URL中解析出服务器的主机名
      2.将主机名转换成IP地址
      3.将URL中的端口号解析出来,没有的话默认80
      4.建立TCP连接
      5.浏览器向服务器发送一条HTTP请求
      6.服务器响应客户端报文
      7.关闭连接,浏览器解析响应内容。

    HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

      Cookie和Session它们都是为了解决HTTP无状态的问题而所做的努力。

    HTTP报文详解:http://www.iteye.com/topic/1124408

    HTTP协议:http://www.cnblogs.com/xiguain/category/600996.html

  • 相关阅读:
    JAVA-初步认识-常用对象API(集合框架-Map集合-hashmap存储自定义对象)
    JAVA-初步认识-常用对象API(集合框架-Map集合常见子类对象)
    springMVC:org.springframework.web.servlet.PageNotFound.handleHttpRequestMethodNotSupported Request method 'POST' not supported
    Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法
    org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
    struts2在idea中加入json的jar包后,引用无法解析的解决方法
    struts2 切换jar包版本的时候,idea造成jar包重复...导致错误
    struts2没有spring的情况下加了struts2-spring-plugin-2.3.24.1.jar导致错误
    事务配置不对导致:•Could not obtain transaction-synchronized Session for current thread
    idea:ssh整合小例子:读取数据库信息显示到jsp上面
  • 原文地址:https://www.cnblogs.com/pssp/p/5806268.html
Copyright © 2011-2022 走看看