HTTP网络协议浅析
in 其他 - 0 评论

HTTP网络协议浅析

in 其他 with 0 comment

网络协议

  1. HTTP 状态码

    常见的请求头/响应头

    • GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)

    • Accept: /(客户端能接收的资源类型)

    • Accept-Language: en-us(客户端接收的语言类型)

    • Connection: Keep-Alive(维护客户端和服务端的连接关系)

    • Host: localhost:8080(连接的目标主机和端口号)

    • Referer: http://localhost/links.asp(告诉服务器我来自于哪里)

    • User-Agent: Mozilla/4.0(客户端版本号的名字)

    • Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)

    • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)

    • Cookie(客户端暂存服务端的信息)

    • Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)

    • 响应(服务端->客户端[response])

    • HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)

    • Location: http://www.baidu.com(服务端需要客户端访问的页面路径)

    • Server:apache tomcat(服务端的Web服务端名)

    • Content-Encoding: gzip(服务端能够发送压缩编码类型)

    • Content-Length: 80(服务端发送的压缩数据的长度)

    • Content-Language: zh-cn(服务端发送的语言类型)

    • Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)

    • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)

    • Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)

    • Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)

    • Transfer-Encoding: chunked(分块传递数据到客户端)

    • Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)

    • Expires: -1//3种(服务端禁止客户端缓存页面数据)

    • Cache-Control: no-cache(服务端禁止客户端缓存页面数据)

    • Pragma: no-cache(服务端禁止客户端缓存页面数据)

    • Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)

    • Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)

    在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息,解决跨域的一种方法

    常见的状态码

    • 200 :

      请求成功。成功的含义取决于HTTP方法:

      • GET:资源已被提取并在消息正文中传输。
      • HEAD:实体标头位于消息正文中。
      • POST:描述动作结果的资源在消息体中传输。
      • TRACE:消息正文包含服务器收到的请求消息
    • 204 No-Content

      响应无内容,当表明响应成功。 节省流量,适用不需要返回数据的场景

    • 206 partial Content

      客户端表明自己只需要目标URL上的部分资源的时候返回的 | 服务器已经完成了部分用户的GET请求

    • 301

      被请求的资源已永久移动到新位置

    • 302

      要求客户端执行临时重定向

      • 301 和 302 的区别

        对于用户301,302对用户来说没有区别,他们看到效果只是一个跳转,浏览器中旧的URL变成了新的URL。页面跳到了这个新的url指向的地方。

        对于引擎及站长302转向可能会有URL规范化及网址劫持的问题。可能被搜索引擎判为可疑转向,甚至认为是作弊。

      • 使用

          301
          <?php
          header("HTTP/1.1 301 Moved Permanently");
          header("Location: http://www.google.com");
          
          302
          <?php
          header("Location: http://www.google.com");
        
    • 303

      建议客户访问其他URL或访问方式

    • 307

      307 状态码可以确保请求方法和消息主体不会发生变化

    • 400

      错误请求,如语法错误

    • 401

      请求授权失败

    • 403

      请求不允许 , 授权失败

    • 404

      响应目标未找到,请求失败

    • 500

      服务器产生内部错误 , 系统错误

    • 503

      服务器过载或暂停维修

    OSI 七层模型

     应用层 : 网络服务与最终用户的一个接口。 (HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP)
     表示层 : 数据格式的转换,使其和网络数据格式保持同一格式
     会话层 : 建立、管理、终止会话
     传输层 : 定义传输数据的协议端口号,以及流控和差错校验。 (TCP UDP)
     网络层 : 进行逻辑地址寻址,实现不同网络之间的路径选择。(ICMP IGMP IP(IPV4 IPV6) ARP RARP)
     数据链路层 : 建立逻辑连接、进行硬件地址寻址、差错校验 [2]  等功能
     物理层 : 建立、维护、断开物理连接。(比特流 0 1 与电压之间的互换)
    

    HTTP 协议的工作特点和工作原理

    • 工作特点

      • 支持客户/服务器模式。(c/s模式)
      • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得     HTTP服务器的程序规模小,因而通信速度很快。
      • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
      • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
      • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
    • 工作原理

      • https://blog.csdn.net/hudashi/article/details/50788595

    POST 和 GET 请求的区别

    • GET 回退时是无害的,POST会再次提交要求

    • GET 会被浏览器自动cache,而POST需要手动设置

    • GET 明文提交(不安全)且只支持url编码,post支持多种方式编码

    • GET 长度限制 (大多数浏览器限制长度 2K 个字节,而服务器最多处理64 k 的数据)

    • 深入

      GET 在发送数据的时候只产生一个数据包,而 get 会产生两个tcp数据包,post会先发送一个header请求头,服务器端返回一个100 状态码(是一个临时状态码,服务器端已经收到请求,等待客户端再次发送请求,如已经发送,则忽略)。 当在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。 fixbox只发送一次包

    网络协议中常见端口类型及分类

     FTP : 21
     HTTP : 80 
     SMTP : 25
     TELENET: 23
     SNMP : 161
Responses