ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HTTP详解

2020-07-04 11:35:53  阅读:1042  来源: 互联网

标签:baidu HTTP 请求 详解 服务器 com 客户端


HTTP详解

零、预备知识

URI

  • 统一资源标识符(Uniform Resource Identifier,URI)
  • 是一个用于标识某一互联网资源名称的字符串
  • 分为URL和URI

URL(通常用来作为网址)

  • (Uniform Resource Locator,统一资源定位符)
  • 每一信息资源都有统一的且在网上唯一的地址,即你可以通过它确定一个 [唯一的] 地址(网址)

URN

  • 统一资源名(URN,Uniform Resource Name)
  • 通过它可以确定一个 [唯一的] 资源

举例

一个URL http://www.baidu.com/s?wd=hello%rsv_spt=1#5

  • 这个网址可以拆成以下几个部分
    • http:// :协议
    • www.baidu.com:域名,其中.com是顶级域名(一级),baidu是二级域名,www是三级域名,所以baidu.com 和 它不是同一个域名,但它们共有二级域名
    • /s:路径
    • ?wd=hello&rsv_spt=1:查询参数
    • 5:锚点

DNS

  • (Domain Name System) 域名系统(服务)协议
  • 用户输入域名, 路由帮你去问通讯公司, 通讯公司(如电信)再告诉你IP
  • 即DNS作用就是,输入域名 输出IP

一、简介

  HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。(超文本是啥?超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用以显示文本及与文本之间相关的内容。)

  HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。(TCP/IP是啥?传输控制/网络协议;TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、FMTP、TCP、UDP、IP等协议构成的协议簇)

二、HTTP协议的作用

HTTP是一个客户端和服务器端请求和应答的标准(TCP)

  • 客户端是终端用户,服务器端是网站;

  • 通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent);

  • 应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server);

  • 在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels);

  • 尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。

HTTP和HTTPS的区别

  • HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密
  • 在数据进行传输之前,对数据进行加密,然后再发送到服务器
  • 这样,就算数据被第三者所截获,但是由于数据是加密的,所以你的个人信息让然是安全的

三、HTTP与Server交互

1) 步骤

  http的作用就是直到浏览器和服务器如何进行沟通(毕竟是协议嘛)

  • HTTP客户端(浏览器)负责发起请求,建立一个到服务器指定端口(默认是80端口) 的TCP连接
  • 服务器在80端口接受请求
  • 一旦收到请求,服务器负责返回内容(响应)
  • 浏览器负责下载响应内容

2) 请求

a. 请求示例

  • 输入 curl -s -v -H "Try: xxx" -- "https://www.baidu.com"

(在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具,会得到请求和响应的格式及内容)> GET / HTTP/1.1

> GET / HTTP/1.1
请求方式 资源路径 协议/版本
> Host: www.baidu.com
要访问的域名(请求的服务器主机名)
> User-Agent: curl/7.65.3
访问的软件(发起请求的工具)
> Accept: */*
接收内容(这里是接收发过来的任何内容)
> Try: xxx
请求内容
>
  • 输入 curl -X POST -s -v -H "Try: xxx" -- "https://www.baidu.com"
    • 这里只是将请求方式改成了POST
> POST / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.65.3
> Accept: */*
> Try: xxx
>
  • 输入 curl -X POST -d "1234567890" -s -v -H "Try: xxx" -- "https://www.baidu.com"
    • 多了一个参数 -d
> POST / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.65.3
> Accept: */*
> Try: xxx
> Content-Length: 10
请求体的长度
> Content-Type: application/x-www-form-urlencoded
请求的与实体对应的MIME信息。如果是post请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码
>

b. 请求格式

  • 请求行
    • 请求方式 资源路径 协议/版本
  • 请求头
    • 一堆的key: value
    • Content-Type Content-Length

img

  • 请求体--要上传的内容

  • 请求最多包含四部分,最少包含三部分(第四部分可以为空)

  • 第三部分是一个回车

  • 请求方式

    • GET:向特定的资源发出请求
    • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改
    • PUT:向指定资源位置上传其最新内容(整体更新)
    • PATCH:向指定资源位置上传其最新内容(局部更新)
    • DELETE:删除某个资源
    • HEAD:和GET方法类似,不过进要求服务器返回头部信息, 不需要传输任何实际内容
    • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性
    • TRACE:回显服务器收到的请求,主要用于测试或诊断
  • 这里的路径包括[查询参数], 但不包括[锚点]

  • 没写路径的话就默认为 /

  • 第二部分中的Comtent-Type标注了第四部分的格式

3) 响应

a. 响应示例

  • 输入 curl -s -v -H "Try: xxx" -- "https://www.baidu.com"
< HTTP/1.1 200 OK
协议/版本 状态码 状态描述
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2443
响应长度
< Content-Type: text/html
响应格式
< Date: Fri, 03 Jul 2020 09:23:44 GMT
< Etag: "58860402-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<

  • 输入 curl -X POST -d "1234567890" -s -v -H "Try: xxx" -- "https://www.baidu.com"
< HTTP/1.1 302 Found
< Connection: keep-alive
< Content-Length: 17931
< Content-Type: text/html
< Date: Fri, 03 Jul 2020 09:20:12 GMT
< Etag: "54d9748e-460b"
< Server: bfe/1.0.8.18
<

b. 状态码

  • 1xx:指示信息,表示请求已接收,继续处理

  • 2xx:成功,表示请求已被成功接受,处理。

    • 200 OK:客户端请求(GET)成功

    • 201 Created: 常用于POST,PUT 请求,表明请求已经成功,并新建了一个资源。并在响应体中返回路径

    • 202 Accepted: 请求已经接收到,但没有响应,稍后也不会返回一个异步请求结果。 该状态码适用于等待其他进程处理或者批处理的场景

    • 203 No-Authoritative Information: 表明响应返回的元信息(meta-infomation)和最初的服务器不同,而是从本地或者第三方获取的。

      主要用于其他资源的镜像和备份。除了前面的情况,首选还是200。

    • 204 No Content:无内容。服务器成功处理(POST),但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面

    • 205 Reset Content: 告诉用户代理(浏览器)重置发送该请求的文档

    • 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容

  • 3xx:重定向(失败)

    • 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
    • 302 Found:临时重定向,表示请求的资源临时搬到了其他位置
    • 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
    • 307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
    • 304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。304状态码或许不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应, 即这次请求和之前缓存的
  • 4xx:客户端错误(失败, 访问者出错)

    • 400 Bad Request:客户端请求有语法错误,服务器无法理解。
    • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
    • 403 Forbidden:服务器收到请求,但是拒绝提供服务
    • 404 Not Found:请求资源不存在, URL无效或者URL有效但是没有资源。比如,输入了错误的url
    • 406 Not Acceptable: 资源类型不符合服务器要求
    • 407 Proxy Authorization Required: 需要代理授权
    • 415 Unsupported media type:不支持的媒体类型
    • 426 Upgrade Required: 告诉客户端需要升级通信协议。
  • 5xx:服务器端错误,服务器未能实现合法的请求

    • 500 Internal Server Error:服务器发生不可预期的错误
    • 502 Bad Gateway: 服务器作为网关使用时,收到上游服务器返回的无效响应
    • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    • 504 Gateway Timeout: 网关超时。服务器作为网关或者代理,不能及时从上游服务器获取响应返回给客户端
    • 505 Http Version Not Supported: 发出的请求http版本服务器不支持。如果请求通过http2发送,服务器不支持http2.0,就会返回该状态码

标签:baidu,HTTP,请求,详解,服务器,com,客户端
来源: https://www.cnblogs.com/TRY0929/p/13234323.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有