zoukankan      html  css  js  c++  java
  • http详解

    http

    http是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息, 客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

    HTTP三点注意事项

    • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
    • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    http交互流程

    1. 建立TCP链接
    2. 发出请求文档
    3. 发出响应文档
    4. 释放TCP链接

    建立TCP链接

    tcp(传输控制协议)是一种面向链接的、可靠的、基于字节流的传输层通信协议。TCP建立需要三次握手,释放需要4次挥手

    什么是三次握手

    所谓三次握手是指:建立tcp链接时,需要client与server发送三个包,确认链接的建立,这一过程由lcient执行connect触发

    第一次握手

    client将SYN设置为1,seq=随机值j,将数据包发送给server,进入SYN_SEND状态,等待server确认
    

    第二次握手

    server收到数据包由标志位SYN=1知道,是请求建立链接,将ACK设置为1,ack=j+1,作为响应client的请求,将SYN设置为1,seq=随机值k,发送给client确认,erver进入SYN_RECV状态,因为是建立链接这些数据在一个包中。
    

    第三次握手

    client收到响应,检查ACK=1?,ack=j+1?,若都符合,将ACK设置为1,ack=k+1,发送给server,client进入establish状态,server收到响应,检查ACK=1?,ack=k+1?若都符合进入establish状态,三次握手完成,TCP建立链接,开始通信。
    

    四次挥手

    即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发

    由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭

    第一次挥手

    client发送一个FIN,用来关闭client到server的数据传送,cliient进入FIN_WAIT_1状态
    

    第二次挥手

    server收到FIN后,发送一个ack给client,确认序列号为收到序列号+1(与SYN相同,一个FIN占用一个序号),server进入CLOSE_WAIT状态
    

    第三次挥手

    server发送一个FIN,用来关闭server到client的数据传送,server进入LAST_ACK状态
    

    第四次挥手

    client收到FIN后,client进入TIME_WAIT状态,接着发送一个ack给server,确认序列号为收到序列号+1,server进入CLOSED状态,完成四次挥手
    

    请求报文

    一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成

    请求行

    由请求方法字段、URL字段、协议版本字段三部分构成,它们之间由空格隔开。常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

    请求头

    请求头由key/value对组成,每行为一对,key和value之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。

    典型的请求头有:

    • User-Agent:生成请求的浏览器类型
    • Accept:客户端可识别的响应内容类型列表;星号用于按范围将类型分组。/表示可接受全部类型,type/表示可接受type类型的所有子类型。
    • Accept-Language:客户端可接受的自然语言
    • Accept-Encoding:客户端可接受的编码压缩格式
    • Accept-Charset:可接受的字符集
    • Host:请求的主机名,允许多个域名绑定统一个ip地址
    • connection:链接方式
    • Cookie:存储在客户端的扩展字段

    空行

    最后一个请求头之后就是空行,用于告诉服务端以下内容不再是请求头的内容了。

    请求内容

    请求内容主要用于POST请求,与POST请求方法配套的请求头一般有Content-Type(标识请求内容的类型)和Content-Length(标识请求内容的长度)

    响应报文

    HTTP响应报文由状态行、响应头、空行和响应内容4个部分构成。

    状态行

    由HTTP协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。

    响应头

    一般情况下,响应头会包含以下,甚至更多的信息。

    • Location:服务器返回给客户端,用于重定向到新的位置
    • Server:包含服务端用来处理请求的软件信息及版本信息
    • Vary:标示不可缓存的请求列表
    • Connection:链接方式
      对于请求端来讲:close是告诉服务端,断开连接,不用等待后续的求请了。keeplive则是告诉服务端,在完成本次请求的响应后,保持连接,等待本次连接后的后续请求。

    对于响应端来讲:close表示连接已经关闭。keeplive则表示连接保持中,可以继续处理后续请求。Keep-Alive表示如果请求端保持连接,则该请求头部信息表明期望服务端保持连接多长时间(秒),例如300秒,应该这样写Keep-Alive: 300

    空行
    最后一个响应头之后就是空行,用于告诉请求端以下内容不再是响应头的内容了。

    响应内容

    服务端返回给请求端的文本信息。

    HTTP请求方式

    • GET: 向特定的资源发出请求。
    • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
    • PUT:向指定资源位置上传其最新内容。
    • HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
    • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
    • DELETE:请求服务器删除 Request-URI 所标识的资源。
    • TRACE:回显服务器收到的请求,主要是用于测试或者诊断
    • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
    • PATCH:是对 PUT 方法的补充,用来对已知资源进行局部更新 。

    HTTP状态码

    • 200:请求成功
    • 201:以创建,成功请求并创建了新的资源
    • 203:非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
    • 204:无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
    • 301:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
    • 302:临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
    • 307:临时重定向。与302类似。使用GET请求重定向
    • 400:客户端请求的语法错误,服务器无法理解(给服务端传的参数和服务端指定接收的字段不同)
    • 403:服务器理解请求客户端的请求,但是拒绝执行此请求
    • 404:服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面(找不到路径)
    • 405:客户端请求中的方法被禁止(请求方法不对,比如服务端设置get请求,客户端使用post请求)
    • 500:服务器内部错误,无法完成请求

    URL 和 URI的区别

    URL:统一资源定位符

    是Internet上资源的地址,可以定义为引用地址的字符串,用于指示资源的位置以及用于访问它的协议。

    URI:统一资源标识符

    是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符。通过使用位置,名称或两者来标识Internet上的资源;它允许统一识别资源。

  • 相关阅读:
    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果(转)
    javascript中call、apply、argument、callee、caller
    Google Analytics10条有用教程(转)
    小问题
    MySQL exists的用法介绍
    warning C4005: “AF_IPX”: 宏重定义的解决办法
    /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
    _mkdir
    文件读写操作总结
    Distinct
  • 原文地址:https://www.cnblogs.com/mengxiangji/p/11186344.html
Copyright © 2011-2022 走看看