이 기사는 인터페이스 자동화 테스트에 필요한 기반으로 http 프로토콜과 관련된 문제를 주로 소개하는 python에 대한 관련 지식을 제공합니다. 모두에게 도움이 되기를 바랍니다.
추천 학습: python 동영상 튜토리얼
HTTP 프로토콜을 사람으로 비교해 본다면, 이 사람을 깊이 이해하고 싶다면 반드시 먼저 상대방의 성격을 이해하게 될 것입니다. 특성은 기다립니다. 그렇다면 HTTP 프로토콜의 특징은 무엇입니까? 일반적으로 다음과 같은 기능이 있습니다.
- 1. 첫 번째 기능: HTTP 프로토콜은
TCP 및 IP 프로토콜의 구성원이므로 <code>클라이언트/서버 모드를 지원합니다. 제품군 다른 멤버와 마찬가지로
클라이언트/서버 모드
가 작동하는 방식은 클라이언트가 서버에 요청을 보내는 방식으로 클라이언트와 서버 간의 통신에 사용됩니다. 서버 응답 요청하고 응답하는 서비스입니다. 모든HTTP 요청
은 클라이언트로부터 통신을 설정하며, 서버는 클라이언트 요청을 받기 전에 응답을 보내지 않습니다. 이는의 특징 중 하나입니다. HTTP 프로토콜
.HTTP协议支持 客户/服务端 模式
;因为 HTTP 协议 是TCP、IP 协议簇的一员,与其他成员一样
,用于客户端与服务器之间的通信;而客户/服务器模式
的工作方式是由客户端向服务器发出请求,服务器端响应请求,并进行响应的服务;所有的HTTP请求
都是从客户端开始建立通信,服务器端在没有接收到任何的客户端请求之前是不会发出响应的;这就是 HTTP协议 的特点之一
。
- 2、第二个特点:
简单快速
;客户端向服务器请求服务的时候,只需要传入请求的方法和路径;常用的请求方法有GET、HEAD、POST
(除了这三种之外,还有其他不那么常用的方法,有兴趣的小伙伴可以在 HTTP协议状态及报文组成 一文进行拓展);由于 HTTP协议 简单,使得 HTTP服务器的程序规模小,因而通信速度很快。
- 3、第三个特点:
灵活
;之所以灵活是因为 HTTP 允许传输任意类型的数据对象;传输的类型由Content-Type
加以标记内容类型,支持多种内容格式的传输。(兼容性很强)
- 4、第四个特点:无连接;这里的无连接可不是没有连接的意思,而是限制每个连接只处理一个请求。服务器处理完客户端的请求并收到客户端的应答之后,就断开连接。采用如此的设计方式呢,能够节省传输时间。
- 拓展:可能有同学认为一个页面有很多个 HTTP 请求,来回这样连接、断开会效率很低。其实早期这么做的原因是因为产生于互联网,因此服务器需要处理同时面向全世界 数十万、上百万 的网页访问。但是每个客户端(或者说浏览器)与服务器之间交换数据的间歇性特别大,所以 HTTP 的传输是具备突发性与顺时性的,大部分通道实际上会很空闲,无端的占用资源比较浪费。因此呢, HTTP 的设计者有意使用这样的特点将协议设计为
请求的时候建立连接,请求完就释放连接。
尽快的将资源释放出来服务给其他的客户端,无论怎样,对于同一个客户端来说,还是每一次只处理一个请求,所以我们也能看出来 HTTP 协议的另外一个优点,它很专一。(*^▽^*)
- 5、最后一个特点:无状态; 无状态的意思就是说
HTTP协议对于事务的处理没有记忆能力
;缺少状态就意味着如果后续处理需要前面的信息,则必须要重传,这就很可能会导致每次连接传送的数据量增大。另一方面,在服务器不需要先前的信息时它的响应就比较快。
PS:所以 HTTP 的这些特性是既有优点也有缺点。
- 优点:优点在于解放服务器,每一次请求点到为止不会造成不必要的连接占用。
- 缺点:缺点在于每一次请求都会传输大量的重复内容信息。
- 所以保持 HTTP 连接的两种技术就应运而生了,那就是
cookie
与session
。
现在我们知道 HTTP协议 是一种请求与响应的模式,那么就来一起认识一下 HTTP的请求和响应吧,先从 HTTP协议的请求说起。
请求
是发送给接口的数据对象,包括接口的地址(也就是常说的 URL
🎜2. 두 번째 기능:
간단하고 빠릅니다
. 클라이언트가 서버에 서비스를 요청할 때 일반적으로 사용되는 요청 방법과 경로만 전달하면 됩니다. GET, HEAD, POST
입니다(이 세 가지 외에도 일반적으로 사용되지 않는 다른 방법이 있습니다. 관심 있는 친구는 HTTP 프로토콜 상태 및 메시지 구성 기사를 확장할 수 있습니다). HTTP 서버의 프로그램 크기를 작게 만들어 통신 속도가 매우 빠릅니다. 🎜🎜🎜3. 세 번째 기능: 유연함
; HTTP가 유연한 이유는 전송 유형이 결정되어 있기 때문입니다. by Content-Type
은 콘텐츠 유형을 표시하고 다양한 콘텐츠 형식의 전송을 지원합니다. (강력한 호환성) 🎜🎜🎜4. 네 번째 기능: 연결 없음은 연결이 없다는 의미가 아니라 각 연결이 하나의 요청만 처리하도록 제한합니다. 서버는 클라이언트의 요청을 처리하고 클라이언트의 응답을 받은 후 연결을 끊습니다. 이러한 설계 방법을 채택하면 전송 시간을 절약할 수 있습니다. 🎜🎜확장: 어떤 학생들은 한 페이지에 HTTP 요청이 많아서 이렇게 왔다 갔다 연결하고 끊는 것이 매우 비효율적이라고 생각할 수도 있습니다. 사실 초기에 이렇게 한 이유는 인터넷에서 시작되었기 때문에 서버가 전 세계에서 동시에 수십만, 수백만 건의 웹페이지 방문을 처리해야 했기 때문입니다. 그러나 각 클라이언트(또는 브라우저)와 서버 간의 데이터 교환은 매우 간헐적이므로 HTTP 전송이 급증하고 시기적절합니다. 대부분의 채널은 실제로 아무런 이유 없이 유휴 상태가 되며 리소스가 상대적으로 낭비됩니다. 따라서 HTTP 설계자는 의도적으로 이 기능을 사용하여 가 요청되면 연결을 설정하고 요청이 완료된 후 연결을 해제하는 프로토콜을 설계했습니다.
가능한 한 빨리 다른 클라이언트에 서비스를 제공하기 위해 리소스를 해제합니다. 어쨌든 동일한 클라이언트에 대해 한 번에 하나의 요청만 처리되므로 HTTP 프로토콜의 또 다른 장점도 볼 수 있습니다. 입니다. 매우 구체적입니다. (*^▽^*)
🎜🎜🎜5. 마지막 기능: 무상태(stateless)는 HTTP 프로토콜을 의미합니다. 트랜잭션 처리
; 상태가 부족하다는 것은 후속 처리에 이전 정보가 필요한 경우 이를 재전송해야 하므로 연결당 전송되는 데이터 양이 늘어날 수 있음을 의미합니다. 반면에 서버는 이전 정보가 필요하지 않을 때 더 빠르게 응답합니다. 🎜🎜PS: 따라서 이러한 HTTP 기능에는 장점과 단점이 모두 있습니다. 🎜🎜🎜장점: 서버를 해방시키는 장점이 있으며, 각 요청 지점이 불필요한 연결 점유를 유발하지 않습니다. 🎜단점: 각 요청이 대량의 중복 콘텐츠 정보를 전송한다는 단점이 있습니다. 🎜그래서 HTTP 연결을 유지하는 두 가지 기술, 즉 쿠키
와 세션
이 탄생했습니다. 🎜 HTTP 요청 및 응답🎜🎜이제 HTTP 프로토콜이 요청 및 응답 모드라는 것을 알았으니 HTTP부터 시작해서 HTTP 요청 및 응답을 함께 알아봅시다. 동의 요청과 함께. 🎜요청
은 인터페이스 주소(URL
라고도 함), 요청된 인터페이스 주소를 포함하여 인터페이스로 전송되는 데이터 개체입니다. 메소드(get, post...), 매개변수, 요청 헤더(Headers), 쿠키, 데이터 등... 아래 그림을 참조하세요. 🎜🎜🎜🎜🎜위 사진의 메시지 내용은 HTTP 프로토콜의 일반적인 게시물이자 요청 메시지입니다(GET 요청 메시지의 요청 본문을 무시하고 제가 구성한 것입니다
). >.) :忽略get请求报文的请求体,那是我瞎编的
。):
1、第一行就是请求行,包含有请求方法、请求URI、HTTP协议及版本(与第二行的 host属性 相结合形成了完整的 请求URL )
2、中间的部分就是报文头,包含有若干个属性;格式就是图中的
属性名:属性值
这样的格式。服务端根据报文头来获取客户端的信息。3、最下面的部分就是报文体,报文体与报文头之间必须有一个空行。在类似图中这样一个
post 请求
里面将页面表单里的组件值通过name=admin&passwd=123456
这样类似的键值对的格式编码形成这样的格式化串,承载多个请求参数的数据。(不仅仅是报文体可以传输数据,请求的 URL 在get 请求方法
的时候也是支持传递参数的。)
在这里可以看出主要的信息是通过请求的方法、url、与报文的主体来进行传递的。这也是 HTTP 的特征之一,简单快速,同时也会发现报文头里也包含有很多种信息,这些做一个了解即可。参考 HTTP协议状态及报文组成 文末的请求头报文。
熟悉了 HTTP 的请求,再来看一下响应。见下图:
可以从响应报文的样式看出,与请求的报文比较相像,他也分为三个部分:请求行对应响应行、请求头对应响应头、请求体对应着响应体。
- 1、响应行分为两部分:报文协议版本及响应状态码。
- 2、响应头也分为服务器类型、相应数据类型响应时间等多个参数。
- 3、响应体就是我们真正想要的干货,就是请求的最终返回内容。主要针对这个内容进行解析,比如说请求的是一个页面,这个时候请求的返回就是一个比较大的
HTML
。
更多内容参考 HTTP协议状态及报文组成 一文的 HTTP请求方法
。
GET方法
用来请求访问已被 URI
识别的资源,指定的资源经服务器端解析后返回响应内容。(见下图)
POST方法
与 GET方法
功能类似,一般用来传输实体的主体;主要的目的不是为了获取响应主体的内容,是向 WEB服务器提供表单数据,尤其是大批量的数据
。
POST方法
其实是克服了 GET方法
的一些缺点,通过 POST
请求,数据就不是作为一个 URL 请求的一部分了,而是作为标准数据的格式来传递给 WEB服务器
这也就克服了 GET方法
🎜여기에서 주요 사항을 볼 수 있습니다. 요청 메소드, URL 및 메시지 본문을 통해 전달됩니다. 이것은 또한 HTTP의 특징 중 하나입니다. 동시에 메시지 헤더에도 많은 정보가 포함되어 있음을 알 수 있습니다. HTTP 프로토콜 상태 및 메시지 구성 마지막 부분에 있는 요청 헤더 메시지를 참조하세요. 🎜
- 1 첫 번째 줄은 요청 방법, 요청 URI, HTTP 프로토콜 및 버전을 포함하는 요청 줄입니다(두 번째 줄의 호스트 속성과 결합되어 전체 요청 URL)
2. 중간 부분은 여러 속성을 포함하는 메시지 헤더입니다. 형식은 그림의
속성 이름:속성 값
입니다. 서버는 메시지 헤더를 기반으로 클라이언트 정보를 얻습니다.- 3. 하단 부분은 메시지 본문입니다. 메시지 본문과 메시지 헤더 사이에 빈 줄이 있어야 합니다. 그림과 같은
게시 요청
에서 페이지 양식의 구성 요소 값은name=admin&passwd=123456
와 같은 유사한 키-값 쌍 형식으로 인코딩됩니다. > 여러 요청 매개변수의 데이터를 전달하는 형식입니다. (메시지 본문에서 데이터를 전송할 수 있을 뿐만 아니라, 요청된 URL은요청 메서드 가져오기
시 매개변수 전달도 지원합니다.)
요청 라인은 응답 라인에 해당하고 요청 헤더는 응답 헤더에 해당하며 요청 본문은 해당합니다. 응답 본문에.
🎜🎜
- 1. 응답 줄은 메시지 프로토콜 버전과 응답 상태 코드의 두 부분으로 나뉩니다.
- 2. 응답 헤더는 서버 유형, 해당 데이터 유형 응답 시간 등과 같은 여러 매개변수로 나뉩니다.
- 3. 응답 본문은 우리가 정말로 원하는 것이며 요청의 최종 반환 내용입니다. 이 콘텐츠는 주로 구문 분석됩니다. 예를 들어, 페이지가 요청되면 요청에 의해 반환되는 응답은 상대적으로 큰
HTML
입니다.
HTTP 요청 방법
을 참조하세요. 그리고 메시지 구성. 🎜GET 메서드
는 URI
로 식별된 리소스에 대한 액세스를 요청하는 데 사용됩니다. 지정된 리소스는 서버에서 구문 분석되고 응답 내용을 반환합니다. (아래 그림 참조) 🎜🎜🎜🎜🎜POST 방법
은 GET 방법
과 유사한 기능을 갖고 있으며 일반적으로 엔터티의 본문을 전송하는 데 사용됩니다. 응답 본문의 내용이지만 웹 서버, 특히 대량의 데이터 배치
에 양식 데이터를 제공합니다. 🎜🎜POST 메서드
는 실제로 GET 메서드
의 일부 단점을 극복합니다. 대신에 POST
요청을 통해 데이터가 URL 요청의 일부가 아닙니다. 이는 표준 데이터 형식으로 WEB 서버
에 전달되므로 데이터를 기밀로 유지할 수 없고 데이터 양이 제한된다는 GET 메서드
의 단점을 극복합니다. 🎜🎜🎜🎜🎜🎜🎜다음은 덜 일반적으로 사용되는 방법을 소개합니다. 🎜
- 클라이언트에서 서버로 전송된 데이터는 지정된 문서의 내용을 대체합니다.
- PUT 방식과 POST 방식의 가장 큰 차이점은 PUT은 멱등성이고 POST는 멱등성이 아니라는 점입니다. 따라서 리소스를 전송하기 위해
PUT 메서드를 더 자주 사용합니다.
PUT方法用作传输资源。
开启 PUT方法 需要控制权限,否则会造成一定的安全隐患,比如向服务器传输带有恶意 payload 的攻击脚本。
HEAD方法
几乎与GET
方法相同,只不过HEAD方法只请求消息报文头,返回的响应中没有具体的内容,用于获取报头。
- 请求服务器删除指定的资源,也就是删除文件。(一般服务器会控制此方法的权限,否则会造成重大的安全漏洞。)
- 用来查询针对请求的 URI 指定的资源支持的方法,就是询问
请求的URL能够支持什么方法
PUT 방법을 활성화하려면 권한 제어가 필요합니다. 그렇지 않으면 악성 페이로드가 포함된 공격 스크립트를 서버로 전송하는 등 특정 보안 위험이 발생할 수 있습니다.
HEAD 메서드
HEAD 메서드
는 GET
메서드와 거의 동일합니다. 단, HEAD 메서드는 메시지 헤더만 요청하고 응답을 반환합니다. 헤더를 가져오기 위한 특정 콘텐츠가 없습니다. DELETE 메소드
- 서버에 지정된 리소스 삭제, 즉 파일 삭제를 요청합니다. (일반적으로 서버는 이 메서드의 권한을 제어합니다. 그렇지 않으면 심각한 보안 허점이 발생합니다.)
- 는 요청된 URI에 지정된 리소스가 지원하는 메서드를 쿼리하는 데 사용됩니다.
요청을 요청하려면 URL이 어떤 메소드를 지원할 수 있나요?
.
이 방법은 실제 업무에서는 거의 사용되지 않으며, 공격자나 침투 테스트 엔지니어가 정보를 수집하는 데 자주 사용됩니다.
TRACE 메서드
HTTP 상태 코드에 대한 자세한 설명 | HTTP 상태 코드 |
---|---|
200 - 요청이 성공했습니다. | |
404 - 요청한 리소스(웹페이지 등)가 성공하지 못했습니다. 존재 | 500 - 내부 서버 오류 |
HTTP 상태 코드 분류 | |
설명 | |
1** | 정보, 서버가 요청을 수신했으며 요청자는 계속해서 작업을 수행해야 함 작업 수행 |
상태 코드 |
영어 이름 | 중국어 설명 |
---|---|---|
100 | Continue | Continue. 클라이언트는 |
101 | 프로토콜 전환 | 프로토콜 전환 요청을 계속해야 합니다. 서버는 클라이언트의 요청에 따라 프로토콜을 전환합니다. 더 고급 프로토콜로만 전환할 수 있습니다. 예를 들어 새 버전의 HTTP 프로토콜로 전환할 수 있습니다. |
200 | OK | 요청이 성공했습니다. 일반적으로 GET 및 POST 요청에 사용됩니다 |
201 | Created | 이 생성되었습니다. 성공적으로 요청하고 새 리소스를 만들었습니다 |
202 | Accepted | Accepted. 요청이 수락되었지만 처리가 완료되지 않았습니다 |
203 | 공인되지 않은 정보 | 공인되지 않은 정보입니다. 요청이 성공했습니다. 하지만 반환된 메타정보는 원본 서버에 있는 것이 아니라 복사본 |
204 | 콘텐츠 없음 | 콘텐츠 없음. 서버가 성공적으로 처리되었지만 콘텐츠가 반환되지 않았습니다. 웹 페이지 |
205 | 콘텐츠 재설정 | 콘텐츠 재설정 없이 브라우저가 현재 문서를 계속 표시하도록 합니다. 서버 처리가 성공적으로 완료되었으며 사용자 단말기(예: 브라우저)는 문서 보기를 재설정해야 합니다. 이 반환 코드를 사용하여 브라우저의 양식 필드를 지울 수 있습니다. |
206 | 부분 콘텐츠 | 부분 콘텐츠. 서버가 GET 요청 |
300 | 복수 선택 | 복수 선택의 일부를 성공적으로 처리했습니다. 요청한 리소스에는 여러 위치가 포함될 수 있으며 이에 따라 리소스 특성 및 주소 목록이 사용자 단말기(예: 브라우저)에서 반환되어 |
301 | Moved Permanently | Permanently moved를 선택할 수 있습니다. 요청된 리소스는 새 URI로 영구적으로 이동되었으며 반환 정보에는 새 URI가 포함되며 브라우저는 자동으로 새 URI로 이동됩니다. 앞으로 새로운 요청은 |
Found | 임시 이동 대신 새 URI를 사용해야 합니다. 301과 비슷합니다. 그러나 리소스는 일시적으로만 이동됩니다. 클라이언트는 계속해서 원본 URI | |
See Other | 를 사용해야 다른 주소를 볼 수 있습니다. 301과 비슷합니다. GET 및 POST 요청을 사용하여 | |
Not Modified | Unmodified를 확인하세요. 요청한 리소스가 수정되지 않았습니다. 서버가 이 상태 코드를 반환하면 리소스가 반환되지 않습니다. 클라이언트는 일반적으로 | 지정된 날짜 이후에 수정된 리소스만 반환하려고 함을 나타내는 헤더를 제공하여 액세스된 리소스를 캐시합니다. |
프록시 사용 | 프록시를 사용합니다. 요청된 리소스는 프록시 | |
Unused | 사용되지 않는 HTTP 상태 코드 | |
Temporary Redirect | Temporary Redirect를 통해 액세스해야 합니다. 302와 비슷합니다. GET 요청을 사용하여 리디렉션 | |
승인되지 않음 | 요청에는 사용자의 신원 인증이 필요합니다 | |
결제 필요 | 향후 사용을 위해 예약됨 | |
Forbidden | 서버는 클라이언트 클라이언트의 요청을 요청했지만 이 요청 실행을 거부했습니다. | |
Not Found | 서버가 클라이언트 요청에 따라 리소스(웹페이지)를 찾을 수 없습니다. 이 코드를 사용하면 웹사이트 디자이너는 | "요청한 리소스를 찾을 수 없습니다"에 대한 개인 페이지를 설정하세요 |
405 | Method Not Allowed | 클라이언트 요청의 메서드가 금지됩니다 |
406 | Not Acceptable | 서버를 기반으로 할 수 없습니다. 클라이언트 요청 콘텐츠 속성에서 요청을 완료합니다 |
407 | 프록시 인증 필요 | 요청에는 401과 유사한 프록시 인증이 필요하지만 요청자는 승인을 위해 프록시를 사용해야 합니다 |
408 | 요청 시간 -out | server 클라이언트가 보낸 요청에 대한 대기 시간이 너무 길어서 timeout |
409 | Contribute | 서버가 클라이언트의 PUT 요청을 완료할 때 이 코드를 반환할 수 있습니다. 서버가 처리할 때 충돌이 발생했습니다. the request |
410 | Gone | 클라이언트가 요청한 리소스가 더 이상 존재하지 않습니다. 410은 404와 다릅니다. 리소스가 영구적으로 삭제된 경우 410 코드를 사용할 수 있습니다. 웹사이트 디자이너는 Content-Length |
412 | 301 코드를 통해 리소스의 새 위치를 지정할 수 있습니다. 전제 조건 실패 | 클라이언트 요청 정보의 전제 조건 오류 |
413 | 요청 엔터티가 너무 큼 | 요청 엔터티가 너무 커서 서버가 처리할 수 없어 요청이 거부되었습니다. 클라이언트의 지속적인 요청을 방지하기 위해 서버는 | 연결을 닫을 수 있습니다. 서버가 일시적으로 처리할 수 없는 경우 Retry-After 응답 메시지가 포함됩니다
414 | Request-URI Too Large |
요청된 URI가 너무 깁니다(URI는 일반적으로 URL임). 서버가 처리할 수 없습니다 |
415 | 지원되지 않는 미디어 유형 | 서버가 요청에 첨부된 미디어 형식을 처리할 수 없습니다 |
416 | 요청한 범위가 만족스럽지 않습니다 | 클라이언트가 잘못된 범위를 요청했습니다 |
417 | Expectation Failed | 서버가 Expect 요청 헤더 정보를 충족할 수 없습니다. |
내부 오류로 인해 요청을 완료할 수 없습니다. | 501 | |
서버가 지원하지 않습니다. 요청 | 502 | |
게이트웨이 또는 프록시 역할을 하는 서버가 원격 서버로부터 잘못된 요청을 받았습니다. | 503 | |
오버로드 또는 시스템으로 인해 유지 관리로 인해 서버가 일시적으로 클라이언트의 요청을 처리할 수 없습니다. 지연 시간은 서버의 Retry-After 헤더 정보에 포함될 수 있습니다 | 504 | |
게이트웨이 또는 프록시 역할을 하는 서버가 원격 서버로부터 요청을 받지 못했습니다. time |
505 | |
서버가 요청한 HTTP 프로토콜 버전을 지원하지 않아 처리를 완료할 수 없습니다 | 추천 학습: | |
위 내용은 Python 인터페이스 자동화 테스트의 필수 기반인 http 프로토콜에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!