zoukankan      html  css  js  c++  java
  • HTTP 协议

    HTTP 协议对应 Web 开发者来说都必须要了解的,无论技术背景或首选编程语言是什么,"请求-响应" 对话是驱动 Web 上通信的基础。

    HTTP 概述

    HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写。通常,由 HTTP 客户端发起一个请求,创建一个到服务器指定端口(默认是 80 端口)的 TCP 连接。HTTP 服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如 "HTTP/1.1 200 OK" ,以及返回的内容,如请求的文件、错误消息、或者其它信息。

    平时我们在浏览器上输入网址,按回车就能浏览网页内容。这过程中主要分为两个部分 “请求” (浏览器向服务器发送的消息) 和 “响应” (服务器将处理结果返回给浏览器)。

    HTTP 请求

    HTTP 请求分为四格部分:请求行, 请求头, 空行, 请求主体,下面直接给出一个示例:

    GET /hello.txt HTTP/1.1
    Host: www.example.com
    

    上示例中第一行为请求行,第二行为请求头,末尾有一个空行(即空行,必须要有)。

    • 请求行包含:请求方法, 请求资源, 协议版本
      常见的请求方法有 GET POST HEAD
      协议版本有 0.9, HTTP/1.0, HTTP/1.1

    • 在 HTTP/1.1协议中,所有的请求头,除 Host 外,都是可选的。点击 HTTP头字段 了解更多头字段。下面给出常用的请求头:

    host:请求的域名,必须要有
    accept-encoding:可以接受的编码类型(不是字符编码,指的是文件格式)
    connection:连接方式,1.0版本close,1.1版本keep-alive
    accept-language:可以接收的语言类型
    cookie:之前由服务器通过 Set-Cookie 发送的一个超文本传输协议 Cookie
    user-agent:客户端信息
    content-length:表示的请求体的长度,单位是字节
    

    HTTP 响应

    HTTP 响应分为四个部分:状态行, 响应头, 空行, 消息体(响应内容) 示例:

    HTTP/1.1 200 OK
    Date: Mon, 27 Jul 2009 12:28:53 GMT
    Server: Apache
    Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
    ETag: "34aa387-d-1568eb00"
    Accept-Ranges: bytes
    Content-Length: 51
    Vary: Accept-Encoding
    Content-Type: text/plain
    
    Hello World! My payload includes a trailing CRLF.
    

    上示例中第一行为状态行,第二行至第九行处为响应头,第十行为空行,最后一行为消息体。

    • 状态行包含:协议版本, 状态码, 状态描述。其中有关状态码更多的介绍可移步阅读 HTTP状态码

    • 响应头更多信息可点击上文中的 “HTTP头字段” 链接查看。下面给出常见的响应头:

    server:服务器信息
    date:服务器响应的时间
    last-modified:当前请求文件最后被修改的时间
    content-length:响应体的数据长度,单位是字节
    content-type:响应体的类型
    location:重定向
    cache-control:缓存控制
    

    其中一个重要的 HTTP 响应头 Content-Type 服务器上的每个资源都可以以不同的格式返回给客户端,如 HTML、XML 或 JSON 等;通过在 Content-Type 里设置如 text/html 这样的互联网媒体类型,可以告知客户端,服务器给出的响应格式是什么。常用的媒体类型可移步阅读 互联网媒体类型

    拓展知识

    HTTP 长连接说明,还有文中提到的“TCPIP三次握手连接”
    其中还有长轮询、服务器发送事件、WebSocket等知识点都与 HTTP 相关,在这就不拓展开了,读者可自行谷歌

    相关阅读

    作者:avilang
    个人博客:avilang.me
    GitHub:avilang

    转载文章,请标明出处。
  • 相关阅读:
    Threejs学习 一
    Mapbox的表达式
    mapbox 不加载地图
    SQL Server将查询出数据进行列转行操作
    SQL Server 常用近百条SQL语句(收藏版)
    SQL Server DATEDIFF() 函数用法
    SQL Server 数据库开启日志CDC记录,导致SQL Server 数据库日志异常增大
    查询SQL Server数据库使用的版本号信息
    windows 无法启动 SQL Server (MSSQLSERVER) 服务(位于本地计算机上)。错误 1069由于登入失败而无法启动 。
    SQL Server 不同数据间建立链接服务器进行连接查询
  • 原文地址:https://www.cnblogs.com/avilang/p/6741773.html
Copyright © 2011-2022 走看看