码迷,mamicode.com
首页 > Web开发 > 详细

http

时间:2015-08-06 09:26:03      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

http

http

套接字

  1. socket: (IP + port) 客户端的为随机端口
    IP:port
    IP.port
  2. unix sock: 基于文件系统通信实现, 主要用于本机和本机之间的通信

套接字的类型:

  • TCP 套接字
  • UDP 套接字
  • raw 套接字 (由程序自身维护, 不经过传输层, 直接到网络层)

通信方式:

  1. 点对点
  2. c/s (client/server)
    c/s:
    通信子网: 通用传输
    应用层协议: 不通用, 特定的 (http, https, smtp, pop, imap, ftp, ldap)

http 协议的版本:

http0.9: 只能传输 html 文档, 1991 年
http1.0: 支持多媒体数据的处理, 保持连接, 有缓存功能
http1.1: 支持更多的请求方法, 更加精细的缓存控制, 持久连接

MIME: Multipurpose Internet Mail Extension 互联网多用户邮件扩展
base64: 将二进制数据编码成文本发送, 并能够让接受方还原回原来的格式

HTTP 报文:

  • HTTP 方法: GET、PUT、HEAD、POST、DELETE
  • HTTP 请求: request
    报文格式:
    <method><request-url><version>
    <headers>
    <entity-body>
    

    首部:

    name: value
    content-type: images/gif
    
  • HTTP 响应: response
    报文格式:
    <bersion><status><reason-phrase>
    <headers>
    <entity-body>
    

    <method>: 请求方法, 希望服务器端执行的动作, 如 GET, HEAD, POST 等
    <request-url>: 请求的资源, 可以是相对路径, 也可以是完整的 URL
    <version>: 协议版本, 格式 HTTP/<major>, <minor>, 如 http/1.0
    <headers>: HTTP 首部
    <status>: 状态码
    <reason-phrase>: 成功或者错误 的原因短语, 数字状态码易读信息
    <entity-body>: 主体部分

    http 协议: 是一种 stateless(无状态)协议
    一次 HTTP 事务结束后, 链接即行断开

    加速方式:
    并行请求
    持久连接

    HTTP 的请求方法:
    安全的方法: GET, HEAD
    POST, PUT, DELETE, OPTIONS, TRACE
    扩展方法: LOCK、MKCOL、COPY、MOVE

    GET: 请求获取一个资源, 需要服务器发送
    HEAD: 跟 GET 相似, 但其不需要服务发送资源而仅传回响应首部
    POST: 支持 HTML 表单提交, 表单中有用户填入的数据, 这些数据会发送到服务器端, 由服务器存储至某位置(例如发送处理程序)
    PUT: 与 GET 相反, 向服务写入文档;发布系统
    DELETE: 请求删除 URL 指向的资源
    OPTIONS: 探测服务器端对某资源所支持的请求方法
    TRACE: 追踪请求资源要经过的防火墙、代理或网关等

  • 响应报文代码
    1. 1XX: 信息性状态码
      100: 继续
    2. 2XX: 成功状态码
      200: OK
      201: Created OK
    3. 3XX: 重定向状态码
      301: Moved Permanebtly 永久重定向, 在响应报文中使用首部 "Location: URL" 指定资源现在所在的位置
      302: Found 临时重定向, 在响应报文中使用首部 "Location: URL" 指定临时资源位置
      304: Not Modified, 条件式请求中使用, 缓存
    4. 4XX: 客户端的错误
      403: Forbidden,请求被服务器拒绝
      404: Not Found, 服务器无法找到请求的 URL
      405: Method Not Allowed,不允许使用此方法请求响应的 URL
    5. 5XX: 服务器类的错误
      500: Internal Server Error, 服务器内部错误
      502: Bad Gateway: 代理服务器从上游收到一条伪响应
      503: Service Unavailable, 服务器此时无法提供服务, 但将来可能可用

一个 Web 请求的基本过程

建立连接
接收请求
处理请求
访问资源
构建响应
发送响应
记录日志

单线程 I/O 结构
多线程 I/O 结构
复用的 I/O 结构 (一个进程响应多个请求, 不安全)
复用多线程 I/O 结构: 多个线程, 每个线程响应多个请求

普通的请求过程

  1. 外部请求 –> 内核空间 –> 服务器(应用程序): 请求
  2. 服务器(应用程序) –> 内核空间: 加载所需的资源
  3. 内核空间 –> 应用程序 (应用程序包装响应报文)
  4. 应用程序 –> 发送相应报文

sendfile:
普通的请求过程的 第 3 个步骤, 内核不到应用程序, 内核直接发送响应报文

日志写入缓冲: (堆一坨再写)

http

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4706357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!