我爱编程

HTTP最强资料大全

2017-06-04  本文已影响0人  semlinker

B/S 结构定义

浏览器-服务器(Browser/Server)结构,简称B/S结构,与C/S结构不同,其客户端不需要安装专门的软件,只需要浏览器即可,浏览器通过Web服务器数据库进行交互,可以方便的在不同平台下工作;服务器端可采用高性能计算机,并安装OracleSybaseInformix等大型数据库。B/S结构简化了客户端的工作,它是随着Internet技术兴起而产生的,对C/S技术的改进,但该结构下服务器端的工作较重,对服务器的性能要求更高。—— 维基百科

browser-and-server

URI (统一资源标志符)

电脑术语中,统一资源标识符(英语:Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。URI的最常见的形式是统一资源定位符(URL),经常指定为非正式的网址。更罕见的用法是统一资源名称(URN),其目的是通过提供一种途径。用于在特定的命名空间资源的标识,以补充网址。—— 维基百科

URI 文法

URI文法由URI协议名(例如“http”,“ftp”,“mailto”或“file”),一个冒号,和协议对应的内容所构成。特定的协议定义了协议内容的语法和语义,而所有的协议都必须遵循一定的URI文法通用规则,亦即为某些专门目的保留部分特殊字符。—— 维基百科

下面展示了 URI 例子及它们的组成部分:

                       权限                 路径
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
  协议        用户信息         主机名    端口                  查询参数          片段

MIME

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义文件名,以及一些媒体文件打开方式。 —— 百度百科

文件格式

每个 MIME 类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。

常见的 MIME 类型有:

资源名称 后缀 类型
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
普通文本 .txt text/plain
PNG图像 .png image/png
PDF文档 .pdf application/pdf

了解更多的 MIME 类型 - 互联网媒体类型

HTTP 协议

超文本传输协议英文HyperText Transfer Protocol缩写HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。—— 维基百科

HTTP 协议是基于请求与响应,具体如下图所示:

request-and-response

HTTP 协议主要特点

HTTP 请求报文

HTTP 请求报文由请求行请求头空行请求体(请求数据) 4 个部分组成,如下图所示:

http-request-message

请求报文示例

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4
Cookie: PSTM=1490844191; BIDUPSID=2145FF54639208435F60E1E165379255; BAIDUID=CFA344942EE2E0EE081D8B13B5C847F9:FG=1;

请求行

请求行由请求方法、URL 和 HTTP 协议版本组成,它们之间用空格分开。

GET / HTTP/1.1

请求头

请求头由 key-value 对组成,每行一对,key (键) 和 value (值)用英文冒号 : 分隔。请求头通知服务器有关于客户端请求的信息,典型的请求头有:

空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

请求体

请求数据不在 GET 方法中使用,而是在 POST 方法中使用。与请求数据相关的最常使用的请求头是 Content-Type和 Content-Length。

HTTP 响应报文

HTTP响应报文由状态行、响应头、空行和响应体4 个部分组成,如下图所示:

http-response-message

响应报文示例

HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 30 Mar 2017 12:28:00 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: private
Expires: Thu, 30 Mar 2017 12:27:43 GMT
Set-Cookie: BDSVRTM=0; path=/

状态行

状态行格式: HTTP-Version Status-Code Reason-Phrase CRLF

响应头

响应头由 key-value 对组成,每行一对,key (键) 和 value (值)用英文冒号 : 分隔。响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息,典型的响应头有:

空行

最后一个响应头之后是一个空行,发送回车符和换行符,通知浏览器以下不再有响应头。

响应体

服务器返回给浏览器的响应信息,下面是百度首页的响应体片段:

<!DOCTYPE html>
<!--STATUS OK-->
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu.svg">
    <title>百度一下,你就知道</title>
</head>
<body>
  ...
</body>
</html>

HTTP Methods

HTTP 协议的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT、PATCH、HEAD

HTTP 常用的请求方法:

HTTP Status Code

状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

常见状态代码、状态描述的说明如下:

HTTP Cookie & Session

HTTP Cache(缓存)

HTTP CORS (跨域资源共享)

HTTPS

HTTP/2

HTTP 安全

HTTP 面试

HTTP 爬虫文章

Resources

Node.js

Java

PHP

Python

HTTP 资源

文章

视频

HTTP 抓包工具及教程

工具

教程

Chrome HTTP 插件

HTTP 平台资源库

Browser

Node.js

Java

Android

Python

若只使用python3.X, 下面可以不看了, 记住有个urllib的库就行了

python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httplib2, requests

python3.X 有这些库名可用: urllib, urllib3, httplib2, requests

两者都有的urllib3和requests, 它们不是标准库. urllib3 提供线程安全连接池和文件post支持,与urllib及urllib2的关系不大. requests 自称HTTP for Humans, 使用更简洁方便。

详细信息请参考 - 开源中国 - python中 urllib, urllib2, httplib, httplib2 几个库的区别

HTTP 压力测试

工具

教程

HTTP 代理服务器

产品

文章

HTTP 图书

参考资源

上一篇下一篇

猜你喜欢

热点阅读