
โครงการพัฒนาที่ 1337 Khouribga โรงเรียนการเข้ารหัส
ผู้แต่ง: @jamiafathiya & @Achrafelkhnissi & @abellaismail7
HTTP ย่อมาจาก Hypertext Transfer Protocol ซึ่งเป็นโปรโตคอลที่ใช้ในการถ่ายโอนไฮเปอร์เท็กซ์ สิ่งนี้ทำให้เกิดคำถามสองข้อ: โปรโตคอลคืออะไรและไฮเปอร์เท็กซ์คืออะไร? ในบริบทนี้โปรโตคอลเป็นระบบของกฎที่ช่วยให้การสื่อสารของข้อมูลระหว่างหน่วยงานต่าง ๆ เช่นคอมพิวเตอร์ Hypertext เป็นคำที่ล้าสมัยสำหรับข้อความที่แสดงบนหน้าจอคอมพิวเตอร์ที่มีไฮเปอร์ลิงก์ไปยังข้อความอื่น ๆ เช่นเอกสารเว็บ ดังนั้นโปรโตคอลการถ่ายโอนไฮเปอร์เท็กซ์หมายถึงชุดของกฎเซิร์ฟเวอร์และเบราว์เซอร์ที่ใช้ในการถ่ายโอนเอกสารเว็บไปมา
HTTP อนุญาตให้ใช้เซสชันและสถานะที่เก็บไว้ระหว่างเบราว์เซอร์และเซิร์ฟเวอร์ หากผู้เข้าชมกำลังเรียกดูแกลเลอรี่ภาพถ่ายเบราว์เซอร์และเซิร์ฟเวอร์สามารถแลกเปลี่ยนข้อมูลเกี่ยวกับตำแหน่งของผู้เข้าชมในลำดับโดยส่งข้อมูลไปมาในรูปแบบของคุกกี้ เมื่อหน้าถูกโหลดใหม่เบราว์เซอร์จะส่งคุกกี้ไปยังเซิร์ฟเวอร์ที่ระบุตำแหน่งสุดท้ายที่เข้าเยี่ยมชมทำให้ผู้ชมกลับมาทำงานต่อจากจุดนั้น ซึ่งหมายความว่าในขณะที่ HTTP ไร้สัญชาติมันไม่ได้ไม่มีเซสชัน
| ภาคเรียน | คำนิยาม |
|---|---|
| เบราว์เซอร์ | แอปพลิเคชันที่ใช้ในการเข้าถึงและนำทางระหว่างเอกสาร HTML |
| ตัวแทนผู้ใช้ | แอปพลิเคชันที่ทำหน้าที่ในนามของผู้ใช้โดยทั่วไปคือเบราว์เซอร์ |
| TCP | สั้นสำหรับโปรโตคอลการควบคุมการส่งผ่านหนึ่งในโปรโตคอลอินเทอร์เน็ตหลักที่ใช้โดยเวิลด์ไวด์เว็บอีเมล FTP และการบริหารระยะไกล |
| ip | สั้นสำหรับโปรโตคอลอินเทอร์เน็ต IP ใช้ในการถ่ายโอนข้อมูลระหว่างคอมพิวเตอร์ผ่านเครือข่าย ทุกอุปกรณ์ที่เชื่อมต่อกับอินเทอร์เน็ตมีที่อยู่ IP |
| url | ย่อมาจากตัวระบุตำแหน่งทรัพยากรแบบสม่ำเสมอที่อยู่ชี้ไปที่ทรัพยากรบนเว็บ |
| DNS | สั้นสำหรับเซิร์ฟเวอร์ชื่อโดเมน แคตตาล็อก DNS ชื่อโดเมนทั้งหมด URL และชี้ไปที่ที่อยู่ IP ของเซิร์ฟเวอร์ |
| ทรัพยากร | ไฟล์หรือไฟล์ที่มีอยู่บนเซิร์ฟเวอร์เมื่อติดตาม URL |
| เซิร์ฟเวอร์ | คอมพิวเตอร์บนอินเทอร์เน็ตที่ใช้แอปพลิเคชันการจัดเก็บข้อมูลและการแชร์บางรูปแบบส่วนใหญ่เป็นแอปพลิเคชันเว็บเซิร์ฟเวอร์ |
| พร็อกซี | บริการซอฟต์แวร์หรือฮาร์ดแวร์ทำหน้าที่เป็นบุคคลกลางระหว่างลูกค้าและเซิร์ฟเวอร์ |
| คู่คำขอตอบสนอง | ลูกค้าและเซิร์ฟเวอร์สื่อสารผ่าน HTTP โดยใช้คู่การตอบสนองการร้องขอ มีการส่งคำขอและการตอบกลับจะถูกส่งคืน |
| ส่วนหัว | คำขอและการตอบกลับใช้ส่วนหัว HTTP เพื่อส่งผ่านข้อมูลไปมา |
| วิธีการร้องขอ http/คำกริยา | คำขอ HTTP ทุกครั้งมีวิธีการหรือที่เรียกว่าคำกริยาที่อธิบายว่าการกระทำที่ผู้ส่งต้องการดำเนินการกับทรัพยากร (เช่นรับ, ใส่, ลบ) |
| รหัสตอบกลับสถานะ | รหัสตัวเลขในช่วง 100 ถึง 500 อธิบายประเภทของการตอบสนองที่เซิร์ฟเวอร์ส่งกลับไปยังไคลเอนต์ |
| แคช | วิธีการจัดเก็บข้อมูลบนไคลเอนต์หรือเซิร์ฟเวอร์เพื่อเพิ่มประสิทธิภาพการทำงาน |
| ไร้สัญชาติ | HTTP ไร้สัญชาติหมายถึงการร้องขอและการตอบสนองทุกครั้งนั้นไม่ซ้ำกันและไม่มีการจัดเก็บสถานะ |
| คุกกี้ | สตริงของข้อมูลที่ผ่านไปมาระหว่างไคลเอนต์และเซิร์ฟเวอร์เพื่อสร้างเซสชันที่เป็นสถานะ |
| การประชุม | ลูกค้าและเซิร์ฟเวอร์สามารถแบ่งปันข้อมูลเกี่ยวกับรัฐโดยส่งข้อมูลไปมาสร้างเซสชัน |


| วิธี | คำอธิบาย | ความสำเร็จ | ความล้มเหลว |
|---|---|---|---|
| รับ | รับทรัพยากรที่ระบุหากมี | 200 ตกลง | ไม่พบ 404 |
| โพสต์ | สร้างทรัพยากรใหม่และเพิ่มลงในคอลเลกชัน | 201 สร้างขึ้น | 401 ไม่ได้รับอนุญาต, 409 ความขัดแย้ง, 404 ไม่พบ |
| ใส่ | อัปเดตหรือ ID ที่ใช้ทรัพยากรซิงเกิล | 200 ตกลง | 401 ไม่ได้รับอนุญาตไม่พบ 404 ไม่อนุญาตให้ใช้วิธี 405 วิธี |
| แพทช์ | แก้ไขหรือใช้รหัสซิงเกิลทรัพยากรที่มีอยู่เดิม | 200 ตกลง | 401 ไม่ได้รับอนุญาตไม่พบ 404 ไม่อนุญาตให้ใช้วิธี 405 วิธี |
| ลบ | DELETE Singleton Resource หรือ ID (คุณไม่สามารถลบคอลเลกชันของทรัพยากรได้) | 200 ตกลง | 401 ไม่ได้รับอนุญาต 404 ไม่พบ |
| ตัวเลือก | รับตัวเลือกที่มีอยู่จากทรัพยากรนี้ | 200 ตกลง | - |
| ศีรษะ | รับส่วนหัวการตอบกลับจากทรัพยากร | 200 ตกลง | ไม่พบ 404 |
ส่วนนี้รวมถึงคำอธิบายของฟังก์ชั่นที่จำเป็นเพื่อสร้างเว็บเซิร์ฟเวอร์
int getaddrinfo ( const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node : ที่อยู่โฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์
node เป็น NULL จะใช้ที่อยู่ IP ของโฮสต์ท้องถิ่น service : หมายเลขพอร์ตของเซิร์ฟเวอร์
service เป็น NULL จะใช้หมายเลขพอร์ตเริ่มต้นสำหรับบริการที่ร้องขอใน hints hints : ตัวชี้ไปยัง struct addrinfo ที่ระบุเกณฑ์สำหรับการเลือกโครงสร้างที่อยู่ซ็อกเก็ตที่ส่งคืนในรายการที่ชี้ไปที่ res
hints เป็น NULL รายการที่ส่งคืนจะมีซ็อกเก็ตที่อยู่สำหรับซ็อกเก็ตทุกประเภทสำหรับตระกูลโปรโตคอลทั้งหมดที่ได้รับการสนับสนุนจากตระกูลที่อยู่ของโหนดที่ระบุและที่อยู่ของโฮสต์ท้องถิ่นstruct addrinfo :ai_family : ครอบครัวที่อยู่ ค่าคงที่ต่อไปนี้ถูกกำหนดไว้สำหรับฟิลด์ ai_family :AF_INET : โปรโตคอลอินเทอร์เน็ต IPv4AF_INET6 : โปรโตคอลอินเทอร์เน็ต IPv6AF_UNIX : การสื่อสารในท้องถิ่นAF_UNSPEC : ไม่ได้ระบุai_socktype : ประเภทซ็อกเก็ต ค่าคงที่ต่อไปนี้ถูกกำหนดไว้สำหรับฟิลด์ ai_socktype :SOCK_STREAM : จัดเตรียมสตรีมไบต์แบบสองทางที่เชื่อถือได้ อาจมีการสนับสนุนกลไกการส่งข้อมูลนอกวงSOCK_DGRAM : รองรับ DATAGRAMS (ข้อความที่ไม่น่าเชื่อถือไม่น่าเชื่อถือของความยาวสูงสุดคงที่)SOCK_RAW : ให้การเข้าถึงโปรโตคอลเครือข่ายดิบSOCK_RDM : จัดเตรียมเลเยอร์ดาต้าแกรมที่เชื่อถือได้ซึ่งไม่รับประกันการสั่งซื้อSOCK_SEQPACKET : จัดเตรียมเลเยอร์แพ็คเก็ตที่ไม่ได้รับประกันการสั่งซื้อai_protocol : โปรโตคอลสำหรับซ็อกเก็ต ค่าคงที่ต่อไปนี้ถูกกำหนดไว้สำหรับฟิลด์ ai_protocol :IPPROTO_TCP : โปรโตคอลการควบคุมการส่งสัญญาณIPPROTO_UDP : โปรโตคอล DataGram ผู้ใช้IPPROTO_RAW : อินเตอร์เฟสโปรโตคอลดิบIPPROTO_IP : Internet ProtocolIPPROTO_ICMP : โปรโตคอลข้อความควบคุมอินเทอร์เน็ตIPPROTO_IGMP : โปรโตคอลการจัดการกลุ่มอินเทอร์เน็ตIPPROTO_IPV4 : Internet Protocol เวอร์ชัน 4IPPROTO_IPV6 : Internet Protocol เวอร์ชัน 6 res : ตัวชี้ไปยังรายการที่เชื่อมโยงของโครงสร้าง struct addrinfo หนึ่งตัวขึ้นไปที่มีข้อมูลการตอบกลับเกี่ยวกับโฮสต์
ค่าส่งคืน: ในความสำเร็จศูนย์จะถูกส่งคืน ในข้อผิดพลาด -1 จะถูกส่งคืนและ errno ถูกตั้งค่าอย่างเหมาะสม
struct addrinfo :
struct addrinfo {
int ai_flags; // input flags
int ai_family; // socket protocol family
int ai_socktype; // socket type
int ai_protocol; // protocol for socket
socklen_t ai_addrlen; // socket address length
struct sockaddr *ai_addr; // socket address
char * ai_canonname; // service name
struct addrinfo *ai_next; // next item in the list
}; int socket ( int domain, int type, int protocol);domain : โดเมนการสื่อสารซึ่งระบุความหมายการสื่อสารและตระกูลโปรโตคอลที่จะใช้ ค่าคงที่ต่อไปนี้ถูกกำหนดไว้สำหรับอาร์กิวเมนต์ domain :AF_INET : โปรโตคอลอินเทอร์เน็ต IPv4AF_INET6 : โปรโตคอลอินเทอร์เน็ต IPv6AF_UNIX : การสื่อสารในท้องถิ่นAF_UNSPEC : ไม่ได้ระบุtype : ความหมายการสื่อสาร ค่าคงที่ต่อไปนี้ถูกกำหนดไว้สำหรับอาร์กิวเมนต์ type :SOCK_STREAM : จัดเตรียมสตรีมไบต์แบบสองทางที่เชื่อถือได้ อาจมีการสนับสนุนกลไกการส่งข้อมูลนอกวงSOCK_DGRAM : รองรับ DATAGRAMS (ข้อความที่ไม่น่าเชื่อถือไม่น่าเชื่อถือของความยาวสูงสุดคงที่)SOCK_RAW : ให้การเข้าถึงโปรโตคอลเครือข่ายดิบSOCK_RDM : จัดเตรียมเลเยอร์ดาต้าแกรมที่เชื่อถือได้ซึ่งไม่รับประกันการสั่งซื้อSOCK_SEQPACKET : จัดเตรียมเลเยอร์แพ็คเก็ตที่ไม่ได้รับประกันการสั่งซื้อprotocol : โปรโตคอลที่จะใช้กับซ็อกเก็ต โดยปกติจะมีโปรโตคอลเดียวที่มีอยู่เพื่อรองรับซ็อกเก็ตชนิดเฉพาะภายในตระกูลโปรโตคอลที่กำหนดซึ่งสามารถระบุ protocol ในกรณีที่ 0 ค่าคงที่ต่อไปนี้จะถูกกำหนดไว้สำหรับอาร์กิวเมนต์ protocol :IPPROTO_TCP : โปรโตคอลการควบคุมการส่งสัญญาณIPPROTO_UDP : โปรโตคอล DataGram ผู้ใช้IPPROTO_SCTP : โปรโตคอลการส่งสัญญาณการควบคุมสตรีมIPPROTO_TIPC : การสื่อสารระหว่างกระบวนการโปร่งใสIPPROTO_RAW : แพ็คเก็ต IP ดิบerrno ถูกตั้งค่าอย่างเหมาะสม int bind ( int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd : ตัวบ่งชี้ไฟล์ของซ็อกเก็ตที่จะถูกผูกไว้addr : ตัวชี้ไปยังโครงสร้าง sockaddr ที่มีที่อยู่ที่จะผูกไว้กับซ็อกเก็ต ความยาวและรูปแบบของที่อยู่ขึ้นอยู่กับตระกูลที่อยู่ของซ็อกเก็ตaddrlen : ขนาดในไบต์ของโครงสร้างที่อยู่ชี้ไปที่อาร์กิวเมนต์ addrerrno ถูกตั้งค่าอย่างเหมาะสม int listen ( int sockfd, int backlog);sockfd : ตัวอธิบายไฟล์ของซ็อกเก็ตที่จะฟังbacklog : ความยาวสูงสุดที่คิวการเชื่อมต่อที่รอดำเนินการสำหรับ sockfd อาจเพิ่มขึ้นerrno ถูกตั้งค่าอย่างเหมาะสม int accept ( int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd : ตัวบ่งชี้ไฟล์ของซ็อกเก็ตที่จะยอมรับaddr : ตัวชี้ไปยังโครงสร้าง sockaddr โครงสร้างนี้เต็มไปด้วยที่อยู่ของซ็อกเก็ตเพียร์ตามที่รู้จักกันในเลเยอร์การสื่อสาร รูปแบบที่แน่นอนของที่อยู่ที่ส่งคืน ADDR ถูกกำหนดโดยตระกูลที่อยู่ของซ็อกเก็ต เมื่อที่อยู่ที่ส่งคืนนั้นยาวเกินไปที่จะพอดีกับโครงสร้าง sockaddr ที่ให้มาแล้วที่อยู่จะถูกตัดทอนaddrlen : ตัวชี้ไปยังวัตถุ socklen_t ซึ่งบนอินพุตระบุความยาวของโครงสร้าง sockaddr ที่ให้มาและบนเอาต์พุตระบุความยาวของที่อยู่ที่เก็บไว้errno ถูกตั้งค่าอย่างเหมาะสม ssize_t recv ( int sockfd, void *buf, size_t len, int flags);sockfd : ตัวบ่งชี้ไฟล์ของซ็อกเก็ตที่จะได้รับbuf : ตัวชี้ไปยังบัฟเฟอร์ที่ควรเก็บข้อความไว้len : ความยาวในไบต์ของบัฟเฟอร์ชี้ไปที่อาร์กิวเมนต์ bufflags : ระบุประเภทของการรับข้อความ ค่าถูกสร้างขึ้นโดย logically or'ing zero หรือมากกว่าของค่าต่อไปนี้:MSG_OOB : ประมวลผลข้อมูลนอกวงMSG_PEEK : ดูข้อความที่เข้ามาMSG_WAITALL : รอคำขอเต็มเว้นแต่ว่าซ็อกเก็ตจะไม่ปิดกั้นMSG_DONTWAIT : เปิดใช้งานการทำงานที่ไม่บล็อก; หากการดำเนินการจะบล็อกการโทรจะล้มเหลวด้วยข้อผิดพลาด EAGAIN หรือ EWOULDBLOCKMSG_NOSIGNAL : อย่าสร้าง SIGPIPE เมื่อเขียนลงในท่อที่ไม่มีใครอ่านrecv() จะส่งคืน 0. ในข้อผิดพลาด -1 จะถูกส่งคืนและ errno ถูกตั้งค่าอย่างเหมาะสม ssize_t send ( int sockfd, const void *buf, size_t len, int flags);sockfd : ตัวบ่งชี้ไฟล์ของซ็อกเก็ตที่จะส่งbuf : ตัวชี้ไปยังบัฟเฟอร์ที่มีข้อความที่จะส่งlen : ความยาวในไบต์ของข้อความชี้ไปที่อาร์กิวเมนต์ bufMSG_OOB : ประมวลผลข้อมูลนอกวงMSG_DONTROUTE : บายพาสเส้นทางใช้อินเตอร์เฟสโดยตรงMSG_DONTWAIT : เปิดใช้งานการทำงานที่ไม่บล็อก; หากการดำเนินการจะบล็อกการโทรจะล้มเหลวด้วยข้อผิดพลาด EAGAIN หรือ EWOULDBLOCKMSG_NOSIGNAL : อย่าสร้าง SIGPIPE เมื่อเขียนลงในท่อที่ไม่มีใครอ่านerrno ถูกตั้งค่าอย่างเหมาะสม ทั่วไป
คำขอ http
การตอบสนอง http
CGI
การทดสอบความเครียด