浏览器 HTTP 请求格式、响应格式

215 阅读4分钟

HTTP请求格式

  • HTTP包

    • HTTP头:必须,告诉对方这个消息是干什么的

      • 可通过浏览器的开发工具或者插件看到

        • 火狐的Firebug,IE的Httpwatch
    • HTTP体:可选,告诉对方怎么干

      • 打开一个网页,右键选择“查看源文件”,看到的HTML代码就是HTTP的消息
  • HTTP 请求

    • 请求行:请求方法URI协议/版本

    • 请求头

HTTP 响应格式

状态代码与状态描述

1xx:指示信息

  • 请求已经接受,继续处理

2xx:成功

  • 200 //客户端请求成功

3xx:重定向

  • 303:重定向,从原url重定向到新的url

4xx:客户端请求有错误或请求无法实现

  • 400 Bad Request

    • 客户端请求有语法错误
  • 401 Unauthorized //请求未经授权

    • 这个状态代码必须和WWW-Authenticate报头域一起使用
  • 403 Forbidden //服务器收到请求,但是拒绝提供服务

    • 一般是服务器路径没有权限或者是其他权限相关问题
  • 404 Not Found //请求资源不存在

    • 输入了错误的URL

5xx:服务器未能实现合法的请求

  • 500 Internal Server Error //服务器发生不可预期的错误

    • 服务器端的源代码出现错误,比如出现死循环
  • 502 Bad Gateway

    • 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应

    • LNMP,php-fpm没有启动

  • 503 Server Unavailable

    • 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    • java 容器部署war的时候,就出现503,或者是nginx处理的文件没有权限

  • 504 Gateway Time-out

    • 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应

    • 比如nginx和php-fpm, php设置sleep(200)

    • 注意:某些代理服务器在DNS查询超时时会返回400或者500错误

响应头信息

Cache头域

  • Date:当前的GMT时间

    • 生成消息的具体时间和日期
  • Expires:浏览器会在指定过期时间内使用本地缓存

    • 指明应该在什么时候认为文档已经过期,从而不再缓存它

    • 强缓存(无http请求,无需协商)

Cookie/Login 头域

  • P3P:用于跨域设置Cookie

    • 可以解决iframe跨域访问cookie的问题
  • Set-Cookie:用于把cookie 发送到客户端浏览器

    • 每一个写入cookie都会生成一个Set-Cookie

Entity 实体头域

  • ETag:和If-None-Match 配合使用

    • 协商缓存(有HTTP请求,需协商)
  • Last-Modified:指示资源的最后修改日期和时间

    • 协商缓存(有HTTP请求,需协商)
  • Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集

与缓存相关的HTTP扩展消息头

Expires

  • 设置页面过期时间,格林威治时间GMT

Cache-Control

  • 更细致的控制缓存的内容

Last-Modified

  • 请求对象最后一次的修改时间

  • 判断缓存是否过期

  • 通常由文件的时间信息产生

ETag

  • 响应中资源的校验值

  • 在服务器上某个时段是唯一标识的

  • 一个可以与Web资源关联的记号(token),和Last-Modified功能差不多

  • 标识符

  • 一般和Last-Modified一起使用,加强服务器判断的准确度

Date

  • 服务器的时间

If-Modified-Since

  • 客户端存取的该资源最后一次修改的时间,用来和服务器端的Last-Modified做比较

If-None-Match

  • 客户端存取的该资源的检验值,同ETag

HTTP协议是无状态的和Connection: keep-alive(时间可设定)的区别

  • 无状态:协议对于事务处理没有记忆能力

    • 服务器不知道客户端是什么状态

    • 打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系