zoukankan      html  css  js  c++  java
  • 【学习笔记】PHP网络技术及应用——HTTP

    1. HTTP协议和SPDY协议

        HTTP是一个应用层协议,由请求响应构成,是一个标准的客户端服务模型。

        HTTP通常承载在TCP协议上(HTTP,默认端口80),有时也承载于TLS或SSL协议层上(HTTPS,端口443)

        HTTP协议的模型就是客户端请求服务端响应,且是一个无状态模型,同一个客户端的前后两次请求没有对应关系。

       【HTTP协议的缺点】1)服务器端不会主动向客户端PUSH 2)一问一答的轮询使TCP连接频繁建立和断开,导致其效率不高

        SPDY协议是由Google提出的,优化了浏览器和服务器之间的通信。

        SPDY协议特性:支持流复用、具备优先级的请求、主动发起请求、强制SSL安全传输

    2.HTTP协议如何工作

     

        【工作流程

      1)客户端与服务器建立连接:单击某个超链接,HTTP协议服务开始

      2)建立连接后,客户机发送一个请求给服务器

      3)服务器接到请求后,给予相应的响应信息

      4)客户端接收服务器返回的信息,并显示在用户的显示屏上,然后客户端和服务器断开链接

        【主要概念】

    1)建立连接

      发起请求前需要先建立连接。

        连接是一个传输层的实际环流,它建立在两个相互通信的应用程序之间。在HTTP1.1协议中,request和response头中都有可能出现一个connection的头,来决定当客户端和服务器通信时对于长链接(数据传输完成后保持TCP连接不断开)如何处理。

        HTTP1.1中默认客户端和服务器都支持长链接。

        客户端不希望使用长链接,则在header中指明connection的值为close。

        服务器不希望使用长链接,则在response中指明connection值为close。

      2)请求

      HTTP请求格式:开始行+可选的报头行+空行+请求正文

      ·开始行——发送方法、资源路径、使用的HTTP版本

          如,GET http://server/phptest/test.html HTTP/1.1

      ·可选的报头行——以“参数:值”的格式出现

      ·请求正文

      3)响应

      HTTP响应格式:开始行+可选的报头行+空行+响应正文

      ·开始行(状态行)——所使用的HTTP版本、状态码

          如,HTTP/1.1 200 OK

          状态码以1开头表示响应为信息型的,2表示请求成功,3表示请求被重定位,4表示客户端错误,5表示服务器端错误

      ·可选的报头行——以“参数:值”的格式出现

      ·响应正文

      4)报头

        HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。

        报头域组成格式:“参数:值”

    ①   普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

    ②   请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

    ③   响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URL所标识的资源进行下一步访问的信息

    ④   实体报头定义了关于实体正文和请求所标识的资源的元信息

    比较重要的几个报头:

    HOST:请求资源的主机和端口号,必须表示请求URL的原始服务器或网关的位置。(HTTP1.1请求必须包括主机头域,否则会以400状态码返回)

    User-Agent:发出请求的用户信息,通常包含浏览者所用的浏览器的名称和版本,以及所用的操作系统

    Accept:告诉服务器可以接收的文件格式

    Cookie:客户端向服务器发送的,用于标记一些信息(可以有多个cookie的value)

    Set-Cookie:服务器端向客户端发送的(只能有一个cookie的value,并需要指明domain、path等)

    HTTP报头参数详解http://blog.csdn.net/wiwipetter/article/details/4559183

    3.PHP中和HTTP相关的函数

    ·  array get_headers(String $url[,int $format]):获取服务器响应一个请求所发送的所有标头

    ·  file系列函数:操作文件夹,请求网络资源

    ·  stream_*系列函数:发送请求,但不限于HTTP协议

    ·  socket系列函数:通过socket发送和请求数据,但不限于HTTP协议

    ·  Curl扩展库:模拟浏览器和服务器进行交互

    ·  header函数:可用于发送原始的HTTP头,注意此函数之前不能有输出和空格等

  • 相关阅读:
    IntelliJ IDEA 如何在同一个窗口创建多个项目--超详细教程
    spring IOC原理
    java工作错误总结
    java跬步积累
    简单易懂设计模式——简单工厂模式
    Argo 项目入驻 CNCF,一文解析 Kubernetes 原生工作流
    电子书下载 | 超实用!阿里售后专家的 K8s 问题排查案例合集
    在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
    SIG Cloud Provider Alibaba 网研会第 2 期顺利召开 | 云原生生态周报 Vol. 46
    提问赠书 | 我们请了 7 位云原生专家,等你来问
  • 原文地址:https://www.cnblogs.com/sssonia/p/6684725.html
Copyright © 2011-2022 走看看